pythonでのTチェック
2890 ワード
pythonでは、検査はscipyを呼び出すことが多い.statsによる計算(公式ドキュメント:https://docs.scipy.org/doc/scipy/reference/stats.html#module-scipy.stats)
T検査も3つのブロックに分かれています.単一サンプルT検査 独立サンプルT検査 ペアサンプルT検査 1、まず単一サンプルT検査について、numpyによっていくつかの正規分布のデータを生成して、それから単一サンプルT検査を見て
実行結果は次のとおりです.
データ平均値と0のp値は0.05より大きく,差は顕著ではなかった.データ平均値と1のp値は0.05未満で有意差があった.
2、独立サンプルT検査に対して、直接検査することはできない.まず分散性を保証しなければならない.すなわち、まず分散性検査をしなければならない.よく見られる分散性検査にはleveneとbartlettがある.
分散が同じ2つのデータp値が大きく、有意差はなく、独立したサンプルTを直接使用して検査することができる.
生成されたmean値は異なり,std値が同じ一対のデータに有意差があった.
分散不整のデータについてはT’検査(近似T検査)が必要である
実際にはttest_ind関数にequalを追加var=FalseパラメータはT’検査となり、ここでFalseに設定するとStudent’s t-testではなくWelch’s t-testが行われる.
以上のように分散には有意差があるが,データ差は有意ではない.分散の不均一なデータについて、T検査を直接行うと、p値が小さくなり、顕著な結果になる傾向があります.
3、ペアリングサンプルT検査
まず、2つのサンプルが関連するサンプルであることを確認し、次のように検査すればいいです.
T検査も3つのブロックに分かれています.
from scipy import stats
import numpy as np
# MEAN 0,STD 1 100
data = np.random.normal(loc=0, scale=1, size=100)
print(stats.ttest_1samp(data, 0))
print(stats.ttest_1samp(data, 1))
実行結果は次のとおりです.
Ttest_1sampResult(statistic=-0.6863184685001024, pvalue=0.4941166024877156)
Ttest_1sampResult(statistic=-11.4099277678686, pvalue=9.488883450940155e-20)
データ平均値と0のp値は0.05より大きく,差は顕著ではなかった.データ平均値と1のp値は0.05未満で有意差があった.
2、独立サンプルT検査に対して、直接検査することはできない.まず分散性を保証しなければならない.すなわち、まず分散性検査をしなければならない.よく見られる分散性検査にはleveneとbartlettがある.
data1 = np.random.normal(loc=0, scale=1, size=100)
data2 = np.random.normal(loc=1, scale=1, size=100)
print(stats.bartlett(data1, data2))
print(stats.levene(data1, data2))
----
#
BartlettResult(statistic=0.008704833109176064, pvalue=0.9256654742880931)
LeveneResult(statistic=0.13570809823548327, pvalue=0.7129791411980255)
分散が同じ2つのデータp値が大きく、有意差はなく、独立したサンプルTを直接使用して検査することができる.
print(stats.ttest_ind(data1, data2))
----
#
Ttest_indResult(statistic=-8.746508944155257, pvalue=9.52763110388834e-16)
生成されたmean値は異なり,std値が同じ一対のデータに有意差があった.
分散不整のデータについてはT’検査(近似T検査)が必要である
実際にはttest_ind関数にequalを追加var=FalseパラメータはT’検査となり、ここでFalseに設定するとStudent’s t-testではなくWelch’s t-testが行われる.
data1 = np.random.normal(loc=0, scale=1, size=100)
data2 = np.random.normal(loc=0, scale=2, size=100)
print(stats.bartlett(data1, data2))
print(stats.levene(data1, data2))
print(stats.ttest_ind(data1, data2, equal_var=False))
----
#
BartlettResult(statistic=48.86476955207111, pvalue=2.7423257937347823e-12)
LeveneResult(statistic=39.662356907852576, pvalue=1.911540051191041e-09)
Ttest_indResult(statistic=-0.29010850521153353, pvalue=0.7721554482009412)
以上のように分散には有意差があるが,データ差は有意ではない.分散の不均一なデータについて、T検査を直接行うと、p値が小さくなり、顕著な結果になる傾向があります.
data1 = np.random.normal(loc=0, scale=1, size=100)
data2 = np.random.normal(loc=0, scale=2, size=100)
print(stats.bartlett(data1, data2))
print(stats.levene(data1, data2))
print(stats.ttest_ind(data1, data2, equal_var=False))
print(stats.ttest_ind(data1, data2))
----
#
BartlettResult(statistic=27.356888446192123, pvalue=1.6916077351795814e-07)
LeveneResult(statistic=23.457560950408478, pvalue=2.5699985012691294e-06)
Ttest_indResult(statistic=-1.1305945233688985, pvalue=0.2599245194382134)
Ttest_indResult(statistic=-1.1305945233688985, pvalue=0.25959342786776923)
3、ペアリングサンプルT検査
まず、2つのサンプルが関連するサンプルであることを確認し、次のように検査すればいいです.
stats.ttest_rel(data1, data2)