![見出し画像](https://assets.st-note.com/production/uploads/images/101393760/rectangle_large_type_2_a60e2432cc3b66f0d3d6aace636fceb5.png?width=800)
t.test()で対応のない2標本t検定
東京大学医学部老年病科の矢可部です。
基礎、臨床研究の統計解析でRを用いています。
学生や研修医の指導に使うという目的もあり、noteに記事を書いています。
今回は、2群のデータの平均の有意差を検定する「対応のないt検定」のやり方を解説します。
なおこのnoteはRの操作法を習得してもらうことに主眼を置いているため、統計解析の背景や原理については割愛しています。できれば成書などで勉強することをお勧めします。
データを直接入力する方法
Welchの2標本t検定
以下の問題を考えてみます。
ある細胞に化合物Xを投与すると遺伝子Yの発現が変化するかを検証したい。対照群とX投与群の遺伝子YをPCRで定量する実験を独立して3回ずつ行ったところ、以下の結果が得られた。
対照群: 1.2, 2.1, 2.5
X投与群: 3.4, 4.4, 5.1
対応のないt検定により、対照群とX投与群で有意差があるかを検定せよ。
このような独立した2つのグループのデータの平均に差があるかを解析するには「対応のないt検定」が用いられます。
まず、データをRに入力します。
# 対照群のデータをCという文字に代入する。
C<-c(1.2, 2.1, 2.5)
# X投与群のデータをXという文字に代入する。
X<-c(3.4, 4.4, 5.1)
以下のように、t.test()を使うと検定ができます。
# CとXについて、対応のないt検定を行う。
t.test(C, X)
以下のような結果が出力されました。
![](https://assets.st-note.com/img/1680003070703-dlr1oeBIeW.png?width=800)
Welch の2標本t検定を行い、P値は0.02151と求められました。
有意水準を5%とする場合、p<0.05なのでCとXの平均には有意差があるという判定になります。
この検定の流れは、以下の通りです。
帰無仮説「CとXの平均は等しい」を立てる。
→帰無仮説に対し、対立仮説「CとXの平均に差がある」を立てる。
→帰無仮説が成立すると仮定した場合、解析されるデータが発生する確率pを計算する。
→pは小さすぎる=そのようなデータになることは滅多にない。
→これにより、帰無仮説は棄却され、対立仮説が選択される。
→すなわち、「CとXの平均に有意差がある」と判断する。
表示された画面の下には"95 percent confidence interval" (CとXの差の95%信頼区間) と"mean of x, mean of x" (C, Xそれぞれの平均) も表示されています。
ここで、95%信頼区間は-4.14〜-0.59となっています。
このように、有意差がある場合には95%信頼区間は0を含みません。逆に、有意差がない場合には0を含みます。
まず等分散の検定を行う方法
他の方法として、
最初に等分散かを検定する
→等分散と仮定できるならStudentのt検定、仮定できないならWelchのt検定を行う
という検定も行われてきました。
まず、以下のように入力し等分散の検定を行います。
var.test(C,X) # 等分散の検定
結果は以下の通りです。
![](https://assets.st-note.com/img/1680046249944-UzfejWkHkm.png?width=800)
ここで有意水準が5%の場合、
pが0.05以上→等分散が仮定できるとしてStudentのt検定
pが0.05未満→等分散が仮定できないとしてWelchのt検定
を選択します。
このケースではp=0.7557なので、Studentのt検定です。
t.test(C, X, var.equal=T) # 等分散が仮定できるとき (Student)
t.test(C, X, var.equal=F) # 等分散が仮定できないとき (Welch)
"var.equal=T"または"var.equal=F"と入力することで検定法を指定します。
結果は以下の通りで、有意差ありと判定されました。
![](https://assets.st-note.com/img/1680046935885-bORZgfWo8c.png?width=800)
なおvar.equal=Fとした場合、最初に行ったt.test()と全く同じ結果になります。
![](https://assets.st-note.com/img/1680047071468-fungycayPs.png?width=800)
「有意差あり」という結果は変わらないものの、方法によって得られるP値が異なります。
最近では最初からWelchのt検定が使われることが多く、私もそうしています。
表から読み込んだデータで行う方法
このExcelファイルのデータを読み込んで、t検定を行ってみましょう。なおこれは前回の記事で用いたものと同じなので、すでにダウンロードした方は不要です。
データの読み込みについては、過去記事をご覧ください。
表全体をコピーし、datとしてRに入力します。
dat <- read.table(pipe("pbpaste"), sep="\t", header=T) # Macの場合
dat<-read.table("clipboard", sep="\t", header=T) # Windowsの場合
attach(dat)
今回は、男性と女性の身長に差があるかを検定します。
コマンドは以下の通りです。
# sexでBHに有意差があるか検定する。
t.test(BH~sex)
以下のように、有意差があるという結果になりました。
![](https://assets.st-note.com/img/1680054921761-DdeTr4ctvP.png?width=800)
少し手数は多くなりますが、subset関数により男性と女性それぞれのデータを抽出して行うこともできます。
Male<-subset(dat, sex==0) # 男性のデータをMaleという名前で保存
Female<-subset(dat, sex==1) # 女性のデータをFemaleという名前で保存
t.test(Male$BH, Female$BH) # MaleのBHとFemaleのBHの差を検定
subset関数についてはこちらの記事をご覧ください。
実行すると同じ結果が得られます。
![](https://assets.st-note.com/img/1680055409764-MchjLCxXXw.png?width=800)
t検定のロバスト性
実はt検定を行うには条件があります。それは「データが正規分布していること」です。
そのため、厳密にはデータの正規性の検定を行って確認した上で、t検定を行うべきです。
しかし、実際にはデータが正規分布していなくても、t検定で得られる結果には影響を与えにくいとされています。
これをt検定のロバスト性と言います。
私も通常、t検定を行う際にデータの正規性の検定は省略しています。ただ、念のためこのような背景は理解しておいてください。
練習問題
"Rdata1.xlsx"のデータにおいて、男女でage, BMI, SMIそれぞれの平均に有意差があるかをWelchのt検定により検定せよ。
今回は以上です。
この記事が気に入ったらサポートをしてみませんか?