2017-03-29 14 views
1

Chi-squareでp値を取得する必要があります。 私のプログラムの開発は、次のとおりです。python chisquareとChi-square値のテーブルを使用した結果が異なる

from scipy.stats import chisquare 

c = chisquare([10,4,7,5],ddof=[0,1,2,3]) 

print(c) 

結果は次のとおりです。

Power_divergenceResult(statistic=3.2307692307692308, pvalue=array([ 0.35739509, 0.19881419, 0.07226674,   nan])) 

私は(このサイトhttps://www.medcalc.org/manual/chi-square-table.phpから例えば)カイ二乗値のテーブルを使用したp値を取得しようとすると、結果が異なっています。 自由度= 1(ddof = 0)のpython p-valueを使用するこの例では、0.35739509ですが、表のp値は0.01です。 結果が異なる理由を説明してください。

答えて

2

機能chisquareChi-squared hypothesis testを実行しますが、表は約Chi-square distributionです。

配布物で作業する場合は、scipy.stats.chi2を使用する必要があります。具体的には、テーブルからの値を複製する:

import scipy as sp 

p = 0.1 
df = 5 

x = sp.stats.chi2.ppf(1-p, df=df) 
print(x) # 9.23635689978 

所与のxおよび自由度のp値を取得するには、次の表のようにPを定義すること

p = 1 - sp.stats.chi2.cdf([10,4,7,5], df=[0,1,2,3]) 
print(p) 
# [  nan 0.04550026 0.03019738 0.17179714] 

注xから無限大までの確率密度関数上で積分する。 scipyにおける累積密度関数は、0からxまでの積分である。したがって、p = 1 - cdf

+0

p値を取得するために正確に何をすればよいですか? – LOGA

+0

@LOGA scipy: 'x'と' df'を 'cdf'関数に渡し、結果から1を引いた値を取る必要があります(2番目のコード例を参照)。テーブル:あなたのdfに対応する行のxに最も近い値を見つけて、列の上からp値を取る。 (私はあなたの質問から値を使用する例を更新しました) – kazemakase

+0

なぜ4つの値を返しますか? df = 1の場合、Pythonは[nan ... ... ...] – LOGA

関連する問題