Pythonを使用してどのようにqq-plotを作成しますか?
多数の測定値があり、入力としてXY値をとるプロット関数を使用していると仮定します。この関数は、測定値の分位数を、ある分布(正規、均一...)の対応する分位数に対してプロットする必要があります。
結果のプロットにより、仮定された分布に従うかどうかを測定で評価できます。
http://en.wikipedia.org/wiki/Quantile-quantile_plot
RとMatlabはどちらもこのための既製の関数を提供しますが、Pythonで実装するための最もクリーンな方法は何だろうと思っています。
scipy.stats.probplot
はあなたが望むことをするだろうと思います。詳細については、 documentation を参照してください。
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()
結果
statsmodels.api
のqqplot
を使用することも別のオプションです。
非常に基本的な例:
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()
結果:
ドキュメントとその他の例は here です
あるサンプルと別のサンプルのQQプロットを行う必要がある場合、statsmodelsにはqqplot_2samples()が含まれます。上記のコメントのリッキー・ロビンソンのように、これは理論上の分布に対するサンプルである確率プロットに対するQQプロットとして考えているものです。
現在、statsmodelsパッケージに含まれています。
http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot.html
これを思いついた。たぶんあなたはそれを改善することができます。特に、分布の分位数を生成する方法は、私にとって面倒です。
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)
ボケを使用できます
from bokeh.plotting import figure, show
from scipy.stats import probplot
# pd_series is the series you want to plot
series1 = probplot(pd_series, dist="norm")
p1 = figure(title="Normal QQ-Plot", background_fill_color="#E8DDCB")
p1.scatter(series1[0][0],series1[0][1], fill_color="red")
show(p1)
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()
ここで、probplotは、dist = "norm"で特定されたグラフ測定値と正規分布を描画します。