MENU

R で級内相関係数 ICC(1,1) に必要なサンプルサイズを計算する方法

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

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

↑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

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

まとめ

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

参考になれば。

参考サイト

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

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

リサーチクエスチョン探し?データ分析?論文投稿?、、、で、もう悩まない!

第1章臨床研究ではなぜ統計が必要なのか?計画することの重要性
  • 推定ってどんなことをしているの?
  • 臨床研究を計画するってどういうこと?
  • どうにかして標本平均を母平均に近づけられないか?
第2章:研究目的をどれだけ明確にできるのかが重要
  • データさえあれば解析でどうにかなる、という考え方は間違い
  • 何を明らかにしたいのか? という研究目的が重要
  • 研究目的は4種類に分けられる
  • 統計専門家に相談する上でも研究目的とPICOを明確化しておく
第3章:p値で結果が左右される時代は終わりました
  • アメリカ統計協会(ASA)のp値に関する声明で指摘されていること
  • そうは言っても、本当に有意差がなくてもいいの…?
  • なぜ統計専門家はp値を重要視していないのか
  • 有意差がない時に「有意な傾向があった」といってもいい?
  • 統計を放置してしまうと非常にまずい
第4章:多くの人が統計を苦手にする理由
  • 残念ながら、セミナー受講だけで統計は使えません。
  • インプットだけで統計が使えない理由
  • どうやったら統計の判断力が鍛えられるか?
  • 統計は手段なので正解がないため、最適解を判断する力が必要
第5章:統計を使えるようになるために今日から何をすれば良いか?
  • 論文を読んで統計が使えるようになるための5ステップ
第6章:統計を学ぶために重要な環境
  • 統計の3つの力をバランスよく構築する環境

以下のボタンをクリックして、画面に出てくる指示に従って、必要事項を記入してください。

この記事を書いた人

統計 ER ブログ執筆者

元疫学研究者

統計解析が趣味

コメント

コメント一覧 (1件)

コメントする

目次