理系夫婦のうたたねブログ

理系夫婦が好きなことを書いていきます。たまに医学っぽいことを書いていますが、あくまで私見です。

Rを用いてt検定

はじめに

大学が変わったのと年度が変わったことで、統計ソフトとグラフ作成用のソフトを使えなくなった。
これを機に統計とグラフ作成を両方Rにしようと思う。
t testのやり方もよく分かっていないので、Helpを見ながら勉強してみた。

2標本のt検定

Rでのt testはt.test()を使えば良い。
例えば1~10の数列と7~20までの数列でt testしてみる。

t.test(c(1:10), y=c(7:20))
     Welch Two Sample t-test
 
 data:  c(1:10) and c(7:20)
 t = -5.4349, df = 21.982, p-value = 1.855e-05
 alternative hypothesis: true difference in means is not equal to 0
 95 percent confidence interval:
  -11.052802  -4.947198
 sample estimates:
 mean of x mean of y 
       5.5      13.5

出力にもあるとおり、デフォルトでwelch (等分散性を仮定しなくても使えるt test)になっているようだ。
あとはお馴染みの結果が返ってきている。
このようにt.test() に2群のベクタを渡せばt検定できるみたい。
簡単でよろしい。
df (自由度) が小数になっているのはwelchだから。

試しに、サンプルデータでもやってみる。
以下は前にどこかで使ったsleepデータ
勉強中のggplotで図示してみる。

testData <- sleep
ggplot(data = testData, aes(x=group, y = extra))+
  geom_boxplot()+
  theme_classic()

適当なプロット

前も

もう一つの書き方 fomula形式

t検定の時に、ベクタを渡す形式以外に、式で書くこともできる。 Fomula形式と呼ばれている。
従属変数 ~ 独立変数
というような形で記載することが可能であり、この際にはデータの指定が必要。

t.test(extra ~ group, data = testData)
    Welch Two Sample t-test

data:  extra by group 
t = -1.8608, df = 17.776, p-value = 0.07939
alternative hypothesis: true difference in means between group 1 and group 2 is not equal to 0
95 percent confidence interval: -3.3654832  0.2054832
sample estimates: 
mean in group 1 mean in group 2 
            0.75            2.33

このFomula形式で書くものといえば線形回帰が思いつく

res <- lm(extra ~ group, data = testData)
summary(res)
Call:
lm(formula = extra ~ group, data = testData)
 
Residuals:
   Min     1Q Median     3Q    Max 
-2.430 -1.305 -0.580  1.455  3.170 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   0.7500     0.6004   1.249   0.2276  
group2        1.5800     0.8491   1.861   0.0792 .
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
 
Residual standard error: 1.899 on 18 degrees of freedom
Multiple R-squared:  0.1613,    Adjusted R-squared:  0.1147 
F-statistic: 3.463 on 1 and 18 DF,  p-value: 0.07919

結果のGroup2のPrはStudentのt検定の結果と等しいはず。
t検定, ANOVA、線形回帰には本質的な違いはない (というか全て一般線形モデルの範疇内の) はずなのでこれで良い。

対応のあるt検定

次に対応のあるt検定をやってみる。
元のformatでは少しやりにくいが、練習と思ってやってみる。
dataの中からGourpが1, 2であるものをfilterで取り出して、格納し、対応のあるt検定

group1 <- testData %>% filter(group == "1")
group2 <- testData %>% filter(group == "2")
t.test(group1$extra, group2$extra, paired = T)
 Paired t-test

data:  group1$extra and group2$extra
t = -4.0621, df = 9, p-value = 0.002833
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 -2.4598858 -0.7001142
sample estimates:
mean difference 
          -1.58

対応のあるt検定は差の1標本のt検定なので以下のように書いても良いはずで、実際に一致している。

t.test(group1$extra - group2$extra)
    One Sample t-test

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

感想

これなら簡単に使えそう。
one way ANOVAとか他の検定も簡単に使えそうなので、使いそうな検定を勉強していこうと思う。