【R】評定に偏りがある場合の評定者間一致率(PABAK,AC1)の計算

      【R】評定に偏りがある場合の評定者間一致率(PABAK,AC1)の計算 はコメントを受け付けていません

評定者間一致率がうまく計算できないという相談を受けて,勉強になったのでメモ。

CohenのKappa係数の問題点

観察法において,観察者が観察対象の行動をいくつかのカテゴリーに分類する,あるいは,自由記述の内容について調査者がカテゴリー分けをするといった状況で,評定者間の評定の一致率の計算が必要な場合があります。代表的な評定者間一致率の指標はCohenのκ(カッパ)係数で,Rでは"irr"パッケージで計算できます。

例えば2名の評定者が何らかの反応をa~cの3カテゴリに分類したとすると,以下のような感じになります。

library(irr)
ex01 <- c("a","b","a","a","b","c","c")
ex02 <- c("a","b","a","a","b","b","c")

table(ex01, ex02)
##     ex02
## ex01 a b c
##    a 3 0 0
##    b 0 2 0
##    c 0 1 1
kappa2(data.frame(ex01, ex02))
##  Cohen's Kappa for 2 Raters (Weights: unweighted)
## 
##  Subjects = 7 
##    Raters = 2 
##     Kappa = 0.781 
## 
##         z = 2.98 
##   p-value = 0.00286

κ=.78とそこそこ高い値ですね(そのように作ったデータなので当然ですが)。

で,今回のデータです。観察法のデータで,24の時点単位のそれぞれで,特定の行動が生起したか否かを2名の評定者が評価しています※1

#2名の評定者(rater01,02)の評定
#”1”なら行動生起アリ,”0”ならナシ
rater01 <- c(0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
rater02 <- c(0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0)

table(rater01, rater02)
##        rater02
## rater01  0  1
##       0 22  1
##       1  1  0
kappa2(data.frame(rater01, rater02))
##  Cohen's Kappa for 2 Raters (Weights: unweighted)
## 
##  Subjects = 24 
##    Raters = 2 
##     Kappa = -0.0435 
## 
##         z = -0.213 
##   p-value = 0.831

行動が生起したと判断した場合には”1”が入力されていますが,生起頻度の低い行動がターゲットであるため,ほとんどの値が”0”になっています。

κ係数を見てみると,非常に低い…どころか負の値になっています。ただ,データでは,2名の評定者の評定はどちらも「ほとんどの値が”0”」なので,大部分が一致しており,ここまで一致率が低いというのは直観的にも変な感じです。

評定が偏っている場合の評定者間一致率(PABAK,AC1)

少し調べてみたところ,Cohenのκ係数は評定の偏りの影響を受けやすいということが分かりました。ここでの評定の偏りとは,2名の評定者の反応を以下のように2×2の表で整理すると,反応がaまたはdに集中する傾向のことを指し,これをPrevalenceといいます。今回のデータでは,観察対象となる行動の生起頻度が稀であったために,2名の評定者の評定がいずれも”0″になりやすく,κ係数が低く算出された,ということになります。

また,反応がbまたはcに集中する傾向はBiasと呼ばれ,こちらもκ係数に影響します。西浦(2010)では,PrevalenceBiasの変化に応じたκ係数の変動について,分かりやすい解説と具体例が示されています。

Rater01/Rater02 YES NO Total
YES a b g1
NO c d g2
Total f1 f2 N

PrevalenceBiasを修正した評定者間一致率の指標として,PABAK(Prevalence-Adjusted Bias-Adjusted Kappa)が提案されています(Byrt, Bishop, and Carlin, 1993)。しかし,PABAKもまた修正の方法について議論があり,より適切な指標として近年ではGwetのAC1統計量(Gwet, 2012)が推奨されているようです。κ係数は評定者間の一致の割合から偶然に生じる一致の割合(f1, f2, g1, g2を用いて計算)を取り除くことで計算されますが,それだと上述のような評定の偏りの影響を受けるので,「偶然の一致」の部分の計算を見直した修正版の指標が色々提案されてるよ,という感じでしょうか。

RでのPABAK,AC1の計算

PABAKは"epiR"パッケージで,AC~1~統計量は"rel"パッケージでそれぞれ計算することができます。

PABAKを計算する関数はepi.kappa()関数です。渡すデータがtable形式でないといけないのが少しだけ手間ですね。

library(epiR)
#kappa係数とPABAK算出
epi.kappa(table(rater01, rater02))
## $prop.agree
##         obs       exp
## 1 0.9166667 0.9201389
## 
## $pindex
##         est         se     lower    upper
## 1 0.9166667 0.05641693 0.8060915 1.027242
## 
## $bindex
##   est         se      lower     upper
## 1   0 0.05768489 -0.1130603 0.1130603
## 
## $pabak
##         est     lower     upper
## 1 0.8333333 0.4600544 0.9794873
## 
## $kappa
##           est        se      lower     upper
## 1 -0.04347826 0.2041241 -0.4435542 0.3565977
## 
## $z
##   test.statistic   p.value
## 1     -0.2129991 0.8313277
## 
## $mcnemar
##   test.statistic df p.value
## 1              0  1       1

PrevalenceとBiasの指標(pindex, bindex)も一緒に算出されます。κ係数は先ほど計算した値と同じですが,PABAKだとぐっと高くなっているのが分かります。

AC1gac()関数で計算します。引数kat=でカテゴリー数を指定できます。

library(rel)
#AC1算出
gac(data.frame(rater01, rater02), kat=2)
## Call:
## gac(data = data.frame(rater01, rater02), kat = 2)
## 
##       Estimate   StdErr  LowerCB UpperCB
## Const 0.909434 0.066404 0.772067  1.0468
## 
## Confidence level = 95%
## Sample size = 24

こちらも,κ係数と比べると随分高い値になっています。

これらの指標がどの程度の値だと一致していると見なして良いのか,という基準は調べた範囲では見つかりませんでした。一意に決められるものでもないとは思いますが,ご存知の方は教えてくださると助かります。

カテゴリカル変数の分析も奥が深いですね(KONAMI


※1 もちろん架空のデータです。

Byrt, Ted, Janet Bishop, and John B Carlin. 1993. “Bias, Prevalence and Kappa.” Journal of Clinical Epidemiology 46 (5): 423–29.

Gwet, Kilem L. 2012. “Handbook of Inter-Rater Reliability: The Definitive Guide to Measuring the Extent of Agreement Among Multiple Raters.” Advanced Analytics, LLC.

西浦博. 2010. “観察者間の診断の一致性を評価する頑健な統計量AC1について.” 日本放射線技術学会雑誌 66 (11): 1485–91.