Kapitel 34 Reliabilitaet: Kappa und gewichteter Kappa

In der Physiotherapie gibt es viele Situationen, in denen wir eine Beurteilung abgeben. Wie Reliabel ist diese Beurteilung? Die Kappa Statistik kann uns da helfen.
34.0.1 Pakete für dieses Kapitel
Wir benötigen folgende Pakete:
library(psych)
library(arsenal)
library(rio)
library(DT)
library(skimr)
library(tidyverse)
library(irr)
library(summarytools)
34.1 Beurteilung und Übereinstimmung
Wenn zwei Untersucher:innen etwas beurteilen oder ein:e Untersucher:in etwas an zwei verschiedenen Tagen beurteilt, können wir die prozentuale Übereinstimmung berechnen (alle Übereinstimmungszellen geteilt durch die Gesamtzahl der Beobachtungen). Es wird jedoch immer eine gewisse zufällige Übereinstimmung geben, und wir möchten für diese zufällige Übereinstimmung korrigieren.
Dazu dient die Cohen’s Kappa Statistik. Bei der Berechnung wird die Differenz zwischen der beobachteten Übereinstimmung und der erwarteten Übereinstimmung berücksichtigt. Vielleicht erinnern Sie sich an die Begriffe erwartete und beobachtete Häufigkeiten aus der Chi-Quadrat-Statistik ?
34.2 Was werden Sie hier lernen:
- Wie man eine Kreuztabelle mit absoluten und relativen Häufigkeiten mit Hilfe des Pakets summarytools und der Funktion ctable erstellt
- Manuelle Berechnung des Cohen’s Kappa (ungewichtet)
- Verwendung des Pakets psych zur Berechnung des ungewichteten und des gewichteten Kappa
- Definieren von Gewichtungsschemata für die Verwendung mit psych::cohen.kappa
- Berechnung des gewichteten Kappa mit verschiedenen Gewichtungsschemata
- Prevalence and Bias Adjusted Kappa PABAK (wir werden es jedoch nicht berechnen)
- Berechnung von Fleiss Kappa für mehr als zwei Bewerter
Abbildung 32.2 zeigt Ihnen die Formel und ein Beispiel.

Abbildung 34.1: Beispiel eines ungewichteten Kappa mit Formel.
Die Kappa Statistik (egal ob der ungewichtete oder der gewichtete) kann wie folgt interpretiert werden Angepasst an Landis, J. R., & Koch, G. G. (1977). The measurement of observer agreement for categorical data. biometrics, 159-174.: und Altman, D. G. (1991). Mathematics for kappa. Practical statistics for medical research, 1991, 406-407.]
 und Altman, D. G. (1991). Mathematics for kappa. Practical statistics for medical research, 1991, 406-407.]](Interpretation_kappa.png)
Abbildung 34.2: Mögliche Interpretationen der Kappa Werte. Nach Landis, J. R., & Koch, G. G. (1977). The measurement of observer agreement for categorical data. biometrics, 159-174.: und Altman, D. G. (1991). Mathematics for kappa. Practical statistics for medical research, 1991, 406-407.]
Es gibt auch andere Interpretationen, wie in der Abbildung unten. Meiner Meinung nach sollten die Werte als “Anker” und nicht als Kategorien verstanden werden. Kategorien haben immer das folgende Problem: Nehmen wir die Kategorie Moderate aus der Abbildung 33.2. Ein Kappa Wert von 0.4 würde nur als Fair interpretiert, ein Wert von 0.41 (was praktisch gesehen gleich gut ist wie 0.4), würde hingegen als Moderate eingestuft. Das macht praktisch gesehen keinen Sinn. Mit einer Interpretation wie in Abbildung 33.3 würden beide Werte praktisch gleich interpretiert.

Abbildung 34.3: Kontinuierliche Kappa Werte, die Bezeichnungen dienen als Richtlinien und nicht als Kategoriengrenzen.
34.2.1 Beispiel aus dem Buch “Foundations of Clinical Research”
Berechnen wir ein Beispiel aus dem ausgezeichneten Buch von Portney & Watkins (Portney, Leslie G; Watkins, Mary P. Foundations of Clinical Research Applications To Practice, 3rd edition. (Page 599). F.A. Davis Company. Kindle Edition.). (Die neueste Ausgabe ist die 4te Edition.) Dazu laden wir Daten ein und erstellen eine Tabelle.

