それでは,ここではカイ二乗検定について説明します.

カイ二乗検定は「カイ二乗」という分布に基づいた分析です. ちなみに,カイ二乗分布はこんな感じです. ※以下のコードはRcmdrのプラグイン,“RcmdrPlugin.KMggplot2”コードを貼り付けました.

カイ二乗分布について

自由度が1の時

library(ggplot2)
.x  <- seq(1.57079714926249e-06, 10.8275661706627, length.out = 100)
.df <- data.frame(x = .x, y = dchisq(.x, 1))
.plot <- ggplot(.df, aes(x = x, y = y)) + geom_line(size = 1.5) + 
  scale_y_continuous(expand = c(0.01, 0)) + xlab("x") + ylab("Density") + 
  labs(title = "dchisq(x, 1)") + theme_bw(base_size = 14, base_family = 
  "serif")
print(.plot)

rm(.x, .df, .plot)

自由度が2の時

require("ggplot2")
.x  <- seq(0.00200100066716707, 13.8155105579643, length.out = 100)
.df <- data.frame(x = .x, y = dchisq(.x, 2))
.plot <- ggplot(.df, aes(x = x, y = y)) + geom_line(size = 1.5) + 
  scale_y_continuous(expand = c(0.01, 0)) + xlab("x") + ylab("Density") + 
  labs(title = "dchisq(x, 2)") + theme_bw(base_size = 14, base_family = 
  "serif")
print(.plot)

rm(.x, .df, .plot)

自由度が3の時

require("ggplot2")
.x  <- seq(0.0242975858156927, 16.2662361962381, length.out = 100)
.df <- data.frame(x = .x, y = dchisq(.x, 3))
.plot <- ggplot(.df, aes(x = x, y = y)) + geom_line(size = 1.5) + 
  scale_y_continuous(expand = c(0.01, 0)) + xlab("x") + ylab("Density") + 
  labs(title = "dchisq(x, 3)") + theme_bw(base_size = 14, base_family = 
  "serif")
print(.plot)

rm(.x, .df, .plot)

自由度が5の時

require("ggplot2")
.x  <- seq(0.210212602629219, 20.5150056524329, length.out = 100)
.df <- data.frame(x = .x, y = dchisq(.x, 5))
.plot <- ggplot(.df, aes(x = x, y = y)) + geom_line(size = 1.5) + 
  scale_y_continuous(expand = c(0.01, 0)) + xlab("x") + ylab("Density") + 
  labs(title = "dchisq(x, 5)") + theme_bw(base_size = 14, base_family = 
  "serif")
print(.plot)

rm(.x, .df, .plot)

こんな分布にしたがっていると仮定するのがカイ二乗検定です. Rでは実際に,どのように分析していくのかをまとめます.

分析の流れ

仮説検証の手続きの確認

授業の際にお話したとおり,仮説検証は以下の流れで行っていきます.

  • 帰無仮説の設定

  • 検定統計量の値を求める

  • 帰無仮説のもとでの,結果を出力する

  • 帰無仮説が棄却されるかどうかを判断する.

ここからは,上記の流れに沿って説明をしていきます.

帰無仮説の設定

  • 帰無仮説:自分が言いたくないことを設定する.

  • 対立仮説:自分が言いたいことを設定する.

++ 仮説の立案は用いる統計手法(もっというと,分析するデータ)によってテクニカルに決められる.

カイ二乗検定の場合は,以下のように仮説を設定してあげることが必要です.

  • 帰無仮説:XとYの間に,違いがない

++ ex.男女の間に,ラーメンA店とB店の好みに違いがない.

  • 対立仮説:XとYの間に,違いがある

++ ex.男女の間に,ラーメンA店とB店の好みに違いがある.

こちらのデータを元に分析を行います.

