103

Python を使用して qq-plot を作成するにはどうすればよいですか?

大量の測定値があり、XY 値を入力として受け取るプロット関数を使用しているとします。この関数は、測定値の分位数を、ある分布 (正規分布、一様分布など) の対応する分位数に対してプロットする必要があります。

結果のプロットにより、測定値が想定された分布に従っているかどうかを評価できます。

http://en.wikipedia.org/wiki/Quantile-quantile_plot

R と Matlab は両方とも、このために既製の関数を提供していますが、Python で実装するための最もクリーンな方法は何だろうと思っています。

4

9 に答える 9

119

更新:人々が指摘したように、この答えは正しくありません。確率プロットは、変位値 - 変位値プロットとは異なります。ディストリビューションの関係を解釈または伝達する際に誤りを犯す前に、これらのコメントやその他の回答を確認してください。

私はそれscipy.stats.probplotがあなたが望むことをすると思います。詳細については、ドキュメントを参照してください。

import numpy as np 
import pylab 
import scipy.stats as stats

measurements = np.random.normal(loc = 20, scale = 5, size=100)   
stats.probplot(measurements, dist="norm", plot=pylab)
pylab.show()

結果

ここに画像の説明を入力

于 2012-12-13T18:11:14.907 に答える
62

の使用qqplotstatsmodels.api別のオプションです。

非常に基本的な例:

import numpy as np
import statsmodels.api as sm
import pylab

test = np.random.normal(0,1, 1000)

sm.qqplot(test, line='45')
pylab.show()

結果:

ここに画像の説明を入力

ドキュメントとその他の例はこちら

于 2014-03-16T02:50:40.933 に答える
23

あるサンプルと別のサンプルの QQ プロットを行う必要がある場合、statsmodels には qqplot_2samples() が含まれています。上記のコメントの Ricky Robinson のように、これは理論上の分布に対するサンプルである QQ プロットと確率プロットとして私が考えるものです。

http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot_2samples.html

于 2014-06-13T19:44:02.303 に答える
6

私はこれを思いつきました。多分あなたはそれを改善することができます。特に、分布の分位数を生成する方法は、私には面倒に思えます。

データを他の分布と比較するためnp.random.normalに、他の任意の分布に置き換えることができます。np.random

#!/bin/python

import numpy as np

measurements = np.random.normal(loc = 20, scale = 5, size=100000)

def qq_plot(data, sample_size):
    qq = np.ones([sample_size, 2])
    np.random.shuffle(data)
    qq[:, 0] = np.sort(data[0:sample_size])
    qq[:, 1] = np.sort(np.random.normal(size = sample_size))
    return qq

print qq_plot(measurements, 1000)
于 2012-12-13T17:54:07.757 に答える