統計ER

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

カッパ係数 3 人以上の場合 フライスのカッパ係数 Fleiss' kappa

フライス(Fleiss)のカッパ係数(kappa)は、3人以上の評価者の評価が一致している度合いを測定する係数。

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


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

Cohen's kappaが二人の評価者の一致度を判断するのに対して、Fleiss' kappaは三人以上の評価者の一致度を計算することができる。

いわゆるカッパ係数(Cohen's kappa)はこちら。

toukeier.hatenablog.com

カッパ係数 3 人以上の場合 フライスのカッパ係数 Fleiss' kappa の計算式

Fleiss' kappaは以下のとおり計算する。

 \bar{P}は被験者内の評価者一致度の平均、 \bar{P_e}は各評価カテゴリへの集中度合いと解釈できる。

 \displaystyle \kappa = \frac{\bar{P} - \bar{P_e}}{1 - \bar{P_e}}

ここで、 \bar{P} \bar{P_e} は以下のように計算できる。

 i は被験者番号、 N は被験者数、 n は評価者数、 j は評価カテゴリ番号、 k は評価カテゴリ数。

 \displaystyle \bar{P} = \frac{1}{N} \sum_{i=1}^{N} P_i

 \displaystyle \bar{P_e} = \sum_{j=1}^{k} p^{2}_j

さらに、 P_i p_jは以下の通り計算する。

 \displaystyle P_i = \frac{1}{n(n-1)} \sum_{j=1}^{k} n_{ij}(n_{ij}-1)

 \displaystyle p_j = \frac{1}{Nn} \sum_{i=1}^{N} n_{ij}

カッパ係数 3 人以上の場合 Fleiss論文のデータを使って計算してみる

統計ソフトRのirrパッケージにdiagnosesというデータセットがある。

これはFleiss' kappaを発明した時のデータである。

これを使うことにする。

まず、irr パッケージをインストールする。

一回インストールすれば、その次からはいらない。

install.packages("irr")

library()で呼び出し、data()でデータセットを使えるようにする。これで準備完了。

library(irr)
data(diagnoses)

diagnosesの構造をstr()で見てみると、6人の評価者の30人の患者さんに対する評価が格納されていることがわかる。

> str(diagnoses)
'data.frame':   30 obs. of  6 variables:
 $ rater1: Factor w/ 5 levels "1. Depression",..: 4 2 2 5 2 1 3 1 1 5 ...
 $ rater2: Factor w/ 5 levels "1. Depression",..: 4 2 3 5 2 1 3 1 1 5 ...
 $ rater3: Factor w/ 5 levels "1. Depression",..: 4 2 3 5 2 3 3 3 4 5 ...
 $ rater4: Factor w/ 5 levels "1. Depression",..: 4 5 3 5 4 3 3 3 4 5 ...
 $ rater5: Factor w/ 5 levels "1. Depression",..: 4 5 3 5 4 3 5 3 4 5 ...
 $ rater6: Factor w/ 4 levels "2. Personality Disorder",..: 3 4 4 4 3 2 4 3 3 4 ...

データの構造を変えて、30人分のid、6人の評価者rater、それぞれの評価rating1というデータセットにする。

id <- rep(1:30,6)
rater <- sort(rep(1:6,30))

rating <- matrix(rep(0,180),nc=6)
rating
for (i in 1:6){
 rating[,i] <- as.numeric(strtrim(diagnoses[,i],1))
}
rating

rating1 <- c(rating[,1],rating[,2],rating[,3],rating[,4],rating[,5],rating[,6])
rating1

dat <- data.frame(id,rater,rating1)
dat

出来上がりはこちら。全部を掲示すると180行になるので、先頭40行で割愛。

> dat
    id rater rating1
1    1     1       4
2    2     1       2
3    3     1       2
4    4     1       5
5    5     1       2
6    6     1       1
7    7     1       3
8    8     1       1
9    9     1       1
10  10     1       5
11  11     1       1
12  12     1       1
13  13     1       2
14  14     1       1
15  15     1       2
16  16     1       3
17  17     1       1
18  18     1       1
19  19     1       2
20  20     1       1
21  21     1       5
22  22     1       2
23  23     1       2
24  24     1       1
25  25     1       1
26  26     1       2
27  27     1       1
28  28     1       2
29  29     1       1
30  30     1       5
31   1     2       4
32   2     2       2
33   3     2       3
34   4     2       5
35   5     2       2
36   6     2       1
37   7     2       3
38   8     2       1
39   9     2       1
40  10     2       5

この180行のデータを、患者さん x 評価カテゴリの30 x 6 の分割表にする。

> (tab <- table(id,rating1))
    rating1
id   1 2 3 4 5
  1  0 0 0 6 0
  2  0 3 0 0 3
  3  0 1 4 0 1
  4  0 0 0 0 6
  5  0 3 0 3 0
  6  2 0 4 0 0
  7  0 0 4 0 2
  8  2 0 3 1 0
  9  2 0 0 4 0
  10 0 0 0 0 6
  11 1 0 0 5 0
  12 1 1 0 4 0
  13 0 3 3 0 0
  14 1 0 0 5 0
  15 0 2 0 3 1
  16 0 0 5 0 1
  17 3 0 0 1 2
  18 5 1 0 0 0
  19 0 2 0 4 0
  20 1 0 2 0 3
  21 0 0 0 0 6
  22 0 1 0 5 0
  23 0 2 0 1 3
  24 2 0 0 4 0
  25 1 0 0 4 1
  26 0 5 0 1 0
  27 4 0 0 0 2
  28 0 2 0 4 0
  29 1 0 5 0 0
  30 0 0 0 0 6

この分割表を使って、 \bar{P} \bar{P_e} を計算する。

N <- 30
n <- 6
k <- 5
pj <- rep(0,k)
pj
for (j in 1:k){
  pj[j] <- 1/(N*n)*sum(tab[,j])
}
pj

Pi <- rep(0,N)
Pi
Pij <- rep(0,k)
Pij

for (i in 1:N){
 for (j in 1:k){
  Pij[j] <- tab[i,j]*(tab[i,j]-1)
 }
 Pi[i] <- 1/(n*(n-1))*sum(Pij)
}
Pi

(P.bar <- sum(Pi)/N)

(Pe.bar <- sum(pj^2))

結果は、以下の通り。

> (P.bar <- sum(Pi)/N)
[1] 0.5555556
> 
> (Pe.bar <- sum(pj^2))
[1] 0.2199383

よって、 \kappaは以下のように0.430と計算される。

> (fleiss.kappa <- (P.bar - Pe.bar)/(1 - Pe.bar))
[1] 0.4302445

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


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

カッパ係数 3 人以上の場合 irr パッケージの関数を使う場合

この場合はとても簡単に計算できる。

diagnosesの形式(評価者ごとの被験者の評価が列になった形式)のデータセットをkappam.fleiss()に投入するだけで計算結果が出力される。

diagnosesの形式をもう少し理解するために、先頭と最後の部分を表示してみると以下の通り。

> head(diagnoses)
                   rater1                  rater2                  rater3           rater4           rater5           rater6
1             4. Neurosis             4. Neurosis             4. Neurosis      4. Neurosis      4. Neurosis      4. Neurosis
2 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder         5. Other         5. Other         5. Other
3 2. Personality Disorder        3. Schizophrenia        3. Schizophrenia 3. Schizophrenia 3. Schizophrenia         5. Other
4                5. Other                5. Other                5. Other         5. Other         5. Other         5. Other
5 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder      4. Neurosis      4. Neurosis      4. Neurosis
6           1. Depression           1. Depression        3. Schizophrenia 3. Schizophrenia 3. Schizophrenia 3. Schizophrenia
> tail(diagnoses)
                    rater1                  rater2                  rater3                  rater4                  rater5           rater6
25           1. Depression             4. Neurosis             4. Neurosis             4. Neurosis             4. Neurosis         5. Other
26 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder      4. Neurosis
27           1. Depression           1. Depression           1. Depression           1. Depression                5. Other         5. Other
28 2. Personality Disorder 2. Personality Disorder             4. Neurosis             4. Neurosis             4. Neurosis      4. Neurosis
29           1. Depression        3. Schizophrenia        3. Schizophrenia        3. Schizophrenia        3. Schizophrenia 3. Schizophrenia
30                5. Other                5. Other                5. Other                5. Other                5. Other         5. Other

Fleiss' kappaを計算すると0.43と表示される。

> kappam.fleiss(diagnoses)
 Fleiss' Kappa for m Raters

 Subjects = 30 
   Raters = 6 
    Kappa = 0.43 

        z = 17.7 
  p-value = 0 

カッパ係数 3 人以上の場合 フライスのカッパ係数の解釈

例えば、Landis and Koch (1977) に示された基準によって解釈する。

\kappa Interpretation
< 0 Poor
0.01 – 0.20 Slight
0.21 – 0.40 Fair
0.41 – 0.60 Moderate
0.61 – 0.80 Substantial
0.81 – 1.00 Almost perfect

まとめ

三人以上の評価者による評価の一致度を測る係数はフライスのカッパ係数 Fleiss' kappa と呼ばれる数値である。

統計ソフトRのirr パッケージに含まれるkappam.fleiss()を使えば簡単に計算できる。

結果はLandis and Koch (1977) で示されているような慣例的な基準を用いて解釈する。

参考サイト

en.wikipedia.org

参考文献

Landis and Koch. The Measurement of Observer Agreement for Categorical Data