データ分析初心者の備忘録

不定期で更新していきます。

t検定、カイ二乗検定の備忘録

■t検定
主に2群の平均値の差の検定に用いる。
母集団が正規分布に従っている場合、標本分散を用いて算出される統計量tが自由度n-1のt分布に従うという性質を用いて検定を行う。

なお、利用する際は以下の条件を満たしている必要がある。
1.標本が母集団から無作為に抽出されている 2.母集団が正規分布に従っている 3.2群が等分散である

なお、母集団分散が未知でも大標本の場合はt分布でなく正規分布とz統計量を用いて同様の検定をしても問題ないようである。

実行例

#データの確認
summary(iris)
head(iris)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1          5.1         3.5          1.4         0.2  setosa
#2          4.9         3.0          1.4         0.2  setosa
#3          4.7         3.2          1.3         0.2  setosa
#4          4.6         3.1          1.5         0.2  setosa
#5          5.0         3.6          1.4         0.2  setosa
#6          5.4         3.9          1.7         0.4  setosa

#setosaとvirginicaのがく片の長さについてt検定を行う
setosa_length <- iris$Sepal.Length[iris$Species=="setosa"]
virginica_length <- iris$Sepal.Length[iris$Species=="virginica"]

t.test(setosa_length,virginica_length,paired = FALSE)
#データに対応がある場合paired = TRUEを指定する必要がある

#  Welch Two Sample t-test
#
#data:  setosa_length and virginica_length
#t = -15.386, df = 76.516, p-value < 2.2e-16
#alternative hypothesis: true difference in means is not equal to 0
#95 percent confidence interval:
#  -1.78676 -1.37724
#sample estimates:
#mean of x mean of y 
#    5.006     6.588 

カイ二乗検定
分割表において、2つの分類基準が独立であるかどうかを調べるために使われることが多い。(ピアソンのカイ二乗検定)
観測度数と期待度数の差を用いた統計量Χがカイ二乗分布に従うことを利用した検定。

なお、以下の場合はカイ二乗検定を使うべきではない。 ・条件間に対応がある場合 ・観測度数が20未満の場合 ・期待度数が5未満のセルがある場合

実行例

#データ読み込み、確認
dat <- data.frame(Titanic)
summary(dat)
head(dat)
#  Class    Sex   Age Survived Freq
#1   1st   Male Child       No    0
#2   2nd   Male Child       No    0
#3   3rd   Male Child       No   35
#4  Crew   Male Child       No    0
#5   1st Female Child       No    0
#6   2nd Female Child       No    0
#Freq列でサンプルの出現頻度がわかるようになっている

dat <- dat[dat$Freq!=0,] #頻度が0のデータを除外

#1行1サンプルになるようデータを加工する
titanic.df <- data.frame(Class=rep(dat$Class[1],dat$Freq[1]), #データの出現回数だけ行を増やす
                         Sex=rep(dat$Sex[1],dat$Freq[1]),
                         Age=rep(dat$Age[1],dat$Freq[1]),
                         Survived=rep(dat$Survived[1],dat$Freq[1]))

for (i in 2:nrow(dat)) {
  titanic.df_sub <- data.frame(Class=rep(dat$Class[i],dat$Freq[i]),
                           Sex=rep(dat$Sex[i],dat$Freq[i]),
                           Age=rep(dat$Age[i],dat$Freq[i]),
                           Survived=rep(dat$Survived[i],dat$Freq[i]))
  titanic.df <- rbind(titanic.df,titanic.df_sub)
}

#クロス集計
(test <- xtabs(~Age + Survived, data =  titanic.df))
#       Survived
#Age       No  Yes
# Child   52   57
# Adult 1438  654

#カイ二乗検定
chisq.test(test)

#  Pearson's Chi-squared test with Yates' continuity correction
#
#data:  test
#X-squared = 20.005, df = 1, p-value = 7.725e-06

#chisq.test()ではデフォルトでイェーツ補正がかかるようになっている点に注意