Rによる級内相関係数(ICC)の2つの出し方
2~3ヶ月前から、マルチレベル分析*1を学んでいます。分析自体はできます(便利なことに、コード1行でできるので)。しかし、手持ちのデータでマルチレベル分析を使うべきなのかどうか、迷います。そんなときは級内相関係数(ICC)を確認するのが一般的なようです*2。例によって、ウェブ上で情報収集しました*3。
使うデータ
あるサービスの500人分の満足度を1~7で集計したもの。性別(男性0、女性1)も記録している。
> cs <- read.delim("clipboard") > head(cs) gender manzoku 1 0 5 2 0 6 3 0 4 4 0 5 5 0 4 6 1 6
ICCの出し方
1.lmerTest または lme4 パッケージのlmer
を使う。
切片だけの変量効果を調べます。summary()を使って、Random effectsのVarianceを計算してICCを出します。すなわち、
gender の Variance ÷(gender の Variance+ Residual の Variance)
です。今回はとっても低い値になります。マルチレベル分析をする必要はなさそうです。
> library(lmerTest) > icc_by_lmerTest <- lmer(manzoku ~ 1 + (1|gender), data = cs) > summary(icc_by_lmerTest) ※前略 Random effects: Groups Name Variance Std.Dev. gender (Intercept) 2.497e-14 1.58e-07 Residual 1.742e+00 1.32e+00 ※後略
2.ICCパッケージのICCest
を使う。
x がグループ、y が対象となるデータ、data がデータフレームです。x は因子型でないと怒られます。
> library(ICC) > icc_by_ICCest <- ICCest(x = gender, y = manzoku, data = cs) Warning message: In ICCest(x = gender, y = manzoku, data = cs) : 'x' has been coerced to a factor > icc_by_ICCest <- ICCest(x = factor(gender), y = manzoku, data = cs) > icc_by_ICCest $ICC [1] -0.002186884
なんだか、lmerTest を使った計算方法と結果が違います。でも、とても小さい値なので、やはりマルチレベル分析をする必要はなさそうです。なお、ICC の数値が違います。計算方法が違うので、どちらが正しいものかはわかりません…。今回はどちらも小さな値になったので、よかったものの、微妙な値だったらどうしようか…。
番外 psychパッケージのICC
を使う。
psych パッケージの説明を読んだんですが、データの形式がちょっと違っていたので、面倒そうでやめました。
参考にしたページ
こちらのブログのエントリーには多くの資料のリンクがまとめてあり、助かりました。 http://mizumot.com/lablog/archives/179
なお、マルチレベル分析の基本的なところはこちらがたいへん勉強になります。
www.slideshare.net