Kapitel 36 ICC Beispiel Seite 106 COSMIN Buch
Wir werden hier im Kapitel 5 Reliabilität die Beispiele ab Seite 106 nachrechnen. Die Daten haben haben wir mit dem Programm Webplotdigitizer extrahiert. Deswegen haben wir nicht exakt die gleichen Daten wie im Buch. Aus Urheberrechtlichen Gründen können wir natürlich das Kapitel des Buches hier auch nicht abbilden. Mit einem Konto der HES-SO Valais-Wallis haben Sie jedoch gratis Zugang zu diesem Buch und Kapitel. Klicken Sie hier um zum Kapitel zu gelangen
# load packages ####
library(psych)
library(irr)
library(tidyverse)
library(janitor)
library(BlandAltmanLeh)
<-rio::import("http://www.pt-wissen.ch/Statistik_BSc_Physiotherapie_Leukerbad/Cosmin_Beispiel_Mary_and_Peter_vorbereitet.csv", encoding="UTF-8")
datahead(data)
## Mean_Score_M_P Difference_Scores_M_minus_P Mary Peter
## 1 17.07444 -13.966817 10.09103 24.05785
## 2 31.93380 -5.897436 28.98508 34.88251
## 3 28.92141 2.096531 29.96968 27.87315
## 4 29.39883 21.025641 39.91165 18.88601
## 5 41.94620 -1.900452 40.99597 42.89643
## 6 48.37391 -12.911011 41.91840 54.82941
<-data %>%
datamutate(id=row_number()) %>%
select(id, Mary, Peter)
head(data)
## id Mary Peter
## 1 1 10.09103 24.05785
## 2 2 28.98508 34.88251
## 3 3 29.96968 27.87315
## 4 4 39.91165 18.88601
## 5 5 40.99597 42.89643
## 6 6 41.91840 54.82941
36.1 Reproduktion Tabelle 5.2 Seite 106 Cosmin Buch
Zuerst berechnen wir die Varianzkomponenten mit dem Paket psych und dem Befehl ICC.
<-psych::ICC(data[c("Mary", "Peter")])
out out
## Call: psych::ICC(x = data[c("Mary", "Peter")])
##
## Intraclass correlation coefficients
## type ICC F df1 df2 p lower bound upper bound
## Single_raters_absolute ICC1 0.76 7.4 49 50 2.9e-11 0.62 0.86
## Single_random_raters ICC2 0.77 9.7 49 49 2.3e-13 0.53 0.88
## Single_fixed_raters ICC3 0.81 9.7 49 49 2.3e-13 0.69 0.89
## Average_raters_absolute ICC1k 0.86 7.4 49 50 2.9e-11 0.76 0.92
## Average_random_raters ICC2k 0.87 9.7 49 49 2.3e-13 0.69 0.94
## Average_fixed_raters ICC3k 0.90 9.7 49 49 2.3e-13 0.82 0.94
##
## Number of subjects = 50 Number of Judges = 2
## See the help file for a discussion of the other 4 McGraw and Wong estimates,
$stats out
## subjects Judges Residual
## df 4.900000e+01 1.000000e+00 49.00000
## SumSq 2.599615e+04 8.923263e+02 2691.08189
## MS 5.305336e+02 8.923263e+02 54.92004
## F 9.660110e+00 1.624774e+01 NA
## p 2.300150e-13 1.935028e-04 NA
$MSW out
## [1] 71.66816
=nrow(data)
numberOfPatients=2 numberOfRaters
Wir extrahieren die Komponenten.
<-out$stats[3,1]
varBetweenPatients<-out$stats[3,3]
varResidual<-(varBetweenPatients-varResidual)/numberOfRaters
varTrueBetweenPatients<-out$stats[3,2]
varBetweenRaters<-(varBetweenRaters-varResidual)/numberOfPatients varTrueBetweenRaters
Hier die Zahlen, die der Tabelle im Buch entsprechen:
# Tabelle Output 5.2 Seite 106
Var_p = varTrueBetweenPatients) (
## [1] 237.8068
Var_o = varTrueBetweenRaters) (
## [1] 16.74812
var_residual = varResidual) (
## [1] 54.92004
var_total = Var_p+Var_o+var_residual) (
## [1] 309.475
Vergleichen wir unsere Resultate mit den Resultaten im Buch. Die Zahlen sind nicht exakt gleich, weil wir nicht die originalen Daten haben, sondern die Daten aus einer Graphik extrahiert haben.
36.2 Im Buch werden zwei ICCs beschrieben:
- ICC agreement
- ICC consistency
36.2.1 Erklärung
Wir sehen im Scatterplot als auch im Bland Altman Plot, dass es einen systematischen Fehler zwischen den Messungen von Peter und Mary gibt.
plot(data$Peter, data$Mary, xlim=c(0,100), ylim=c(0,100))
abline(lm(data$Mary~data$Peter), col="red")
::bland.altman.plot(data$Peter, data$Mary) BlandAltmanLeh
## NULL
Ein Korrelationskoeffizient berücksichtigt diesen systematischen Fehler nicht:
cor(data$Mary, data$Peter, method="pearson")
## [1] 0.8156364
Die ICC consistency Formel, berücksichtig diesen systematischen Fehler auch nicht. Im Packet psych mit dem Befehl ICC, wäre dies die dritte Zeile
::ICC(data[c("Mary", "Peter")]) psych
## Call: psych::ICC(x = data[c("Mary", "Peter")])
##
## Intraclass correlation coefficients
## type ICC F df1 df2 p lower bound upper bound
## Single_raters_absolute ICC1 0.76 7.4 49 50 2.9e-11 0.62 0.86
## Single_random_raters ICC2 0.77 9.7 49 49 2.3e-13 0.53 0.88
## Single_fixed_raters ICC3 0.81 9.7 49 49 2.3e-13 0.69 0.89
## Average_raters_absolute ICC1k 0.86 7.4 49 50 2.9e-11 0.76 0.92
## Average_random_raters ICC2k 0.87 9.7 49 49 2.3e-13 0.69 0.94
## Average_fixed_raters ICC3k 0.90 9.7 49 49 2.3e-13 0.82 0.94
##
## Number of subjects = 50 Number of Judges = 2
## See the help file for a discussion of the other 4 McGraw and Wong estimates,
Im Packet irr mit dem Befehl icc wäre dies folgender Befehl:
::icc(data[c("Mary", "Peter")], model="twoway", type="consistency") irr
## Single Score Intraclass Correlation
##
## Model: twoway
## Type : consistency
##
## Subjects = 50
## Raters = 2
## ICC(C,1) = 0.812
##
## F-Test, H0: r0 = 0 ; H1: r0 > 0
## F(49,49) = 9.66 , p = 2.3e-13
##
## 95%-Confidence Interval for ICC Population Values:
## 0.691 < ICC < 0.889
Möchten wir nun den systematischen Fehler berücksichtigen (was wir wohl tun sollten), so entspricht dies der zweiten Zeile im Befehl psych::ICC:
::ICC(data[c("Mary", "Peter")]) psych
## Call: psych::ICC(x = data[c("Mary", "Peter")])
##
## Intraclass correlation coefficients
## type ICC F df1 df2 p lower bound upper bound
## Single_raters_absolute ICC1 0.76 7.4 49 50 2.9e-11 0.62 0.86
## Single_random_raters ICC2 0.77 9.7 49 49 2.3e-13 0.53 0.88
## Single_fixed_raters ICC3 0.81 9.7 49 49 2.3e-13 0.69 0.89
## Average_raters_absolute ICC1k 0.86 7.4 49 50 2.9e-11 0.76 0.92
## Average_random_raters ICC2k 0.87 9.7 49 49 2.3e-13 0.69 0.94
## Average_fixed_raters ICC3k 0.90 9.7 49 49 2.3e-13 0.82 0.94
##
## Number of subjects = 50 Number of Judges = 2
## See the help file for a discussion of the other 4 McGraw and Wong estimates,
Benutzen wir den irr::icc Befehl, siehd dies wie folgt aus:
::icc(data[c("Mary", "Peter")], model="twoway", type="agreement") irr
## Single Score Intraclass Correlation
##
## Model: twoway
## Type : agreement
##
## Subjects = 50
## Raters = 2
## ICC(A,1) = 0.768
##
## F-Test, H0: r0 = 0 ; H1: r0 > 0
## F(49,16.1) = 9.66 , p = 5.65e-06
##
## 95%-Confidence Interval for ICC Population Values:
## 0.527 < ICC < 0.88
Wir sehen, dass die Reliabilität schlechter ist, wenn wir den systematischen Fehler benutzen - was ja korrekt ist, da der systematische Fehler ein Problem ist. Wenn wir ganz motiviert sind, können wir das auch manuell ausrechnen:
<-varTrueBetweenPatients/(varTrueBetweenPatients+varTrueBetweenRaters+varResidual)
ICC_agreement ICC_agreement
## [1] 0.7684202
36.3 Standardmessfehler für die consistency Situation
36.4 Standardmessfehler mit Berücksichtigung systematischer Fehler
<-varTrueBetweenRaters+varResidual
varError<-sqrt(varError)
SEMagreement SEMagreement
## [1] 8.465705
Wir sehen, dass wir in etwa die gleichen Resultate erhalten wie im Buch präsentiert. Wie schon erwähnt, die Unterschiede sind nur darauf zurückzuführen, dass wir nicht die genauen Daten zur Verfügung haben, sondern die Daten aus einer Graphik mit dem Programm WebPlotDigitizer extrahiert haben.
Falls Sie sehen möchten, wie die Daten aus der Graphik extrapoliert wurden, finden Sie hier ein Video: