統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

ウェルチの検定 Welch's t-test

ブログランキングに参加しています。
まずはぽちぽちっとお願いします。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
にほんブログ村 科学ブログ 数学へ

平均値の差の検定、いわゆるt検定は、等分散かどうかなんて気にしないでいい。

どんな時もウェルチの検定を行えばいい。

ウェルチの検定とは?

ウェルチ (Welch) の検定は、二つのサンプルの母分散が等分散とは仮定できないときに使う平均値の差の検定だ。

等分散の時でも使えるし、等分散ではなくても使える。

だから、いつでもウェルチ検定を使えばいい。

等分散性の検定を事前に実施する必要はない。

ウェルチの検定を統計ソフトRの関数で実施する

統計ソフトRでウェルチの検定を行う方法には、t.test()を使う。

t検定の標準仕様がウェルチの検定になっている。

グループ1が4から14の11個のデータ、グループ2が1から11のそれぞれ3倍で11個のデータだとしよう。

X1 <-seq(1:11)+3
X2 <- seq(1:11)*3

その時のウェルチの検定は、以下のように実施する。

t.test(X1,X2)

結果は、以下の通りで、p値が0.01453で統計学的有意に異なる。

> t.test(X1,X2)

        Welch Two Sample t-test

data:  X1 and X2
t = -2.846, df = 12.195, p-value = 0.01453
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -15.877804  -2.122196
sample estimates:
mean of x mean of y 
        9        18 

ウェルチの検定を改めて作った関数で実施する

統計ソフトRのfunction()を使い、関数を改めて作って実施してみる。

変数は平均値、標準偏差、サンプルサイズを代入する形にする。

welch.t.test <- function (N1, X1bar, s1, N2, X2bar, s2, 
alternative=c("two.sided","one.sided"))
{
 data.name <- sprintf("\nN1=%s, X1bar=%s, SD1=%s\nN2=%s, X2bar=%s, SD2=%s", N1,X1bar,s1,N2,X2bar,s2)
 alternative <- match.arg(alternative)
 tside <- switch(alternative, one.sided=1, two.sided=2)

 estimate <- X1bar-X2bar
 tstat <- abs(estimate)/sqrt(s1^2/N1+s2^2/N2)
 names(tstat) <- "t"
 df<-(s1^2/N1+s2^2/N2)^2/(s1^4/(N1^2*(N1-1))+s2^4/(N2^2*(N2-1)))
 names(df) <- "df"

 pval <- pt(q=tstat, lower.tail=F, df=df)*tside

 METHOD <- "Welch t-test"
 structure(list(statistic=tstat, parameter=df,  p.value=pval, 
 estimate=estimate,  alternative=alternative, data.name=data.name, 
 method=METHOD), class="htest")
}

グループ1とグループ2のサンプルサイズ、平均値、標準偏差を計算する。

X1 <-seq(1:11)+3
(N1 <- length(X1))
(X1bar <- mean(X1))
(s1 <- sd(X1))

X2 <- seq(1:11)*3
(N2 <- length(X2))
(X2bar <- mean(X2))
(s2 <- sd(X2))

さきほど作った関数に代入する。

welch.t.test(N1=11, X1bar=9, s1=3.316625, N2=11, X2bar=18, s2=9.949874)

結果はt.test()と同じ結果になる。

> welch.t.test(N1=11, X1bar=9, s1=3.316625, N2=11, X2bar=18, s2=9.949874)

        Welch t-test

data:  
N1=11, X1bar=9, SD1=3.316625
N2=11, X2bar=18, SD2=9.949874
t = 2.846, df = 12.195, p-value = 0.01453
alternative hypothesis: two.sided
sample estimates:
[1] -9

一人一人のデータがある場合は、t.test()を使えばよいが、人数、平均値、標準偏差だけが得られている場合は、今回自作の関数を使うと計算できる。

先行研究から人数、平均値、標準偏差という要約値しか得られない場合にどんな条件であれば、統計学的に有意になるかなどを検討する際に役立つ。

例えばグループ1の標準偏差が3倍(つまり同じ)になったら、どうなるか?

> welch.t.test(N1=11, X1bar=9, s1=3.316625*3, N2=11, X2bar=18, s2=9.949874)

        Welch t-test

data:  
N1=11, X1bar=9, SD1=9.949875
N2=11, X2bar=18, SD2=9.949874
t = 2.1213, df = 20, p-value = 0.04658
alternative hypothesis: two.sided
sample estimates:
[1] -9

先ほどに比べ、p値が3倍以上になっていて、0.05近くになっている。このように簡単に架空の条件での結果を確認することができる。

これは、サンプルサイズ計算の際に役に立つ。

ウェルチの検定をエクセルで計算する(2020年5月20日更新)

エクセルシートでウェルチの検定を集計データでできるようにした。生データで計算するシートもセット。よければどうぞ。

https://happyhappygk.base.ec/items/29553678

まとめ

平均値の差の検定、いわゆるt検定は、いつでもウェルチの検定を行えばよい。

等分散かどうかは気にしなくてよい。

統計ソフトRではt.test()を使う。

サンプルサイズ、平均値、標準偏差がわかる場合の関数を作成した。

エクセル計算機は2020年5月20日に公開した。よければどうぞ。

https://happyhappygk.base.ec/items/29553678

参考ウェブサイト&参考になる書籍

aoki2.si.gunma-u.ac.jp