Independientemente del diseño de investigación, la validez de un estudio puede verse severamente afectada si se utilizan mediciones poco fiables. Una importante fuente de error de medición es producto de la variabilidad interobservador, cuya magnitud es posible de estimar a través de los llamados estudios de concordancia, los cuales tienen como objetivo estimar hasta qué punto dos observadores coinciden en su medición. Estadísticamente, la manera de abordar este problema depende de la naturaleza de los datos. Cuando éstos son de tipo categórico, el test más frecuentemente empleado es el test de kappa, cuyo coeficiente homónimo refleja la fuerza de la concordancia entre dos observadores.
El kappa de Cohen se utiliza para medir el acuerdo de dos evaluadores (es decir, “jueces”, “observadores”) o métodos de calificación en escalas categóricas. Este proceso de medir hasta qué punto dos evaluadores asignan las mismas categorías o puntaje al mismo tema se llama confiabilidad entre evaluadores.
Tradicionalmente, la confiabilidad entre evaluadores se medía como un porcentaje de acuerdo general simple, calculado como el número de casos en los que ambos evaluadores estaban de acuerdo dividido por el número total de casos considerados.
Este porcentaje de acuerdo es criticado debido a su incapacidad para tener en cuenta el acuerdo aleatorio o esperado por casualidad, que es la proporción de acuerdo que se esperaría que tuvieran dos evaluadores basándose simplemente en el azar.
El kappa de Cohen es una medida de acuerdo comúnmente utilizada que elimina este acuerdo casual. En otras palabras, tiene en cuenta la posibilidad de que los evaluadores realmente adivinen al menos algunas variables debido a la incertidumbre.
El coeficiente kappa refleja la concordancia inter-observador y puede ser calculado en tablas de cualquier dimensión, siempre y cuando se contrasten dos observadores. Puede tomar valores entre \(-1\) y \(+1\). Mientras más cercano a \(+1\), mayor es el grado de concordancia inter-observador, por el contrario, mientras más cercano a \(-1\), mayor es el grado de discordancia inter-observador. Un valor de \(k = 0\) refleja que la concordancia observada es precisamente la que se espera a causa exclusivamente del azar.
La prueba de hipótesis se realiza con el estadístico \(\chi^{2}\) de Pearson.
\(H_0:\) No existe concordancia entre los dos observadores (\(k=0\)).
\(H_1:\) Existe concordancia entre los dos observadores (\(k=1\)).
Utilizaremos una table de \(2x2\) para poder llegar a definir la fórmula.
donde:
Proporción de acuerdo observado (\(P_{o}\)). El recuento total de concordancia observado es la suma de las entradas diagonales. La proporción de concordancia observada es: sum(diagonal.values)/N donde \(N\) es el total de recuentos de la tabla.
Proporción de acuerdo de azar (\(P_{e}\)). La proporción esperada de acuerdo se calcula de la siguiente manera.
Paso 1. Determine la probabilidad de que ambos evaluadores digan que sí al azar:
Esto representa la proporción marginal de la fila 1, que es row1.sum/N.
Esto representa la proporción marginal de la columna 1, que es column1.sum/N.
Calcular el producto de las proporciones marginales de la fila 1 y la columna 1.
Paso 2. Determine la probabilidad de que ambos evaluadores digan No al azar:
Esta es la proporción marginal de la fila 2: row2.sum/N.
Esta es la proporción marginal de la columna 2: column2.sum/N.
Calcular el producto de las proporciones marginales de la fila 2 y la columna 2.
Entonces, la probabilidad total esperada por azar es técnicamente, ver como la suma del producto de filas y columnas de proporciones marginales: Pe = sum(rows.marginal.proportions x columns.marginal.proportions).
La fórmula de Kappa de Cohen se define de la siguiente manera:
\[ K = \frac{P_{0}-P_{e}}{1-P_{e}}\]
Para un tamaño de muestra grande, el error estándar (SE) de kappa se puede calcular de la siguiente manera (JL Fleiss y Cohen 1973, JL Fleiss, Cohen y Everitt (1969) , Friendly, Meyer y Zeileis (2015) ) :
\[SE_{k}=\frac{P_{e}+P^{2}_{e}-\sum P_{i+}P_{+i}(P_{i+}+P_{+i})}{(1-P_{e}^{2})N}\] donde:
Una vez que se calcula \(SE_{k}\), se puede calcular un \(100(1 – \alpha) \%\) intervalo de confianza para kappa utilizando la distribución normal estándar de la siguiente manera:
\[k \pm Z_{\frac{\alpha}{2}}SE_{k}\]
Los datos deben cumplir los siguientes supuestos para calcular el Kappa de Cohen.
Tiene dos variables categóricas de resultado, que pueden ser variables ordinales o nominales.
Las dos variables de resultado deben tener exactamente las mismas categorías.
Tiene observaciones emparejadas ; cada tema es clasificado dos veces por dos evaluadores o métodos independientes.
Se utilizan los mismos dos evaluadores para todos los participantes.
El valor de kappa se ve afectado por la prevalencia del rasgo estudiado. Por tanto, es necesario ser cuidadoso a la hora de generalizar los resultados de comparación de observadores en situaciones con prevalencias diferentes; esto quiere decir que kappa es un estadístico descriptivo útil, pero es inadecuado con fines de predicción o inferencia.
Kappa es dependiente del número de categorías. Cuantas más categorías se estén considerando, más difícil será clasificar correctamente los sujetos de observación, lo que habitualmente implica valores de kappa más bajos. Por tanto, debe tenerse en cuenta el número de categorías a la hora de interpretar kappa.
Para datos ordinales derivados de categorizar variables continuas, el valor de kappa depende fuertemente de las a menudo arbitrarias definiciones que se hacen de las categorías.
Suponga que dos anticuerpos se aplicaron para poder detectar si tiene COVID o no, para ello se remiten 977 pruebas en sujetos sanos de una comunidad, y que se quiere estimar el grado de concordancia entre ellos. Los anticuerpos interpret1 e interpret2 tienen que clasificar cada prueba en una de dos categorías: “positiva” (con COVID) o “negativa” (sin COVID). Los resultados se muestran a continuación:
## # A tibble: 6 x 3
## Interpret1 Interpret2 Interpret3
## <chr> <chr> <chr>
## 1 Positivo Positivo Negativo
## 2 Negativo Negativo Negativo
## 3 Negativo Negativo Negativo
## 4 Positivo Positivo Positivo
## 5 Negativo Negativo Negativo
## 6 Positivo Positivo Negativo
Hacemos la respectiva transformación de la variable Interpret1 e Interpret2
Observador1=factor(Interpret1,levels = c("Positivo","Negativo"))
Observador2=factor(Interpret2,levels = c("Positivo","Negativo"))
Luego realizamos una tabla de \(2x2\)
modelo1=table(Observador1,Observador2)
modelo1
## Observador2
## Observador1 Positivo Negativo
## Positivo 519 13
## Negativo 2 443
Hay diferentes formas de como calcular el Kappa:
#install.packages("vcd")
library("vcd")
## Warning: package 'vcd' was built under R version 4.0.5
## Loading required package: grid
# Calcular kappa
valor.k <- Kappa(modelo1)
valor.k
## value ASE z Pr(>|z|)
## Unweighted 0.9691 0.007912 122.5 0
## Weighted 0.9691 0.007912 122.5 0
El valor de ASE lo que representa es el error estándar asintótico del valor de kappa.
# Intervalos de confianza
confint(valor.k)
##
## Kappa lwr upr
## Unweighted 0.9536034 0.9846181
## Weighted 0.9536034 0.9846181
# Tabla de contingencia
tab <- as.table(rbind(c(519, 13), c(2, 443)))
# Estadístico descriptivo
diagonal.counts <- diag(tab)
N <- sum(tab)
row.marginal.props <- rowSums(tab)/N
col.marginal.props <- colSums(tab)/N
# Calcular Kappa
Po <- sum(diagonal.counts)/N
Pe <- sum(row.marginal.props*col.marginal.props)
k <- (Po - Pe)/(1 - Pe)
k
## [1] 0.9691108
Para calcular su valor p utilizamos la prueba \(\chi^{2}\)
chisq.test(tab,correct = FALSE)
##
## Pearson's Chi-squared test
##
## data: tab
## X-squared = 918.05, df = 1, p-value < 2.2e-16
Se calculó la kappa de Cohen para evaluar el acuerdo entre los dos anticuerpos para diagnosticar COVID en 977 pacientes. Dado que la estimación del kappa fue bastante precisa entre los dos anticuerpos (k=0.97), asimismo su intervalo de confianza fue muy estrecho (IC del 95%, 0.95 a 0,98), además resultaron ser estadísticamente significativos (p<0.05).
El índice kappa ponderado debe emplearse cuando el resultado de la prueba analizada puede adoptar más de dos categorías, entre las que existe cierto orden jerárquico (resultados discretos ordinales).
Se llevó a cabo un estudio donde se pretendía analizar la concordancia entre la clasificación por niveles de riesgo del agrupador de morbilidad ajustada (GMA) y el nivel de intervención asignado por los médicos de familia, la muestra fue de 720 pacientes adscritos a cupos de los médicos familiares con escalas de concordancias entre los niveles bajo, medio o alto. A través de un cuestionario autoadministrado elaborado ad hoc los MF valoraron la utilidad del agrupador.
concor=matrix(c(135,39,2,75,171,28,17,121,132),nrow = 3,ncol = 3,byrow = TRUE)
colnames(concor)=c("Bajo","Medio","Alto")
rownames(concor)=c("Bajo","Medio","Alto")
concor
## Bajo Medio Alto
## Bajo 135 39 2
## Medio 75 171 28
## Alto 17 121 132
addmargins(concor)
## Bajo Medio Alto Sum
## Bajo 135 39 2 176
## Medio 75 171 28 274
## Alto 17 121 132 270
## Sum 227 331 162 720
library("vcd")
# Calcular kappa ponderado
k <- Kappa(concor)
k
## value ASE z Pr(>|z|)
## Unweighted 0.4098 0.02732 15.00 7.128e-51
## Weighted 0.5004 0.02481 20.17 1.886e-90
# Intervalos de confianza
confint(k)
##
## Kappa lwr upr
## Unweighted 0.3562534 0.4633295
## Weighted 0.4517993 0.5490674
El índice de kappa ponderado obtenido en la muestra de 720 pacientes con patología crónica relevante según los médicos de familia fue de 0.50 (IC 95%: 0.45-0.55) representando una concordancia moderada.
Si hay más de 2 evaluadores, entonces el promedio de todos los posibles kappa de dos evaluadores se conoce como kappa de Light (Conger 1980) . Puede calcularlo usando la función kappam.light()[irr package], que toma una matriz como entrada. Las columnas de la matriz son evaluadores y las filas son individuos.
donde:
La columna “Total” (\(n_{1+},n_{2+},\ldots, n_{k+}\)) indica la suma de cada fila, conocida como marginales de fila o recuentos marginales. Aquí, i se nombra la suma total de una fila determinada \(n_{i+}\).
La fila “Total” (\(n_{+1}, n_{+2},\ldots, n_{+k}\)) indica la suma de cada columna, conocida como marginales de columna. Aquí, la suma total de una columna dada i se llama \(n_{+i}\).
N es la suma total de todas las celdas de la tabla.
Para una fila / columna determinada, la proporción marginal es el margen de fila / columna dividido por N. Esto también se conoce como frecuencias o probabilidades marginales. Para una fila i, la proporción marginal es \(P_{i+} = \frac{n_{i+}}{N}\). De manera similar, para una columna dada i, la proporción marginal es \(P_{+i} = \frac{n_{+i}}{N}\). Para cada celda de la tabla, la proporción se puede calcular como el recuento de celdas dividido por N.
La proporción de concordancia observada (\(P_{o}\)) es la suma de las proporciones diagonales, que corresponde a la proporción de casos en cada categoría para los que los dos evaluadores acordaron la asignación.
\[P_o=\sum \frac{(diagonal.values)}{N}=\sum_{i=1}^{k}P_{ii}\]
La proporción de acuerdo de azar (\(P_{e}\)) es la suma de los productos de las proporciones marginales de filas y columnas: \(P_{e}\) = sum(row.marginal.proportions x column.marginal.proportions)
\[P_e=\sum_{i=1}^{k}P_{i+}P_{+i}\]
Usaremos los datos de diagnósticos psiquiátricos proporcionados por dos médicos clínicos. 30 pacientes fueron inscritos y clasificados por cada uno de los dos médicos en 5 categorías (J. Fleiss y otros 1971) : 1. Depresión, 2. Trastorno de la personalidad, 3. Esquizofrenia, 4. Neurosis, 5. Otro.
Los datos se organizan en la siguiente tabla de contingencia de 5x5:
diagnostico <- as.table(rbind(
c(7, 1, 2, 3, 0), c(0, 8, 1, 1, 0),
c(0, 0, 2, 0, 0), c(0, 0, 0, 1, 0),
c(0, 0, 0, 0, 4)
))
categories <- c("Depression", "Personality Disorder",
"Schizophrenia", "Neurosis", "Other")
dimnames(diagnostico) <- list(Doctor1 = categories, Doctor2 = categories)
diagnostico
## Doctor2
## Doctor1 Depression Personality Disorder Schizophrenia Neurosis
## Depression 7 1 2 3
## Personality Disorder 0 8 1 1
## Schizophrenia 0 0 2 0
## Neurosis 0 0 0 1
## Other 0 0 0 0
## Doctor2
## Doctor1 Other
## Depression 0
## Personality Disorder 0
## Schizophrenia 0
## Neurosis 0
## Other 4
# install.packages("irr")
library(irr)
## Loading required package: lpSolve
# Cargando los datos
data("diagnostico", package = "irr")
## Warning in data("diagnostico", package = "irr"): data set 'diagnostico' not
## found
head(diagnostico[, 1:3], 4)
## Doctor2
## Doctor1 Depression Personality Disorder Schizophrenia
## Depression 7 1 2
## Personality Disorder 0 8 1
## Schizophrenia 0 0 2
## Neurosis 0 0 0
# Calculando el Kappa de Light entre los primeros 3 evaluadores
kappam.light(diagnostico[, 1:3])
## Light's Kappa for m Raters
##
## Subjects = 5
## Raters = 3
## Kappa = 0.172
##
## z = 0.69
## p-value = 0.49