一、Kappa 检验方法
在做数据分析时,我们经常会面临一致性检验问题,即判断不同的模型或者分析方法在预测结果上是否具有一致性、模型的结果与实际结果是否具有一致性等。另外,一致性检验在临床实验中也有着广泛的应用。对于两个或多个医务工作者对同一病人给出的诊断结论进行一致性检验,英文叫interrater reliability; 对同一医务工作者多次诊断结论的一致性检验,英文叫 intraraterreliability。
摘自:http://wenku.baidu.com/view/f1061c165f0e7cd18425361d.html
二、计算方法
Kappa 系数有带加权和不带加权两种计算方法,分别对应 SAS的简单Kappa系数和加权Kappa系数(Simple KappaCoefficient, Weighted Kappa Coefficient)。
先看不带加权的公式:
带加权的公式:
注:线性权重和平方权重分别对应SAS中的Cicchetti-Allison权重和Fleiss-Cohen权重,默认情况下使用Cicchetti-Allison权重。
以上公式来自 http://www.physther.org/content/85/3/257.full(英文资料,介绍地比较全面)
三、统计检验方法
Kappa只是一个统计量,存在抽样误差。Kappa/ASE近似服从标准正态分布,据此可以得出Kappa 统计量的置信区间。
四、如何使用 SAS 做 Kappa 分析?
1)两种评测方法评分范围一致的情况
data equalranges;
inputrater1rater2;
datalines;
11
12
12
11
22
22
21
22
;
run;
proc freq data=equalranges;
tables rater1*rater2/agree nopercent nocolnorow;
run;
输出结果:
注:对于 2*2 的列联表,加权Kappa系数等于简单Kappa系数。SAS FREQ过程步只有当列联表大于2*2表时才显示加权Kappa系数。
(For 2*2 tables, the weighted kappa coefficient equals thesimple kappa coefficient. PROC FREQ displays the weighted kappacoefficient only for tables larger than 2*2.)
2)两种评测方法评分范围不一致的情况 -- 使用 Weight 语句加 zeros 选项 (请参考 UCLA大学的网站:http://www.ats.ucla.edu/stat/sas/faq/kappa.htm)
data unequalranges;
inputrater1rater2;
datalines;
11
11
11
11
22
22
22
22
32
32
32
32
;
run;
data unequalranges;
if _n_=1 then do;
rater1 =3;
rater2 = 3;
weight = 0;
output;
end;
set unequalranges;
weight = 1;
output;
run;
proc freq data=unequalranges;
tables rater1*rater2;
test kappa;
weight weight / zeros;
run;
输出结果:
SAS 的 FREQ 过程步可用于 Kappa一致性检验,代码共有两种写法,数值都一样,只是分析结果的展现形式不太一样。
TEST KAPPA 语句
proc freq data= unequalranges;
tables rater1*rater2;
test kappa;
weight weight / zeros;
run;
输出结果:
TABLES 语句中的 AGREE 选项
proc freq data= unequalranges;
tables rater1*rater2/agreenopercent nocol norow;
weight weight / zeros;
run;
输出结果:
下面的代码仅用于手算验证简单KAPPA系数的计算结果(理解任何一种计算公式的最好办法是手算一遍,当然要基于小数据来计算):
ods output simplekappa = simplekappa;
proc freq data= unequalranges;
tables rater1*rater2/agree nopercent nocolnorow;
weight weight / zeros;
run;
data kappa_diy;
set simplekappa(keep=label1 nvalue1);
where label1='ASE';
po=(4+4)/12;
pe=(4*4+8*4)/12**2;
kappa = (po-pe)/(1-pe);
kappa_lower = kappa+probit(0.025)*nvalue1;
kappa_upper = kappa+probit(0.975)*nvalue1;
put _all_;
run;
输出结果:
Label1=ASE nValue1=0.155902
po=0.6666666667
pe=0.3333333333
kappa=0.5
kappa_lower=0.1944369283
kappa_upper=0.8055630717
下面介绍一下如何将 Kappa 统计量保存在 SAS 数据集中便于后续的分析和使用。
1) 保存简单Kappa系数
ods output SimpleKappa = SimpleKappa;
2) 保存加权Kappa系数
ods output WeightedKappa = WeightedKappa;
代码如下:
ods output SimpleKappa = SimpleKappa;
ods output WeightedKappa = WeightedKappa;
proc freqdata= unequalranges;
tables rater1*rater2;
test kappa;
weight weight / zeros;
run;
五、经验
1) Weighted kappa penalizes disagreements interms of their seriousness, whereas unweighted kappa treats alldisagreements equally. Unweighted kappa, therefore, is inappropriate for ordinalscales.
2) Landis and Koch45 have proposed thefollowing as standards for strength of agreement for the kappacoefficient:
≤0=poor,
.01–.20=slight,
.21–.40=fair,
.41–.60=moderate,
.61–.80=substantial,
and .81–1=almost perfect.
六、参考资料
http://www.cis.udel.edu/~carberry/CIS-885/Papers/DiEugenio-Kappa-Second-Look.pdf
http://www.agreestat.com/research_papers/kappa_statistic_is_not_satisfactory.pdf
http://www.chestx-ray.com/statistics/kappa.html
http://david.abcc.ncifcrf.gov/helps/linear_search.html
http://rss.acs.unt.edu/Rdoc/library/epicalc/html/kap.html(R,我这里就不介绍了,大家有兴趣的自己看看)