Rを使った分析(カイ2乗検定)

■ 分析前にやっておくこと

(1) Rのインストール
(2) 作業ディレクトリの確認と変更をしておく
(3) 作業ディレクトリにデータを入れておく
(4) 必要なパッケージをインストールしておく

 


■ 適合度検定

データの読み込み

書籍使用データ(右クリックで「別名で保存」して作業ディレクトリに入れる)

dat <- read.csv("ch11-1.csv", header=TRUE, fileEncoding="CP932")
# fileEncoding="CP932"はMacの場合入れる

もしくは,Excel を開いてデータ範囲をコピーしてから読み込む
(クリップボードからのデータ読み込み)

Macの場合

dat <- read.table(pipe("pbpaste"), header=TRUE)  
#header=TRUEで変数名を含む,FALSEにすると含まない

Windowsの場合

dat <- read.table("clipboard", header=TRUE) 
#header=TRUEで変数名を含む,FALSEにすると含まない

 

適合度検定の実行

x <- table(dat)
x
n = sum(x)
chisq.test(x)

※ 分割表を自分で入力する場合

x <- c(18, 24, 48)
table(x)  #頻度表
names(x) <- c("日本語","タイ語","中国語")
x
chisq.test(x)

 

効果量(w)の計算

library(pwr)            # pwrパッケージ使用
P0 <- c(1/3, 1/3, 1/3)  # 期待比率(3つのカテゴリーなので1/3)
P1 <- x/n               # 標本比率
w <- ES.w1(P0, P1)      # 効果量wを求める関数
w                       # 効果量wの評価:大=0.5, 中=0.3, 小=0.1

 

多重比較(必要があれば)
z = (abs(頻度A-頻度B)-1)/sqrt(頻度A+頻度B) でz値からpを計算。

# カテゴリー1とカテゴリー2の比較
z = (abs(18-24)-1)/sqrt(18+24)
p = pnorm(z, lower.tail=FALSE)*2
p

# カテゴリー1とカテゴリー3の比較
z = (abs(18-48)-1)/sqrt(18+48)
p = pnorm(z, lower.tail=FALSE)*2
p

# カテゴリー2とカテゴリー3の比較
z = (abs(24-48)-1)/sqrt(24+48)
p = pnorm(z, lower.tail=FALSE)*2
p

# 上記で計算されるp値が 0.0167以下(0.05/3)なら有意差あり

多重比較の効果量が必要であれば,js-STAR の「1×2表(正確二項検定) 」
使用し,Rプログラムで出力されるコードをコピーアンドペーストすればよい。

 

 


■ 独立性の検定

データの読み込み

書籍使用データ(右クリックで「別名で保存」して作業ディレクトリに入れる)

dat <- read.csv("ch11-2.csv", header=TRUE, fileEncoding="CP932")
# fileEncoding="CP932"はMacの場合入れる

もしくは,Excel を開いてデータ範囲をコピーしてから読み込む
(クリップボードからのデータ読み込み)

Macの場合

dat <- read.table(pipe("pbpaste"), header=TRUE)  
#header=TRUEで変数名を含む,FALSEにすると含まない

Windowsの場合

dat <- read.table("clipboard", header=TRUE) 
#header=TRUEで変数名を含む,FALSEにすると含まない

 

独立性の検定の実行

dat <- dat[,-1]   # 一列目の参加者氏名以外を指定
x <- table(dat)
x
chisq.test(x)                      #イエーツの補正あり
chisq.test(x, correct=F)           #イエーツの補正なし
fisher.test(x, workspace=3000000)  #フィッシャーの正確確率検定

※ 分割表を自分で入力する場合

x <- matrix(c(8, 24, 20, 18), ncol=2, byrow=T)
rownames(x) <- c("女", "男")            # 行の名前をつける
colnames(x) <- c("効果なし", "効果あり")  # 列の名前をつける
x
chisq.test(x)                      #イエーツの補正あり
chisq.test(x, correct=F)           #イエーツの補正なし
fisher.test(x, workspace=3000000)  #フィッシャーの正確確率検定

 

効果量(w)の計算

library(vcd)         # vcdパッケージ使用
assocstats(x)        # 効果量wの基準:大=0.5, 中=0.3, 小=0.1

 

残差分析

res <- chisq.test(x)  # 検定結果を代入
res$expected          # 期待値
res$residuals         # 標準化残差
# 調整済み標準化残差の算出
res$residuals/sqrt(outer(1-rowSums(x)/sum(x), 1-colSums(x)/sum(x)))

調整済み標準化残差の絶対値が1.96を超えると,そのセルの頻度は
5%水準で有意に偏りがあるということになる。

群ごとの多重比較や効果量が必要であれば,
js-STAR の「i × j 表(カイ二乗検定)」を使用し,Rプログラムで
出力されるコードをコピーアンドペーストすればよい。

 

 


■ Rcommanderを使う場合

library(Rcmdr)   # Rcommanderパッケージの読み込み

コンソールでデータの読み込みができている場合は,
<アクティブデータセットなし>をクリックし,datを選択。
参照 Rコマンダーでデータを読み込む場合

 

適合度検定

(1) データが数字で入力されている場合には,因子の型に変更する。
[データ]→[アクティブデータセット内の変数の管理]→[数値変数を因子に
変換]で,「変数」を選び,「因子水準」は「数値で」にチェックを入れ,
変数の上書きをする。

(2) [統計量]→[要約]→[頻度分布]を選択し,「カイ2乗適合度検定」に
チェックを入れる。Factor levels は3つのカテゴリーなので,1/3のままでOK。

 

独立性の検定 

(1) データが数字で入力されている場合には,因子の型に変更する。
[データ]→[アクティブデータセット内の変数の管理]→[数値変数を因子に
変換]で,「変数」を選び,「因子水準」は「数値で」にチェックを入れ,
変数の上書きをする。

(2)  [統計量]→[分割表]→[2元表]を選択し,以下の図のように
行と列の変数を選び,独立性のカイ2乗検定と
フィッシャーの正確検定にチェックを入れて,OKをクリック。
Rコマンダーで独立性の検定

Rコマンダーで独立性の検定

※ 適合度検定,独立性の検定ともに,効果量の計算や多重比較を
Rコマンダーで行うことはできないので,js-STAR を使用し,
「Rプログラム」に出力されるコードをコンソールに
コピーアンドペーストすればよい。