2016/07/24
2020/05/04
Rでt検定行う方法とそのまま使える自作関数
ここでは、Rでt検定を行う方法について解説していきます。t分布に従うと仮定して、ときには複雑な式を使って標準化する必要もあるt検定ですが、Rを使えば一瞬で出来てしまいます。
t検定には対応の無い検定としてスチューデントのt検定、ウェルチの検定、ウィルコクソン検定があります。そして対応のある検定もあり、いろいろな種類がありますが、全てR上で簡単なプログラムによって行うことが出来ます。
・t分布のグラフを描きたい方は、Rでt分布のグラフを描く方法【dt()の使い方】を参考にしてください。
・t検定の理論的な内容については、t検定とは?種類と手順を解説!でまとめています。
※R言語入門のトップページはこちら
目次
一標本の母平均のt検定
まず、一標本の母平均の検定のプログラムは次のようになります。
#検定に使うリストの生成
change <- c(1.1,-1,-1.5,-8.5,0.9,1.2,5.9,-5.4,-7.3,-2.3)
t.test(change, mu=0) #両側検定
t.test(change, mu=0, alternative=”greater”) #片側検定(上側)
t.test(change, mu=0, alternative=”less”) #片側検定(下側)
関数t.test()の引数として、検定に使うリストと、帰無仮説(mu=任意の母平均値)を渡します。また、特に何も指定しない場合は、両側検定になり、片側検定がやりたい場合は、alternative=”greater”かalternative=”less”をオプションに設定しましょう!
対応の無い二標本のt検定
次に対応の無い検定についてです。今回解析に使う2群のベクトルデータa,bを用意ます。これらが正規分布に従うと仮定してt検定を行っていきます。
b <- c(20,18,14,23,16)
等分散仮定、sudentのt検定
二つの標本データの母分散が等しいと仮定した検定を、行っていきましょう。ここで使う関数は”t.test()”であり、引数には検定に使いたい二つのベクトルと、オプションで”var=T”(TRUEでも可)を指定して、等分散仮定を行います。
t.ans1 <- t.test(a,b,var=T)
t.ans1
Two Sample t-testdata: a and b
t = -3.659, df = 9, p-value = 0.005244
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-14.348420 -3.384914
sample estimates:
mean of x mean of y
9.333333 18.200000
結果から、t値が-3.659であり、p値が0.005244なので、有意水準が1%でも5%でも有意差が認められ、
\(H_0:\)二つのデータの母集団の母平均は等しい
という帰無仮説は棄却されます。
不等分散仮定、ウェルチの検定
ウェルチの検定では不等分散仮定の上でt検定を行います。なのでstudentとの違いはオプションで”var=F”(FALSEでも可)を指定することです。関数は同じく”t.test()”を使います。
t.ans2 <- t.test(a,b,var=F)
t.ans2
Welch Two Sample t-testdata: a and b
t = -3.7409, df = 8.9963, p-value = 0.004622
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-14.228736 -3.504597
sample estimates:
mean of x mean of y
9.333333 18.200000
結果から、t値が -3.7409であり、p値が00.004622なので、有意水準が5%でも1%でも有意差が認められ、今回も
\(H_0:\)二つのデータの母集団の母平均は等しい
という帰無仮説は棄却されます。
ノンパラメトリック、ウィルコクソン検定
ウィルコクソン検定では関数”wilcox.test()”を使います。引数に検定に使いたい二つのベクトルをとります。
t.ans3 <- wilcox.test(a,b)
t.ans3
Wilcoxon rank sum testdata: a and b
W = 1, p-value = 0.008658
alternative hypothesis: true location shift is not equal to 0
これまた、有意差が認められる結果となりました。
p値のみを抽出したい場合
ここでp値3種類の結果のp値のみを抽出したい場合は、
と書きます。すると以下のようになります。
[1] 0.005243572
t.ans2$p.value
[1] 0.004622328
t.ans3$p.value
[1] 0.008658009
対応のある二標本のt検定
まずは今回の検定用のベクトルc,dを作成します。
d <- c(16,15,8,4,21,12)
対応のある通常のt検定
通常のt検定は”t.test()”で行います。この際対応があるのでオプションとして”paired=T”(TRUEでも可)を指定します。
t.ans1 <- t.test(c,d,paired=T)
t.ans1Paired t-testdata: c and d
t = -1.9554, df = 5, p-value = 0.1079
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-5.015003 0.681670
sample estimates:
mean of the differences
-2.166667
ウィルコクソン検定
ウィルコクソンの場合は”wilcox.test()”を用い、先ほどと同様にやはり”paired=T”をオプションで指定します。
t.ans2
Wilcoxon signed rank test with continuity correctiondata: c and d
V = 3, p-value = 0.1378
alternative hypothesis: true location shift is not equal to 0
3種のt検定を行なって結果を出力する自作関数
今回の記事で紹介した3種のt検定を行なって、結果を出力を行う自作関数を作ったのでお役立てください。引数は、
t_fun(ベクトル1,ベクトル2,出力ファイル名,検定に使うものの名前)
として使います。
t_fun <- function(da1,da2,fn,name){
ans1 <- t.test(da1,da2,var=T)
ans2 <- t.test(da1,da2,var=F)
ans3 <- wilcox.test(da1,da2)
ave1 = ave(da1)[1]
sd1 = sd(da1)
ave2 = ave(da2)[1]
sd2 = sd(da2)
dif = abs(ave1 – ave2)
result <- c(name,ave1,sd1,ave2,sd2,dif,ans1$statistic,ans1$p.value,ans2$statistic,ans2$p.value,ans3$statistic,ans3$p.value)
names(result) = c(“m/z名”,“平均1”,“標準誤差1”,“平均2”,“標準誤差2”,“平均の差”,“等分散t”,“等分散p”,“不等分散t”,“不等分散p”,“ウィルコクソンW”,“ウィルコクソンp”)
write.table(t(result),fn,append=T,quote=F,sep=“,”,row.names=F,col.names=T,fileEncoding=“CP932”)
write.table(“”,fn,append=T,quote=F,sep=“,”,row.names=F,col.names=F,fileEncoding=“CP932”)
}
※R言語入門のトップページはこちら
Recommended