見出し画像

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)

以下のような結果が出力されました。

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)  # 等分散の検定

結果は以下の通りです。

ここで有意水準が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"と入力することで検定法を指定します。

結果は以下の通りで、有意差ありと判定されました。

なおvar.equal=Fとした場合、最初に行ったt.test()と全く同じ結果になります。

「有意差あり」という結果は変わらないものの、方法によって得られる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)

以下のように、有意差があるという結果になりました。

少し手数は多くなりますが、subset関数により男性と女性それぞれのデータを抽出して行うこともできます。

Male<-subset(dat, sex==0)  # 男性のデータをMaleという名前で保存
Female<-subset(dat, sex==1) # 女性のデータをFemaleという名前で保存
t.test(Male$BH, Female$BH) # MaleのBHとFemaleのBHの差を検定

subset関数についてはこちらの記事をご覧ください。

実行すると同じ結果が得られます。

t検定のロバスト性

実はt検定を行うには条件があります。それは「データが正規分布していること」です。

そのため、厳密にはデータの正規性の検定を行って確認した上で、t検定を行うべきです。

しかし、実際にはデータが正規分布していなくても、t検定で得られる結果には影響を与えにくいとされています。

これをt検定のロバスト性と言います。

私も通常、t検定を行う際にデータの正規性の検定は省略しています。ただ、念のためこのような背景は理解しておいてください。

練習問題

"Rdata1.xlsx"のデータにおいて、男女でage, BMI, SMIそれぞれの平均に有意差があるかをWelchのt検定により検定せよ。 

今回は以上です。


この記事が気に入ったらサポートをしてみませんか?