これ以外の質問項目については,一番下に掲載します.

  • Q1. 65歳になるあなたの親戚は深刻な病気にかかっている.病気のため彼女は困難な状況にあるが,生命の危機が迫っているわけではない.彼女は,手術を受けることができる.もし手術が成功したら彼女の病気は完治する.しかし手術はリスクが伴い,手術を受けた患者の70%が生存することがわかっている.あなたは彼女に手術を受けることを勧めるだろうか?

    A:彼女に手術を受けることを勧める

    B:彼女に手術を受けることを勧めない

  • Q2. 65歳になるあなたの親戚は深刻な病気にかかっている.病気のため彼女は困難な状況にあるが,生命の危機が迫っているわけではない.彼女は,手術を受けることができる.もし手術が成功したら彼女の病気は完治する.しかし手術はリスクが伴い,手術を受けた患者の30%は死亡することがわかっている.あなたは彼女に手術を受けることを勧めるだろうか?

    A:彼女に手術を受けることを勧める

    B:彼女に手術を受けることを勧めない

  • 帰無仮説H0:q1とq2で回答の傾向が互いに関係がない.

こうも書ける:q1とq2で回答の傾向が互いに独立(無関係)である.

  • 対立仮説H1:q1とq2で回答の傾向が互いに関係がある.

こうも書ける:q1とq2で回答の傾向が互いに独立(無関係)ではない.

検定統計量の値を求める

  • 説明変数・応答変数によって異なる.

  • 今回のデータではカイ二乗分布 『クロス集計表』の分析をするための方法

クロス集計表:アンケートの設問項目に対して,二つの項目に注目して集計した表

注意:本来であれば,q1とq2では同じ人に調査を行っているために,カイ二乗検定は本来ならばまずいデータです.しかしながら,今回は分析手法を学ぶことを目的にしているので目をつぶっています.

本当は「マクネマー検定」という特殊な分析が必要であることを覚えておいてください.

帰無仮説のもとでの,結果を出力する

最初にデータを読み込みます.

ついでに,記述統計量も算出しておきます.

