1自由度のカイ二乗として分布する検定統計量を計算し、これがPythonを使用してどのP値に対応するかを調べたいと思います。
私はpython and maths/stats newbieなので、ここで欲しいのはSciPyからのchi2分布の確率密度関数であると思います。
from scipy import stats
stats.chi2.pdf(3.84 , 1)
0.029846
ただし、数学を知っているがpythonではない)同僚と話してグーグルで話している人は、0.05であるべきだと言っています。
何か案は?乾杯、デイビー
ここでクイックリフレッシャー:
確率密度関数:ポイント値と考えてください。与えられた点での確率はどれくらいの密度ですか?
累積分布関数:これは、特定の点までの関数の確率の質量です。分布の何パーセントがこの点の片側にありますか?
あなたの場合、あなたは正しい回答を得たPDFを取りました。 1-CDFを試す場合:
>>> 1 - stats.chi2.cdf(3.84, 1)
0.050043521248705147
カイ二乗和と自由度が与えられた帰無仮説の確率を計算するには、chisqprob
を呼び出すこともできます。
>>> from scipy.stats import chisqprob
>>> chisqprob(3.84, 1)
0.050043521248705189
注意:
chisqprob は非推奨です! stats.chisqprobは、scipy 0.17.0で廃止されました。代わりに stats.distributions.chi2.sf を使用してください
Stats.chisqprob()および1-stats.chi2.cdf()は小さなカイ2乗値に匹敵するように見えますが、大きなカイ2乗値には前者が好ましいです。後者は、マシンイプシロンよりも小さいp値を提供できず、マシンイプシロンに近い非常に不正確な回答を提供します。他の人が示すように、2つの方法で小さなカイ2乗値の比較可能な値が得られます。
>>>from scipy.stats import chisqprob, chi2
>>>chisqprob(3.84,1)
0.050043521248705189
>>>1 - chi2.cdf(3.84,1)
0.050043521248705147
1-chi2.cdf()を使用すると、次のように分類されます。
>>>1 - chi2.cdf(67,1)
2.2204460492503131e-16
>>>1 - chi2.cdf(68,1)
1.1102230246251565e-16
>>>1 - chi2.cdf(69,1)
1.1102230246251565e-16
>>>1 - chi2.cdf(70,1)
0.0
Chisqprob()は、より大きな範囲のカイ2乗値に対して正確な結果を提供しますが、アンダーフローするまで、ゼロよりも大きい最小フロートとほぼ同じp値を生成します。
>>>chisqprob(67,1)
2.7150713219425247e-16
>>>chisqprob(68,1)
1.6349553217245471e-16
>>>chisqprob(69,1)
9.8463440314253303e-17
>>>chisqprob(70,1)
5.9304458500824782e-17
>>>chisqprob(500,1)
9.505397766554137e-111
>>>chisqprob(1000,1)
1.7958327848007363e-219
>>>chisqprob(1424,1)
1.2799986253099803e-311
>>>chisqprob(1425,1)
0.0
更新:前述のとおり、chisqprob()はscipyバージョン0.17.0以降では非推奨です。 scipy.stats.distributions.chi2.sf()を使用して、高精度のカイ2乗値を取得できるようになりました。例:
>>>from scipy.stats.distributions import chi2
>>>chi2.sf(3.84,1)
0.050043521248705189
>>>chi2.sf(1424,1)
1.2799986253099803e-311
あなたがするつもりでした:
>>> 1 - stats.chi2.cdf(3.84, 1)
0.050043521248705147
他のソリューションのいくつかは非推奨です。 _scipy.stats.chi2
_ Survival Functionを使用します。 1 - cdf(chi_statistic, df)
と同じです
例:
_from scipy.stats import chi2
p_value = chi2.sf(chi_statistic, df)
_
数学を理解したい場合、サンプルのp値x(固定)は
P [P(X)<= P(x)] = P [m(X)> = m(x)] = 1-G(m(x)^ 2)
どこ、
したがって、固定観測値xのp値を計算する場合、m(x)(一般化されたzスコア)、および1-G(m(x)^ 2)。
たとえば、xが単変量(k = 1)正規分布からサンプリングされ、zスコア= 2(平均から2標準偏差)の場合、p値は約.046であることがよく知られています(aを参照) Zスコアテーブル)
In [7]: from scipy.stats import chi2
In [8]: k = 1
In [9]: z = 2
In [10]: 1-chi2.cdf(z**2, k)
Out[10]: 0.045500263896358528