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.

Beispiel eines ungewichteten Kappa mit Formel.

Abbildung 34.1: Beispiel eines ungewichteten Kappa mit Formel.

Link zum Artikel (PDF) aus dem ich die Tabelle gestohlen habe: Viera, A. J., & Garrett, J. M. (2005). Understanding interobserver agreement: the kappa statistic. Fam med, 37(5), 360-363.

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.]

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.:](https://www.jstor.org/stable/pdf/2529310.pdf?casa_token=2PNuqx84NLIAAAAA:_BH7z1GwQi-qvBYtn3wP9ey40qOrf_IshJ5q_55ZDApvb-5BRUjGF49fzm8n03bc2hvCd9Wb4a3E7zQnGa580u6-FYdxkBmaxqfNygxF3EeU6d4VaUv3eg) und Altman, D. G. (1991). Mathematics for kappa. Practical statistics for medical research, 1991, 406-407.]

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.

Kontinuierliche Kappa Werte, die Bezeichnungen dienen als Richtlinien und nicht als Kategoriengrenzen.

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.

df_kappa<-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"))

table(df_kappa$Rater_2, df_kappa$Rater_1)
##              
##               Independent Assistence Dependent
##   Independent          25          5         7
##   Assistence            6         24         4
##   Dependent            11          1        17
summarytools::ctable(df_kappa$Rater_2, df_kappa$Rater_1)
## 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)

Pe<-(42/100)*(37/100)+(30/100)*(34/100)+(28/100)*(29/100)
Po<-(25+24+17)/100
kappa<-(Po-Pe)/(1-Pe)
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.

psych::cohen.kappa(df_kappa[2:3], w=NULL)
## 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
ordinal<-df_kappa %>% 
  mutate(Rater_1_ordinal=case_when(
    Rater_1 == "Dependent" ~1,
    Rater_1 == "Assistence" ~2,
    Rater_1 =="Independent" ~3
  )) %>% 
  mutate(Rater_2_ordinal=case_when(
    Rater_2 == "Dependent" ~1,
    Rater_2 == "Assistence" ~2,
    Rater_2 =="Independent" ~3
  ))
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.

cohen.weights <- matrix(c(
  0,1,4,
  1,0,1,
  4,1,0),ncol=3)
psych::cohen.kappa(ordinal[4:5], w=cohen.weights)
## 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.

cohen.weights <- matrix(c(
  0,1,6,
  1,0,3,
  6,3,0),ncol=3)
psych::cohen.kappa(ordinal[4:5], w=cohen.weights)
## 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:

psych:: cohen.kappa(ordinal[4:5], w=NULL)
## 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
rating_1<-c(1,0,0,1,0,1,0,1,0)
rating_2<-c(1,1,1,0,0,1,0,1,0)
nominal<-as.data.frame(cbind(rating_1, rating_2))
  
table_kappa<-table(nominal$rating_1,nominal$rating_2) 
table_kappa
##    
##     0 1
##   0 3 2
##   1 1 3
results<-epiR::epi.kappa(table_kappa, method="fleiss")
results$kappa
##         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], "." )

results$pabak
##         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
mydata <- diagnoses[, 1:3]

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.

unsere_funktion_kappam.fleiss<-function(data, i){
  data_sample <- data[i,]
    return(kappam.fleiss(data_sample)$value)
}

bootkappa<-boot::boot(data=mydata, unsere_funktion_kappam.fleiss, R=1000)
boot::boot.ci(boot.out=bootkappa)
## 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