data_framing1 <- read.table("https://dl.dropboxusercontent.com/u/10749822/R_edu_public/data/data_framing1.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)

summary(data_framing1)
##  q1     q2     q3     q4     q5     q6     q7         f1    
##  A:16   A:12   A:25   A:17   A: 4   A:20   A:14   men  :10  
##  B:12   B:16   B: 3   B:11   B:24   B: 8   B:14   women:18
  • Rコマンダーで「統計量」→「分割表」→「2元表」とクリックする.

「データ」タブでは,行にq1,列にq2とする.

「統計量」タブでは,パーセント表示なし(表示してもよいが),仮説検定は,今回については全てにチェックを入れる.

以上を選んだらOKをクリックする.

以下には,Rコマンダーを使って以上のように選んだ時のコードを貼り付けて,その結果を出力する.

library(abind, pos=18)
local({
  .Table <- xtabs(~q1+q2, data=data_framing1)
  cat("\nFrequency table:\n")
  print(.Table)
  .Test <- chisq.test(.Table, correct=FALSE)
  print(.Test)
  cat("\nExpected counts:\n")
  print(.Test$expected)
  cat("\nChi-square components:\n")
  print(round(.Test$residuals^2, 2)) 
  print(fisher.test(.Table))
})
## 
## Frequency table:
##    q2
## q1   A  B
##   A 12  4
##   B  0 12
## 
##  Pearson's Chi-squared test
## 
## data:  .Table
## X-squared = 15.75, df = 1, p-value = 7.229e-05
## 
## 
## Expected counts:
##    q2
## q1         A        B
##   A 6.857143 9.142857
##   B 5.142857 6.857143
## 
## Chi-square components:
##    q2
## q1     A    B
##   A 3.86 2.89
##   B 5.14 3.86
## 
##  Fisher's Exact Test for Count Data
## 
## data:  .Table
## p-value = 6.617e-05
## alternative hypothesis: true odds ratio is not equal to 1
## 95 percent confidence interval:
##  4.846591      Inf
## sample estimates:
## odds ratio 
##        Inf
  • Frequency Table

分割表(クロス集計表)を示しています. 企業だと,これをよく使われます.

  • Peason’s Chi-squared test

カイ二乗検定の結果を示しています.

  • Expected counts

それぞれについて,期待される個数が示されています.

  • Fisher’s Exact Test for Count Data

カイ二乗検定の場合,データ数が少ないと,カイ二乗分布への近似がよくない.

したがって,その際には以下のフィッシャーの直接確率法という手法を使うことになりますが.基本的には「警告文」が出てきた時だけでかまいません.

せっかくなので,図にしておきましょう. 「KMggplot2」→「棒グラフ(離散変数)」

X軸の変数:q1,層別変数:q2

縦軸の尺度:度数

require("ggplot2")
.df <- data.frame(x = data_framing1$q1, z = data_framing1$q2)
.df <- as.data.frame(with(.df, table(x, z)))
.plot <- ggplot(data = .df, aes(x = x, y = Freq, fill = z)) + 
  geom_bar(width = 0.9, position = "stack", stat = "identity") + 
  scale_fill_brewer(palette = "Set1") + scale_y_continuous(expand = c(0.01, 
  0)) + xlab("q1") + ylab("度数") + labs(fill = "q2") + theme_bw(base_size = 14,
   base_family = "serif") + theme(legend.position = "right")
print(.plot)

rm(.df, .plot)

帰無仮説が棄却されるかどうかを判断する

以下にはカイ二乗検定の結果だけを出力しました.

  .Table <- xtabs(~q1+q2, data=data_framing1)
  .Test <- chisq.test(.Table, correct=FALSE)
  print(.Test)
## 
##  Pearson's Chi-squared test
## 
## data:  .Table
## X-squared = 15.75, df = 1, p-value = 7.229e-05

カイ二乗値,自由度,p値をそれぞれ記入して,最後の文章としてまとめます.

なお,p値は指数で表記されているので,気をつけてください.指数が出てくるときは相当に桁数が大きい時です.

もし,指数がわかりにくければ,Excelなどで変換してから表示するとわかりやすいと思います.

  • 結果をまとめる

分析をしたところ,χ(1)2=15.75(p<0.001)であった.帰無仮説が棄却され,対立仮説が採択される.したがって,q1とq2の回答の傾向に違いがあるといえる.

カイ二乗検定については,以上です.

こちらのアンケートを元に分析を行います.

  • Q1. 65歳になるあなたの親戚は深刻な病気にかかっている.病気のため彼女は困難な状況にあるが,生命の危機が迫っているわけではない.彼女は,手術を受けることができる.もし手術が成功したら彼女の病気は完治する.しかし手術はリスクが伴い,手術を受けた患者の70%が生存することがわかっている.あなたは彼女に手術を受けることを勧めるだろうか?

    A:彼女に手術を受けることを勧める

    B:彼女に手術を受けることを勧めない

  • Q2. 65歳になるあなたの親戚は深刻な病気にかかっている.病気のため彼女は困難な状況にあるが,生命の危機が迫っているわけではない.彼女は,手術を受けることができる.もし手術が成功したら彼女の病気は完治する.しかし手術はリスクが伴い,手術を受けた患者の30%は死亡することがわかっている.あなたは彼女に手術を受けることを勧めるだろうか?

    A:彼女に手術を受けることを勧める

    B:彼女に手術を受けることを勧めない

  • Q3. あなたは確実に10万円もらえるとしよう.次の選択肢のうち,どちらを選ぶだろうか?

    A:確実に5万円を新たにもらえる(はじめの10万円は確実にもらえる) B:50%の確率で10万円を新たにもらえるが,50%の確率で新たに何ももらえない.(はじめの10万円は確実にもらえる)

  • Q4. あなたは確実に20万円もらえるとしよう.次の選択肢のうち,どちらを選ぶだろうか?

    A:確実に5万円失う B:50%の確率で10万円を失うが,50%の確率で何も失わない

  • Q5. どちらのひき肉を購入したいですか?

    A:脂身25%のひき肉 B:赤身75%のひき肉

  • Q6. 600人の人が死んでしまう恐れのある伝染病への対応策が次のAとBの二つあります.あなたはどちらを採用しますか?

    A:200人が助かる B:1/3の確率で600人が助かるが,2/3の確率で誰も助からない.

  • Q7. 600人の人が死んでしまう恐れのある伝染病への対応策が次のAとBの二つあります.あなたはどちらを採用しますか?

    A:400人が死亡する B:1/3の確率で誰も死なないが,2/3の確率で600人が死亡する.

Note that the echo = FALSE parameter was added to the code chunk to prevent printing of the R code that generated the plot.