2026年8月10日月曜日

独立2群のt検定

Rによる独立2群のt検定

 CSV形式で,以下のようなコレステロールと飲用しているサプリメントの種類に関するデータ(引用しているサプリメントとコレステロールの関係データ)があったとします(これをexample_a.csvというファイル名で保存します).

choles,suppl

118,A

132,A

120,A

115,A

113,A

129,B

126,B

134,B

135,B

131,B

このデータを用いて,独立2群のt検定を行うには以下のようなコマンドを実行します.

まずは,データのcsvファイル(example_a.csv)を読み込み,"ex.a"という名前をつけます.ターミナルからRを起動して,以下のコマンドを実行します.

> ex.a <- read.csv("example_a.csv")

ex.a にデータが格納されているかを確認しておきます.

> ex.a

   choles suppl

1     118     A

2     132     A

3     120     A

4     115     A

5     113     A

6     129     B

7     126     B

8     134     B

9     135     B

10    131     B

データの構造を確認するための 関数str を使って,データを見てみます.

> str(ex.a)

'data.frame': 10 obs. of  2 variables:

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : chr  "A" "A" "A" "A" ...

ここで,以下の文章はex.aがデータフレーム型であり,2つの変数からなっていて,それぞれ10個の観測値を持つと書かれています.これは正しいのでOKです.

'data.frame': 10 obs. of  2 variables:


続いて,変数に関する情報です.最初の"choles"は,int(整数)型の数値であることを示していて,各値も示されています.続いて,2つ目の変数"suppl"は,chr(文字列)型の変数として読み込まれています.

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : chr  "A" "A" "A" "A" ...

"suppl"がchr(文字列)型のままでは解析ができないので,以下のようにfactor関数を使って,強制的に因子型に読み直すように指示します.

> ex.a $ suppl <- factor(ex.a $ suppl)

再度,確認してみると,int型で認識されていることが確認できます.

> str(ex.a)

'data.frame': 10 obs. of  2 variables:

 $ choles: int  118 132 120 115 113 129 126 134 135 131

 $ suppl : Factor w/ 2 levels "A","B": 1 1 1 1 1 2 2 2 2 2


ここから,t検定に入ります.まずは,関数attachを使ってデータフレーム"ex.a"の中を探索範囲とします.

> attach(ex.a)


独立2郡のt検定を行うには,以下のコマンドを実行します.

> t.test(A ~ B, var.equal=TRUE)

ここで,"A~B"はモデル式です."var.equal=TRUE"は等分散を仮定してt検定を行うというオプション指定です(TRUEと書かずにTだけでもOKです).

"choles"を応答変数(response variable),"suppl"を説明変数(explanatory variable)にモデル式(choles ~ suppl)として指定して,"var.equal=T"では,等分散を仮定してt検定を行うという指示を出しています.ここで,"TRUE"ではなく"T"と書いています.

> t.test(choles ~ suppl, var.equal=T)


Two Sample t-test


data:  choles by suppl

t = -3.0732, df = 8, p-value = 0.01527

alternative hypothesis: true difference in means between group A and group B is not equal to 0

95 percent confidence interval:

 -19.954001  -2.845999

sample estimates:

mean in group A mean in group B 

          119.6           131.0 


上記の結果において,

t = -3.0732, df = 8, p-value = 0.01527

においては,検定統計量t,自由度dfP値が示されています.
この結果では,P値が0.01527なので,優位水準αの0.05(5%)より小さいことから,統計的に有意と結論づけることができます.
加えて,以下の結果よりAの標本平均は119.6,Bの標本平均は131.0であることから,サプリメントAの飲用者のコレステロール値は,Bの飲用者のコレステロール値よりも低かった(P=0.015)と結論づけられます.

mean in group A mean in group B 

          119.6           131.0 


95 percent confidence interval:

 -19.954001  -2.845999

は,比較する2つの母集団AとBの母平均の差μA-μBに対する95%信頼区間の下限(下側信頼限界)と上限(上側信頼限界)を示しています.

関数attachを使わない方法としては"$"を使う方法があります.

> t.test(ex.a$choles ~ ex.a$suppl, var.equal=T)


Two Sample t-test


data:  ex.a$choles by ex.a$suppl

t = -3.0732, df = 8, p-value = 0.01527

alternative hypothesis: true difference in means between group A and group B is not equal to 0

95 percent confidence interval:

 -19.954001  -2.845999

sample estimates:

mean in group A mean in group B 

          119.6           131.0 

得られる結果は,当然同じ結果になります.

結果について説明しておくと,tの値は検定統計寮,dfは自由度,p-valueはP値を示しています.

t = -3.0732, df = 8, p-value = 0.01527

この結果では,P値が0.01527と有意水準αの0.05(5%)より小さいので,統計的に有意という結果が得られています.
比較する2つの母集団AとBの,母平均の差 μAB に対する95%信頼区間の下限(下限信頼限界)は-19.954001に,上限(上限信頼限界)は-2.845999になります.

95 percent confidence interval:

 -19.954001  -2.845999

また,Aグループの平均は119.6,Bグループの平均は131.0となっています.

mean in group A mean in group B 

          119.6           131.0 




0 件のコメント :

コメントを投稿