統計ER

統計ソフトRの使い方を中心に、統計解析方法の解説をするブログ。ありそうでなかなか見つからないサンプルサイズ計算などニッチな方法について紹介しています。

級内相関係数(ICC)Case1のサンプルサイズ計算はどうやる?(修正2021年4月17日)

kaiseki daiko banner

級内相関係数ICC)は、信頼性指標に使える。

ICC Case1は、一人の検査をする人(検者、けんじゃ)の一貫性を確認する指標だ。

ICC Case1の計算方法と、サンプルサイズ計算方法を、統計ソフトRでご紹介。

検者内信頼性 ICC Case1の計算

ICC(1,1)は、一人の検者がk回測定を行ったデータそのものを使って計算する。

ICC(1,k)は、k回測定の平均値を使う方法。

統計ソフト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

library(psych)

ICC(dat.oneway)

3回の測定値をそのままつかうICC1は0.77、3回の平均を使うICC1kは0.91と計算された。

複数検者を想定したICC2やICC3が同時に計算されるが、検査のデザイン(一人の検者が3回ずつ測定)の観点から、計算結果は採用しない。

> 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

ICC(1,1)のサンプルサイズ計算ができるICC.SampleSize()

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

プログラムの中身公開(2020年4月25日追記)

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

エクセルでサンプルサイズ計算(2020年4月25日追記)

エクセルでサンプルサイズ計算できるようにした。よければどうぞ。

級内相関係数 ICC のサンプルサイズ計算【エクセルでサンプルサイズ】 | HHA SHOP

使い方解説動画もよければどうぞ(2021年4月17日追記)

youtu.be

まとめ

ICC(1,1)とICC(1,k)の計算方法およびICC(1,1)のサンプルサイズ計算方法を紹介した。