Tabelle nach Portney & Watkins, Table 26.6. Portney, Leslie G; Watkins, Mary P. Foundations of Clinical Research Applications To Practice, 3rd edition, (p. 599). F.A. Davis Company. Kindle Edition.
<-rio::import("http://www.pt-wissen.ch/practicals/Beispiel_Portney_587_Kindle.xlsx", sheet="kappa")
df_kappa
$Rater_1<-factor(df_kappa$Rater_1, levels=c("Independent", "Assistence", "Dependent"))
df_kappa$Rater_2<-factor(df_kappa$Rater_2, levels=c("Independent", "Assistence", "Dependent"))
df_kappa
table(df_kappa$Rater_2, df_kappa$Rater_1)
##
## Independent Assistence Dependent
## Independent 25 5 7
## Assistence 6 24 4
## Dependent 11 1 17
::ctable(df_kappa$Rater_2, df_kappa$Rater_1) summarytools
## Cross-Tabulation, Row Proportions
## Rater_2 * Rater_1
## Data Frame: df_kappa
##
## ------------- --------- ------------- ------------ ------------ --------------
## Rater_1 Independent Assistence Dependent Total
## Rater_2
## Independent 25 (67.6%) 5 (13.5%) 7 (18.9%) 37 (100.0%)
## Assistence 6 (17.6%) 24 (70.6%) 4 (11.8%) 34 (100.0%)
## Dependent 11 (37.9%) 1 ( 3.4%) 17 (58.6%) 29 (100.0%)
## Total 42 (42.0%) 30 (30.0%) 28 (28.0%) 100 (100.0%)
## ------------- --------- ------------- ------------ ------------ --------------
34.3 Manuelle Berechnung des ungewichteten Kappas (Cohen’s kappa)
<-(42/100)*(37/100)+(30/100)*(34/100)+(28/100)*(29/100)
Pe<-(25+24+17)/100
Po<-(Po-Pe)/(1-Pe)
kappa kappa
## [1] 0.4859389
34.4 Cohen’s Kappa mit der Funktion psych::cohen.kappa
Wenn wir dies in R mit dem Paket psych und dem Befehl cohen.kappa berechnen, erhalten wir eine Punktschätzung für den Kappa-Wert von 0.49 mit einem 95%-Konfidenzintervall von 0.35 bis 0.63.
::cohen.kappa(df_kappa[2:3], w=NULL) psych
## Call: cohen.kappa1(x = x, w = w, n.obs = n.obs, alpha = alpha, levels = levels)
##
## Cohen Kappa and Weighted Kappa correlation coefficients and confidence boundaries
## lower estimate upper
## unweighted kappa 0.35 0.49 0.63
## weighted kappa 0.36 0.53 0.70
##
## Number of subjects = 100
34.5 Gewichteter Kappa
Wir können auch ein zweites Beispiel aus demselben Buch berechnen, jetzt mit einem gewichteten Kappa. Der Gedanke hinter dem gewichteten Kappa ist, dass bei Ordinaldaten, z. B. den Kategorien 1, 2, 3 und 4, Bewerter A vielleicht 3 sagt und Bewerter B 2; dann wäre die Abweichung geringer, als wenn Bewerter B 1 gesagt hätte. Der gewichtete Kappa bestraft also den Unterschied zwischen den Bewertern.
Hier unten nun der R-Code. Zuerst erstellen wir die Daten, damit wir das Beispiel aus dem Buch nachvollziehen können. Dann müssen wir die Gewichte selbst erstellen, damit wir die gleichen Gewichte wie im Buch verwenden. In den meisten Fällen werden wir jedoch die vom Paket psych vorgeschlagenen Standardgewichte verwenden. Wichtig ist, dass wir im Methodenteil des Artikels angeben, welche Gewichte wir verwendet haben. Die Hilfeseite für diesen Befehl finden Sie hier: https://www.personality-project.org/r/psych/help/kappa.html
Für die gewichteten Kappa erstellen wir eine ordinale Variable
library(tidyverse)
table(df_kappa$Rater_1)
##
## Independent Assistence Dependent
## 42 30 28
<-df_kappa %>%
ordinalmutate(Rater_1_ordinal=case_when(
== "Dependent" ~1,
Rater_1 == "Assistence" ~2,
Rater_1 =="Independent" ~3
Rater_1 %>%
)) mutate(Rater_2_ordinal=case_when(
== "Dependent" ~1,
Rater_2 == "Assistence" ~2,
Rater_2 =="Independent" ~3
Rater_2
))table(ordinal$Rater_1,ordinal$Rater_1_ordinal)
##
## 1 2 3
## Independent 0 0 42
## Assistence 0 30 0
## Dependent 28 0 0
table(ordinal$Rater_2,ordinal$Rater_2_ordinal)
##
## 1 2 3
## Independent 0 0 37
## Assistence 0 34 0
## Dependent 29 0 0
Wir nehmen die Gewichte wie im Buch in Tabelle 26.
<- matrix(c(
cohen.weights 0,1,4,
1,0,1,
4,1,0),ncol=3)
::cohen.kappa(ordinal[4:5], w=cohen.weights) psych
## Warning in cohen.kappa1(x, w = w, n.obs = n.obs, alpha = alpha, levels =
## levels): upper or lower confidence interval exceed abs(1) and set to +/- 1.
## Call: cohen.kappa1(x = x, w = w, n.obs = n.obs, alpha = alpha, levels = levels)
##
## Cohen Kappa and Weighted Kappa correlation coefficients and confidence boundaries
## lower estimate upper
## unweighted kappa 0.35 0.49 0.63
## weighted kappa -0.61 0.34 1.00
##
## Number of subjects = 100
Wir können aber auch andere Gewichte nehmen, wie im Buch in Tabelle 26.8. Deswegen ist es wichtig, transparent die Gewichte in der Arbeit anzugeben.
<- matrix(c(
cohen.weights 0,1,6,
1,0,3,
6,3,0),ncol=3)
::cohen.kappa(ordinal[4:5], w=cohen.weights) psych
## Call: cohen.kappa1(x = x, w = w, n.obs = n.obs, alpha = alpha, levels = levels)
##
## Cohen Kappa and Weighted Kappa correlation coefficients and confidence boundaries
## lower estimate upper
## unweighted kappa 0.345 0.49 0.63
## weighted kappa 0.018 0.36 0.71
##
## Number of subjects = 100
Mit Standardgewichten:
:: cohen.kappa(ordinal[4:5], w=NULL) psych
## Call: cohen.kappa1(x = x, w = w, n.obs = n.obs, alpha = alpha, levels = levels)
##
## Cohen Kappa and Weighted Kappa correlation coefficients and confidence boundaries
## lower estimate upper
## unweighted kappa 0.35 0.49 0.63
## weighted kappa 0.13 0.34 0.55
##
## Number of subjects = 100
34.6 Prävalenz und verzerrungsbereinigtes Kappa (Prevalence and Bias Adjusted Kappa: PABAK)
Wenn die Prävalenz der Beobachtungen in einigen Zellen niedrig ist oder die Verteilung der Antworten in der Tabelle, in der die Bewertungen der beiden Bewerter verglichen werden, nicht symmetrisch ist, kann der Kappa-Wert sehr niedrig sein. In diesen Fällen schlagen einige Autoren (aber nicht alle) vor, das um Verzerrungen und Prävalenz bereinigte Kappa zu berechnen, das so genannte PABAK (Byrt et al. 1993). Wenn wir nur zwei Antwortmöglichkeiten haben (z. B. 0 und 1), können wir das epiR-Paket und den Befehl epi.kappa http://finzi.psych.upenn.edu/R/library/epiR/html/epi.kappa.html verwenden. Wenn wir mehr Antwortmöglichkeiten haben, müssen wir manuell berechnen oder eine andere Software verwenden. Ich verwende Stata für diese Zwecke.
Siehe dieses Papier für eine Bewertung des PABAK: Chen, G., Faris, P., Hemmelgarn, B., Walker, R. L., & Quan, H. (2009). Messung der Übereinstimmung von administrativen Daten mit Diagrammdaten unter Verwendung von nicht bereinigtem und bereinigtem Prävalenz-Kappa. BMC Medical Research Methodology, 9(1), 5.
## we just generate a two response option rating
<-c(1,0,0,1,0,1,0,1,0)
rating_1<-c(1,1,1,0,0,1,0,1,0)
rating_2<-as.data.frame(cbind(rating_1, rating_2))
nominal
<-table(nominal$rating_1,nominal$rating_2)
table_kappa table_kappa
##
## 0 1
## 0 3 2
## 1 1 3
<-epiR::epi.kappa(table_kappa, method="fleiss")
results$kappa results
## est se lower upper
## 1 0.3414634 0.3252033 -0.2959232 0.9788501
# cat("Kappa is: ", results$kappa[1:1], " with a 95% CI from ", results$kappa[3:3], " to ", results$kappa[4:4], "." )
$pabak results
## est lower upper
## 1 0.3333333 -0.4014099 0.8502907
# cat("The prevalence and bias adjusted Kappa (PABAK) is: ", results$pabak[1], " with a 95% CI from ", results$pabak[3], " to ", results$pabak[4],"." )
34.7 Ein veröffentlichtes Beispiel PABAK
Wir könnten uns die folgende veröffentlichte Arbeit einer Gruppe der Universität Bern ansehen: Link zum Paper.
34.8 Excel Tabelle mit drei Beispielen
Sie können hier eine Excel-Datei herunterladen, in der sich drei Beispiele befinden, um den Einfluss der Verteilungen der Antworten auf den Kappa zu illustrieren. Sie können in den drei Excel-Tabellenblättern jeweils die Zahlen in den grün markierten Zellen ändern, um den Einfluss unterschiedlicher Verteilungen zu sehen.
34.9 Mehr als zwei Bewerter: Fleiss Kappa
Manchmal haben Sie mehr als zwei Bewerter, die ein Thema bewerten. Dann müssen Sie die Analysen anpassen. In R finden Sie hier ein Tutorial: https://www.datanovia.com/en/lessons/fleiss-kappa-in-r-for-multiple-categorical-variables/ Für diese Berechnungen benötigen wir ein weiteres Paket, nämlich das Paket “irr”. Wenn Sie das Paket irr nicht installiert haben, dann müssen Sie dies einmal mit dem Befehl install.packages(“irr”) nachholen.
Eine schöne Erklärung der Formel und ein durchgehendes Beispiel finden Sie [im Originalartikel von Fleiss 1971 hier] (https://psycnet.apa.org/record/1972-05083-001). Sie finden das PDF auch auf moodle.
library(irr)
data("diagnoses", package = "irr")
head(diagnoses[, 1:3])
## rater1 rater2 rater3
## 1 4. Neurosis 4. Neurosis 4. Neurosis
## 2 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder
## 3 2. Personality Disorder 3. Schizophrenia 3. Schizophrenia
## 4 5. Other 5. Other 5. Other
## 5 2. Personality Disorder 2. Personality Disorder 2. Personality Disorder
## 6 1. Depression 1. Depression 3. Schizophrenia
<- diagnoses[, 1:3]
mydata
kappam.fleiss(mydata)
## Fleiss' Kappa for m Raters
##
## Subjects = 30
## Raters = 3
## Kappa = 0.534
##
## z = 9.89
## p-value = 0
34.10 Konfidenzintervalle für Kappa
Falls das Paket keine Konfidenzintervalle ausgibt, können wir sogenannte bootstrapped Konfidenzintervalle berechnen. Bootstrapping ist eine Technik, bei der aus einer Stichprobe mit Grösse n immer zufällig n Datenpunkte gewählt werden, aber jeder Datenpunkt wird wieder zurückgelegt und kann deshalb mehr als einmal ausgewählt werden. So besteht dke bootstrapped Stichprobe aus der gleichen Anzahl Daten wie das Original, jedoch sind nicht unbedingt alle Datenpunkte einmal ausgewählt, sonder ein paar Datenpunkte wurden mehrmals gewählt (und ein paar gar nicht).Mit dieser Stichprobe können wir nun jede Statistik berechnen die wie wollen. Wiederholt man dies nun ein paar Tausend Mal, so kann man aus der Verteilung der Resultate ein Konfidenzintervall erstellen. In R gibt es das Paket boot, mit dem wir dies tun können.Ein wenig kompliziert wird es dadurch, dass wir zuerst eine Funktione erstellen müssen, die die Statistik berechnet. Danach können wir diese Funktion in jedem Bootstrapping-Durchgang benutzen.
Nach dem Bootstrapping erhalten wir verschiedene Konfidenzintervalle mit dem Befehl boot.ci, wir nehmen das BCa Konfidenzintervall.
Sie finden hier ein Tutorial oder hier ein ausführlicheres Tutorial.
Wir machen dies mit dem Beispiel für den Fleiss Kappa.
<-function(data, i){
unsere_funktion_kappam.fleiss<- data[i,]
data_sample return(kappam.fleiss(data_sample)$value)
}
<-boot::boot(data=mydata, unsere_funktion_kappam.fleiss, R=1000)
bootkappa::boot.ci(boot.out=bootkappa) boot
## Warning in boot::boot.ci(boot.out = bootkappa): bootstrap variances needed for
## studentized intervals
## BOOTSTRAP CONFIDENCE INTERVAL CALCULATIONS
## Based on 1000 bootstrap replicates
##
## CALL :
## boot::boot.ci(boot.out = bootkappa)
##
## Intervals :
## Level Normal Basic
## 95% ( 0.3722, 0.7148 ) ( 0.3814, 0.7328 )
##
## Level Percentile BCa
## 95% ( 0.3359, 0.6873 ) ( 0.3546, 0.7102 )
## Calculations and Intervals on Original Scale
34.11 SPSS
Eine schöne Anleitung für Kappa in SPSS finden Sie hier: https://statistics.laerd.com/spss-tutorials/cohens-kappa-in-spss-statistics.php Ein Video über SPSS und gewichtetes Kappa finden Sie hier: https://youtu.be/K_u3xnBo1Z0 Wenn Sie mehr als zwei Bewerter haben, können Sie dies in SPSS nach diesem Video in deutscher Sprache hier tun: https://www.youtube.com/watch?v=FnsMBt3p7g8