二人の評価者のカテゴリ評価の一致度を見るのがいわゆるカッパ係数だ。
カッパはギリシャ文字のkのカッパ(κ)のこと。
Jacob Cohen先生が発明したので、Cohen’s Kappaと呼ばれる。
これを R で計算してみようと思う。
irr パッケージを使う方法
簡単な方法はパッケージを使う方法。
irrパッケージを使う。
評価者間信頼度 inter-rater reliability の指標を計算するパッケージだ。
まずはインストールする。
インストールは最初の一回だけでOK。
install.packages("irr")
呼び出して使えるようにする。
これで準備OK。
library(irr)
例としてirrパッケージに含まれるdiagnosesデータセットを使う。これ
は6人の評価者が30名の患者さんを診察して診断をつけたもの。
今回のCohen’s Kappaは、二名の評価者の一致度を見る方法なので、1番目と2番目の評価者の評価データを使うことにする。
> diagnoses[,1:2]
rater1 rater2
1 4. Neurosis 4. Neurosis
2 2. Personality Disorder 2. Personality Disorder
3 2. Personality Disorder 3. Schizophrenia
4 5. Other 5. Other
5 2. Personality Disorder 2. Personality Disorder
6 1. Depression 1. Depression
7 3. Schizophrenia 3. Schizophrenia
8 1. Depression 1. Depression
9 1. Depression 1. Depression
10 5. Other 5. Other
11 1. Depression 4. Neurosis
12 1. Depression 2. Personality Disorder
13 2. Personality Disorder 2. Personality Disorder
14 1. Depression 4. Neurosis
15 2. Personality Disorder 2. Personality Disorder
16 3. Schizophrenia 3. Schizophrenia
17 1. Depression 1. Depression
18 1. Depression 1. Depression
19 2. Personality Disorder 2. Personality Disorder
20 1. Depression 3. Schizophrenia
21 5. Other 5. Other
22 2. Personality Disorder 4. Neurosis
23 2. Personality Disorder 2. Personality Disorder
24 1. Depression 1. Depression
25 1. Depression 4. Neurosis
26 2. Personality Disorder 2. Personality Disorder
27 1. Depression 1. Depression
28 2. Personality Disorder 2. Personality Disorder
29 1. Depression 3. Schizophrenia
30 5. Other 5. Other
評価者1と2の評価を表にまとめると以下のようになる。
対角線上の数字が診断が一致している人数だ。
必ずしも対角線上だけではないことがわかる。
つまり、診断が一致していない患者さんがいることがわかる。
> (tab12 <- table(diagnoses[,1:2]))
rater2
rater1 1. Depression 2. Personality Disorder 3. Schizophrenia 4. Neurosis 5. Other
1. Depression 7 1 2 3 0
2. Personality Disorder 0 8 1 1 0
3. Schizophrenia 0 0 2 0 0
4. Neurosis 0 0 0 1 0
5. Other 0 0 0 0 4
カッパ係数を計算してみると0.651と計算された。
kappa2()が本体の関数で、()内に二人の評価者の評価データを投入すれば計算終了。
> kappa2(diagnoses[,1:2])
Cohen's Kappa for 2 Raters (Weights: unweighted)
Subjects = 30
Raters = 2
Kappa = 0.651
z = 7
p-value = 2.63e-12
0.651がどのような意味を持つかは、以下のような記述を参考にして、判断する。
今回の場合は、0.61-0.80の間なのでsubstantial(かなり一致している)と判断できる。
Nonetheless, magnitude guidelines have appeared in the literature. Perhaps the first was Landis and Koch,[13] who characterized values < 0 as indicating no agreement and 0–0.20 as slight, 0.21–0.40 as fair, 0.41–0.60 as moderate, 0.61–0.80 as substantial, and 0.81–1 as almost perfect agreement.
出典:https://en.wikipedia.org/wiki/Cohen%27s_kappa#Significance_and_magnitude
日本語にしてみると以下のような感じになる。
- < 0 as indicating no agreement (一致していない)
- 0–0.20 as slight(わずかに一致している)
- 0.21–0.40 as fair(まあまあ一致している)
- 0.41–0.60 as moderate(中程度に一致している)
- 0.61–0.80 as substantial(かなり一致している)
- 0.81–1 as almost perfect agreement(ほとんど完璧に一致している)
Step by stepで計算するならどうやるか
カッパ係数は以下のように計算する。
$$ \kappa = \frac{p_o – p_e}{1 – p_e} $$
$ p_o $ は実際に一致している評価の割合(対角線上の数値の合計をサンプルサイズで割る)、$ p_e $ は一致する評価の期待値を割合で表したものである。
$ p_e $ は以下のように計算する。
$$ p_e = \frac{1}{N^2} \sum_k n_{k1} n_{k2} $$
つまり k 番目のカテゴリと判断した評価の数を評価者1と2それぞれの合計を求め掛け合わせ和を計算する。
和をサンプルサイズ N の2 乗で割ると算出される。
計算のスクリプトは以下の通り。
期待値は5回同じ作業をするのでfor文を使った。
(po <- sum(diag(tab12))/sum(tab12))
pe.num <- rep(0,5)
for(i in 1:5){
pe.num[i] <- sum(tab12[i,])*sum(tab12[,i])
}
pe.num
(pe <- sum(pe.num)/sum(tab12)^2)
(kappa <- (po-pe)/(1-pe))
$ p_o $ は0.733、$ p_e $ は0.236と計算され、kappaは上記と同様に0.651 と計算された。
> (po <- sum(diag(tab12))/sum(tab12))
[1] 0.7333333
> (pe <- sum(pe.num)/sum(tab12)^2)
[1] 0.2355556
> (kappa <- (po-pe)/(1-pe))
[1] 0.6511628
まとめ
二人の評価者間のカテゴリ形式の評価の一致度を確認するのがいわゆるカッパ係数だ。
Cohen’s Kappaと呼ぶのが的確だ。
R ならirr パッケージを使うと簡単だ。
参考になれば。
コメント
コメント一覧 (1件)
[…] R でカッパ係数を計算する方法 二人の評価者のカテゴリ評価の一致度を見るのがいわゆるカッパ係数だ。 […]