web-dev-qa-db-ja.com

numpy / scipyで2標本片側検定を実行する方法

Rでは、次を使用するだけで2サンプルの片側t検定を実行できます。

> A = c(0.19826790, 1.36836629, 1.37950911, 1.46951540, 1.48197798, 0.07532846)
> B = c(0.6383447, 0.5271385, 1.7721380, 1.7817880)
> t.test(A, B, alternative="greater")

    Welch Two Sample t-test

data:  A and B 
t = -0.4189, df = 6.409, p-value = 0.6555
alternative hypothesis: true difference in means is greater than 0 
95 percent confidence interval:
 -1.029916       Inf 
sample estimates:
mean of x mean of y 
0.9954942 1.1798523 

Python world、scipyは同様の関数 ttest_ind を提供しますが、両側t検定のみを実行できます。私が見つけたトピックに関する最も近い情報 this linkですが、scipyで片側対両側を実装するポリシーの議論のようです。

したがって、私の質問は、numpy/scipyを使用して片側バージョンのテストを実行する方法に関する例や指示を誰もが知っているということです。

28
Timo

メーリングリストのリンクから:

片側テストは両側テストからバックアウトできるためです。 (対称分布では、片側p値は両側p値のちょうど半分です)

さらに、scipyは常に符号付きの検定統計量を提供すると言います。これは、両側検定のp値とt値が与えられた場合、p/2 < alpha and t > 0、およびp/2 < alpha and t < 0

61
lvc

受け入れられた回答にコメントとしていくつかの洞察を追加しようとしたが、コメントの一般的な制限のためにそれらを適切に書き留めることができなかったので、完全な回答として2セントを入れることにしました。

まず、調査問題を適切に定式化しましょう。調査中のデータは

_A = np.array([0.19826790, 1.36836629, 1.37950911, 1.46951540, 1.48197798, 0.07532846])
B = np.array([0.6383447, 0.5271385, 1.7721380, 1.7817880])
_

サンプル手段で

_A.mean() = 0.99549419
B.mean() = 1.1798523
_

Bの平均は明らかにAの平均よりも大きいため、この結果が統計的に有意であるかどうかを確認したいと思います。

帰無仮説があります

_H0: A >= B
_

対立仮説を支持して拒否したい

_H1: B > A
_

scipy.stats.ttest_ind(x, y)を呼び出すと、これはx.mean()-y.mean()の値に対して仮説検定を行います。つまり、計算全体で正の値を取得するために(すべての考慮事項を単純化します)コール

_stats.ttest_ind(B,A)
_

stats.ttest_ind(B,A)の代わりに。私たちは答えとして得ます

  • _t-value = 0.42210654140239207_
  • _p-value = 0.68406235191764142_

documentation に従って、これは両側t検定の出力であるため、片側検定ではpを2で除算する必要があります。したがって、選択した重要度レベルalphaに応じて、

_p/2 < alpha
_

帰無仮説_H0_を拒否するため。 _alpha=0.05_の場合は明らかにそうではないため、拒否することはできません_H0_。

tまたはpで代数を行わずに_H0_を拒否するかどうかを決定する別の方法は、t値を見て、それをクリティカルt値と比較することです。 _t_crit_は、問題に適用される自由度dfの望ましい信頼レベル(例:95%)で。私たちが持っているので

_df = sample_size_1 + sample_size_2 - 2 = 8
_

this one thatのような統計テーブルから取得します

_t_crit(df=8, confidence_level=95%) = 1.860
_

私たちは明らかに持っています

_t < t_crit
_

したがって、同じ結果、つまりを拒否することはできません_H0_。

7
bpirvu

帰無仮説が_Ho: P1>=P2_であり、対立仮説が_Ha: P1<P2_である場合。 Pythonでテストするには、ttest_ind(P2,P1)と記述します。 (位置が最初にP2であることに注意してください)。

_first = np.random.normal(3,2,400)
second = np.random.normal(6,2,400)
stats.ttest_ind(first, second, axis=0, equal_var=True)
_

以下のような結果が得られますTtest_indResult(statistic=-20.442436213923845,pvalue=5.0999336686332285e-75)

Pythonでは、_statstic <0_の場合、実際のp値は実際には_real_pvalue = 1-output_pvalue/2= 1-5.0999336686332285e-75/2_であり、約0.99です。 p値が0.05より大きいため、6> = 3という帰無仮説を棄却できません。 _statstic >0_の場合、実際のzスコアは実際に_-statstic_に等しく、実際のp値はpvalue/2に等しくなります。

Ivcの答えは、_(1-p/2) < alpha and t < 0_の場合である必要があります。これは、小なり仮説を拒否できます。

3
evapanda

これを見ましたか? numpyで統計 "t-test"を計算する方法

それがまさにこの質問が見ているものだと思います。

基本的に:

import scipy.stats
x = [1,2,3,4]
scipy.stats.ttest_1samp(x, 0)

Ttest_1sampResult(statistic=3.872983346207417, pvalue=0.030466291662170977)

rのこの例と同じ結果です。 https://stats.stackexchange.com/questions/51242/statistical-difference-from-zero

1
Jorge