ICC(1,1) の計算とサンプルサイズ計算を R で行う方法
級内相関係数 ICC(1,1) の計算
級内相関係数(ICC)は、信頼性指標に使える。
ICC Case1は、一人の検査をする人(検者、けんじゃ)の一貫性を確認する指標だ。
ICC(1,1)は、一人の検者がk回測定を行ったデータそのものを使って計算する。
ICC(1,k)は、k回測定の平均値を使う方法。
psych パッケージの ICC で行う方法
R では、psych パッケージ の ICC() で計算できる。
データ拝借元:級内相関係数|統計解析ソフト エクセル統計
first <- c(2.8,5.4,4.0,4.9,5.2,2.2,3.5)
second <- c(3.1,4.4,4.3,4.2,4.5,3.4,3.9)
third <- c(2.6,4.3,4.0,4.7,4.2,2.7,3.3)
dat.oneway <- cbind(first, second, third)
rownames(dat.oneway) <- c(1:7)
dat.oneway
install.packages("psych") # 最初一回だけインストールする
library(psych)
ICC(dat.oneway)
3回の測定値をそのままつかうICC1は0.77、3回の平均を使うICC1kは0.91と計算された。
> library(psych)
>
> ICC(dat.oneway)
Call: ICC(x = dat.oneway)
Intraclass correlation coefficients
type ICC F df1 df2 p lower bound upper bound
Single_raters_absolute ICC1 0.77 11 6 14 0.00011 0.43 0.95
Single_random_raters ICC2 0.77 12 6 12 0.00022 0.43 0.95
Single_fixed_raters ICC3 0.78 12 6 12 0.00022 0.41 0.95
Average_raters_absolute ICC1k 0.91 11 6 14 0.00011 0.69 0.98
Average_random_raters ICC2k 0.91 12 6 12 0.00022 0.69 0.98
Average_fixed_raters ICC3k 0.91 12 6 12 0.00022 0.68 0.98
Number of subjects = 7 Number of Judges = 3
複数検者を想定したICC2やICC3が同時に計算されるが、検査のデザイン(一人の検者が3回ずつ測定)の観点から、計算結果は採用しない。
irr パッケージの icc で行う方法
irr パッケージの icc 関数でも計算できる
first <- c(2.8,5.4,4.0,4.9,5.2,2.2,3.5)
second <- c(3.1,4.4,4.3,4.2,4.5,3.4,3.9)
third <- c(2.6,4.3,4.0,4.7,4.2,2.7,3.3)
dat.oneway <- cbind(first, second, third)
rownames(dat.oneway) <- c(1:7)
dat.oneway
install.packages("irr") # 最初一回だけインストールする
library(irr)
icc(dat.oneway)
ICC(1,1) の場合は、icc 関数に検査結果データセットを投入する(この例であればicc(dat.oneway)
)だけでよい
結果は以下のとおり出力される
> icc(dat.oneway)
Single Score Intraclass Correlation
Model: oneway
Type : consistency
Subjects = 7
Raters = 3
ICC(1) = 0.774
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(6,14) = 11.3 , p = 0.000112
95%-Confidence Interval for ICC Population Values:
0.426 < ICC < 0.951
上記の測定値をそのまま使うときと同じ結果(0.774)となった
平均値を使う場合 ICC(1,k) は、以下のように unit="average"
を追加する
icc(dat.oneway, unit="average")
結果は以下のとおり
> icc(dat.oneway, unit="average")
Average Score Intraclass Correlation
Model: oneway
Type : consistency
Subjects = 7
Raters = 3
ICC(3) = 0.911
F-Test, H0: r0 = 0 ; H1: r0 > 0
F(6,14) = 11.3 , p = 0.000112
95%-Confidence Interval for ICC Population Values:
0.69 < ICC < 0.983
こちらも上記と同様の結果(0.911)となった
級内相関係数 ICC(1,1) のサンプルサイズ計算
ICC.Sample.Size パッケージの calculateIccSampleSize() を使うと、ICC(1,1) のサンプルサイズ計算ができる。
最初に一回だけインストールが必要だ。
install.packages("ICC.Sample.Size")
ICCが0.8で、一人の被検者さんあたり2回測定(k=2)の場合、
ICCが0.8で、k=3の場合
ICCが0.6で、k=4の場合を計算してみる。
library(ICC.Sample.Size)
calculateIccSampleSize(p=0.80)
calculateIccSampleSize(p=0.80,k=3)
calculateIccSampleSize(p=0.60,k=4)
結果は、必要サンプルサイズは8例、5例、7例と計算された。
> calculateIccSampleSize(p=0.80)
1
N p p0 k alpha tails power
1 8 0.8 0 2 0.05 2 0.8
> calculateIccSampleSize(p=0.80,k=3)
1
N p p0 k alpha tails power
1 5 0.8 0 3 0.05 2 0.8
> calculateIccSampleSize(p=0.60,k=4)
1
N p p0 k alpha tails power
1 7 0.6 0 4 0.05 2 0.8
この関数の優れものなところは、ICCを一定間隔で刻んでサンプルサイズを計算できるところ。
いずれも0.1で刻んで、k=2, k=3, k=4のサンプルサイズを計算してみる。
calculateIccSampleSize(by="p", step=0.1)
calculateIccSampleSize(by="p", step=0.1, k=3)
calculateIccSampleSize(by="p", step=0.1, k=4)
ICCが0.0から1.0まで、0.1刻みのサンプルサイズ計算が得られる。
k=2, 3, 4それぞれ計算してみた。
観察回数kが増えるとサンプルサイズが小さくなることがわかる。
> calculateIccSampleSize(by="p", step=0.1)
1
N p p0 k alpha tails power
1 Inf 0 0 2 0.05 2 0.8
2
p N
1 0.0 Inf
2 0.1 781
3 0.2 192
4 0.3 83
5 0.4 45
6 0.5 28
7 0.6 18
8 0.7 12
9 0.8 8
10 0.9 5
11 1.0 2
> calculateIccSampleSize(by="p", step=0.1, k=3)
1
N p p0 k alpha tails power
1 Inf 0 0 3 0.05 2 0.8
2
p N
1 0.0 Inf
2 0.1 286
3 0.2 77
4 0.3 36
5 0.4 21
6 0.5 14
7 0.6 10
8 0.7 7
9 0.8 5
10 0.9 4
11 1.0 2
> calculateIccSampleSize(by="p", step=0.1, k=4)
1
N p p0 k alpha tails power
1 Inf 0 0 4 0.05 2 0.8
2
p N
1 0.0 Inf
2 0.1 156
3 0.2 45
4 0.3 22
5 0.4 14
6 0.5 10
7 0.6 7
8 0.7 5
9 0.8 4
10 0.9 3
11 1.0 2
級内相関係数のサンプルサイズ計算のスクリプト
calculateIccSampleSize() プログラムの中身から主要な部分を抜き出して、計算手順を確認してみた。
また、結果がわかりやすい表示になるように改造した。
icc.sample.size <- function (p=0, p0=0, k=2,
sig.level=0.05, power=0.8,
alternative=c("two.sided","one.sided")){
alternative <- match.arg(alternative)
side <- switch(alternative, one.sided=1, two.sided=2)
Za <- qnorm(sig.level/side, lower.tail=FALSE)
Zb <- qnorm(power)
Fp <- (1+(k-1)*p)/(1-p)
Fp0 <- (1+(k-1)*p0)/(1-p0)
Nraw <- 1+(2*(Za+Zb)^2*k)/((log(Fp/Fp0))^2*(k-1))
N <- ceiling(Nraw)
METHOD <- "ICC Class1 sample size"
structure(list(N=N, p=p, p0=p0, k=k,
sig.level=sig.level, power=power,
alternative=alternative, method=METHOD),
class="power.htest")
}
上記と同じ条件で、計算してみた。きちんと同じ答えになった。
> icc.sample.size(p=0.8)
ICC Class1 sample size
N = 8
p = 0.8
p0 = 0
k = 2
sig.level = 0.05
power = 0.8
alternative = two.sided
> icc.sample.size(p=0.8, k=3)
ICC Class1 sample size
N = 5
p = 0.8
p0 = 0
k = 3
sig.level = 0.05
power = 0.8
alternative = two.sided
> icc.sample.size(p=0.6, k=4)
ICC Class1 sample size
N = 7
p = 0.6
p0 = 0
k = 4
sig.level = 0.05
power = 0.8
alternative = two.sided
級内相関係数のサンプルサイズ計算をエクセルで
エクセルでサンプルサイズ計算できるようにした。
よければどうぞ。
級内相関係数 ICC のサンプルサイズ計算【エクセルでサンプルサイズ】 | TKER SHOP
使い方解説動画もよければどうぞ。
まとめ
級内相関係数 ICC(1,1) と ICC(1,k) の計算方法および ICC(1,1) のサンプルサイズ計算方法を紹介した。
参考になれば。
コメント
コメント一覧 (1件)
[…] R で級内相関係数 ICC(1,1) に必要なサンプルサイズを計算する方法 ICC(1,1) の計算とサンプルサイズ計算を R で行う方法 級内相関係数 ICC(1,1) […]