【仮説検定】2群の平均の差を検定をしよう

こんにちは、たくろー(@takuro_data )です!

前回は、1群の場合の仮説検定について学びました。

【仮説検定】仮説検定の用語を確認して実施してみよう

今回は、2群の場合の仮説検定について学びます。2グループの平均を比較して、それらの差が母集団においてもあるといってもよいかどうかを確率で判定します。

要点
  1. 対応のない2群の平均の差の検定は、t検定もしくはウェルチ検定で判定する。Rコマンドはどちらもt.test。
  2. 対応のある2群の平均の差の検定は、2群の差の分布でt検定。Rコマンドはt.test。
  3. 対応のない2群の比率の差の検定は、z分布を使って判定する。Rコマンドはprop.test。

平均の差の検定:対応のない2群

対応のない2群とは、異なる個体を2条件で測定し、それらの平均を比較します。2つの母平均はどちらもわからないため、それらの標本平均の差をとり、その差の分布を考えます。

RのサンプルデータEuStockMarketsで用いて、欧州主要国間で平均株価収益率に差があるか検定してみます。EuStockMarketsは、欧州の主要株価指数(ドイツDAX、スイスSMI、フランスCAC、英国FTSE)の1991年〜1998年の日次データです。

#データ取得
data("EuStockMarkets")
str(EuStockMarkets)

#データ加工
stock <- EuStockMarkets
r_stock <- diff(log(stock))
par(mfrow=c(1,2))
hist(r_stock[,"DAX"])
hist(r_stock[,"CAC"])

#平均・標準偏差確認
apply(r_stock, 2, mean)
apply(r_stock, 2, sd)
> apply(r_stock, 2, mean)
         DAX          SMI          CAC         FTSE 
0.0006520417 0.0008178997 0.0004370540 0.0004319851 
> apply(r_stock, 2, sd)
        DAX         SMI         CAC        FTSE 
0.010300837 0.009250036 0.011030875 0.007957728 
#F検定(等分散の検定)
var.test(r_stock[,"DAX"], r_stock[,"CAC"])
#t検定(等分散仮定)
t.test(r_stock[,"DAX"], r_stock[,"CAC"],var.equal = T)
> var.test(r_stock[,"DAX"], r_stock[,"CAC"])

	F test to compare two variances

data:  r_stock[, "DAX"] and r_stock[, "CAC"]
F = 0.87202, num df = 1858, denom df = 1858, p-value = 0.003178
alternative hypothesis: true ratio of variances is not equal to 1
95 percent confidence interval:
 0.7961927 0.9550629
sample estimates:
ratio of variances 
         0.8720172 
> t.test(r_stock[,"DAX"], r_stock[,"CAC"],var.equal = T)

	Two Sample t-test

data:  r_stock[, "DAX"] and r_stock[, "CAC"]
t = 0.61417, df = 3716, p-value = 0.5391
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0004713134  0.0009012890
sample estimates:
   mean of x    mean of y 
0.0006520417 0.0004370540 

F検定の結果は、p値が0.3%なので、等分散であるという帰無仮説が棄却され、等分散ではないという対立仮説を採択します。本来であれば、等分散ではないので、等分散を仮定した検定を行わないのですが、ここでは練習で出力しています。

#t検定(ウェルチ・等分散仮定しない)
t.test(r_stock[,"DAX"], r_stock[,"FTSE"],var.equal = F)
> t.test(r_stock[,"DAX"], r_stock[,"FTSE"],var.equal = F)

	Welch Two Sample t-test

data:  r_stock[, "DAX"] and r_stock[, "FTSE"]
t = 0.72891, df = 3493.3, p-value = 0.4661
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -0.0003718558  0.0008119691
sample estimates:
   mean of x    mean of y 
0.0006520417 0.0004319851 

ウェルチの検定結果は、p値は46%なので、ドイツDAXと英国FTSEの平均収益率が等しいという帰無仮説は棄却されませんでした。

平均の差の検定:対応のある2群

同一個体を2条件で測定するため、個体差が考慮され、より正確な検定が可能になります。具体的には、2群の差の分布を考え、差の平均がゼロか判定します。

Rのサンプルデータsleepを用いて、検定を行います。sleepは、10人の患者の2つの催眠薬(対照と比較して睡眠時間の増加)の効果を示すデータです。

#データ取得
data("sleep")
str(sleep)
#データ加工
be <- sleep[1:10,]
af <- sleep[11:20,]
data <- af[,1] - be[,1]
matrix(c(be[,1],af[,1],data),10,3)
#t検定
t.test(data)
> matrix(c(be[,1],af[,1],data),10,3)
      [,1] [,2] [,3]
 [1,]  0.7  1.9  1.2
 [2,] -1.6  0.8  2.4
 [3,] -0.2  1.1  1.3
 [4,] -1.2  0.1  1.3
 [5,] -0.1 -0.1  0.0
 [6,]  3.4  4.4  1.0
 [7,]  3.7  5.5  1.8
 [8,]  0.8  1.6  0.8
 [9,]  0.0  4.6  4.6
[10,]  2.0  3.4  1.4
> t.test(data)

	One Sample t-test

data:  data
t = 4.0621, df = 9, p-value = 0.002833
alternative hypothesis: true mean is not equal to 0
95 percent confidence interval:
 0.7001142 2.4598858
sample estimates:
mean of x 
     1.58 

t検定の結果、p値は0.3%なので、2つの睡眠薬の効果が等しいという帰無仮説は棄却されました。

比率の差の検定:対応のない2群

2郡で、母比率に差があるかないかを判定します。元のデータがなく集計済みのデータから検定できます。

ABテストを実施し、変更前は4,000サンプル・CVR3%で、変更後が3,000サンプル・CVR4%でした。この場合、変更後を採択していいでしょうか。

prop.test(c(120,120),c(4000, 3000))
> prop.test(c(120,120),c(4000, 3000))

	2-sample test for equality of proportions with continuity correction

data:  c(120, 120) out of c(4000, 3000)
X-squared = 4.8799, df = 1, p-value = 0.02717
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.0190733115 -0.0009266885
sample estimates:
prop 1 prop 2 
  0.03   0.04 

検定の結果、p値は2.7%なので有意水準5%で、変更前と変更後のCVRが等しいという帰無仮説は棄却されました。よって変更後を採択して、統計的に問題ないでしょう。

さいごに

今回は、2群の仮説検定について学習しました。

次回は、3群以上の平均の差の検定ができる分散分析について学習します。

【分散分析】3群以上の平均の差を検定しよう