統計ER

R, EZR, SPSS, KH Coder を使ったデータ分析方法を紹介するブログ。ニッチな内容が多め

級内相関係数のサンプルサイズ計算 ICC(1,1) の場合

ICC(1,1) の計算とサンプルサイズ計算を R で行う方法

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

級内相関係数 ICC(1,1) の計算

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

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と計算された。

> 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回ずつ測定)の観点から、計算結果は採用しない。

級内相関係数 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

>>もう統計で悩むのを終わりにしませんか?


↑1万人以上の医療従事者が購読中

級内相関係数のサンプルサイズ計算のスクリプト

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

使い方解説動画もよければどうぞ。

youtu.be

まとめ

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

参考になれば。

参考サイト

級内相関係数 | 統計解析ソフト エクセル統計