¿Cómo debería abordar este problema de predicción binaria?

9

Tengo un conjunto de datos con el siguiente formato.

Pronósticos de cáncer sin cáncer

Hay un resultado binario cáncer / no cáncer. Todos los médicos del conjunto de datos han visto a cada paciente y han emitido un juicio independiente sobre si el paciente tiene cáncer o no. Luego, los doctores dan su nivel de confianza de 5 de que su diagnóstico es correcto y el nivel de confianza se muestra entre paréntesis.

He intentado varias formas de obtener buenos pronósticos de este conjunto de datos.

Me funciona bastante bien promediar entre los médicos, ignorando sus niveles de confianza. En la tabla anterior, eso habría producido diagnósticos correctos para el paciente 1 y el paciente 2, aunque habría dicho incorrectamente que el paciente 3 tiene cáncer, ya que por una mayoría de 2-1 los médicos piensan que el paciente 3 tiene cáncer.

También probé un método en el que tomamos muestras de forma aleatoria de dos médicos, y si no están de acuerdo entre ellos, entonces el voto decisivo corresponde al médico que tenga más confianza. Ese método es económico porque no necesitamos consultar a muchos médicos, pero también aumenta bastante la tasa de error.

Probé un método relacionado en el que seleccionamos al azar a dos médicos, y si no están de acuerdo, seleccionamos al azar a dos más. Si un diagnóstico está adelantado por al menos dos 'votos', entonces resolvemos las cosas a favor de ese diagnóstico. Si no, seguimos probando más médicos. Este método es bastante económico y no comete demasiados errores.

No puedo evitar sentir que me falta una forma más sofisticada de hacer las cosas. Por ejemplo, me pregunto si hay alguna forma de dividir el conjunto de datos en conjuntos de entrenamiento y prueba, y encontrar una forma óptima de combinar los diagnósticos, y luego ver cómo funcionan esos pesos en el conjunto de prueba. Una posibilidad es algún tipo de método que me permita bajar de peso a los médicos que seguían cometiendo errores en el conjunto de prueba, y tal vez diagnósticos de peso que se realizan con alta confianza (la confianza se correlaciona con la precisión en este conjunto de datos).

Tengo varios conjuntos de datos que coinciden con esta descripción general, por lo que los tamaños de muestra varían y no todos los conjuntos de datos se relacionan con médicos / pacientes. Sin embargo, en este conjunto de datos en particular hay 40 médicos, cada uno atendió a 108 pacientes.

EDITAR: Aquí hay un enlace a algunas de las ponderaciones que resultan de mi lectura de la respuesta de @ jeremy-miles.

  1. Los resultados no ponderados se encuentran en la primera columna. En realidad, en este conjunto de datos, el valor de confianza máximo era 4, no 5, como dije erróneamente anteriormente. Por lo tanto, siguiendo el enfoque de @ jeremy-miles, el puntaje no ponderado más alto que cualquier paciente podría obtener sería 7. Eso significaría que, literalmente, cada médico afirmó con un nivel de confianza de 4 que ese paciente tenía cáncer. El puntaje no ponderado más bajo que cualquier paciente podría obtener es 0, lo que significa que cada médico afirmó con un nivel de confianza de 4 que ese paciente no tenía cáncer.

  2. Ponderación por el Alfa de Cronbach. En SPSS descubrí que había un Alfa de Cronbach general de 0.9807. Traté de verificar que este valor fuera correcto calculando el Alfa de Cronbach de una manera más manual. Creé una matriz de covarianza de los 40 médicos, que pego aquí . Luego, según mi comprensión de la fórmula Alfa de Cronbach donde es el número de elementos (aquí los médicos son los 'elementos') calculé sumando todos los elementos diagonales en la matriz de covarianza, y sumando todos los elementos en La matriz de covarianza. Entonces tengoα=KK1(1σxi2σT2)Kσxi2σT2α=40401(18.7915200.7112)=0.9807 Luego los 40 resultados diferentes de Cronbach Alpha que ocurrirían cuando cada médico fuera removido del conjunto de datos Puse a cero a cualquier médico que haya contribuido negativamente al Alfa de Cronbach. Se me ocurrieron pesos para los médicos restantes proporcional a su contribución positiva al Alfa de Cronbach.

  3. Ponderación por correlaciones totales de artículos. Calculo todas las correlaciones de ítems totales, y luego pongo un peso proporcional a cada médico al tamaño de su correlación.

  4. Ponderación por coeficientes de regresión.

Una cosa de la que aún no estoy seguro es cómo decir qué método funciona "mejor" que el otro. Anteriormente había estado calculando cosas como el puntaje de habilidad de Peirce, que es apropiado para casos en los que hay una predicción binaria y un resultado binario. Sin embargo, ahora tengo pronósticos que van de 0 a 7 en lugar de 0 a 1. ¿Debo convertir todos los puntajes ponderados> 3.50 a 1, y todos los puntajes ponderados <3.50 a 0?

user1205901 - Restablecer Monica
fuente
¿Podemos decir que No Cancer (3)es Cancer (2)? Eso simplificaría un poco tu problema.
Wayne
1
Re: su estructura de datos, casi siempre es mejor tener diferentes variables (si el paciente tiene cáncer; qué tan segura es la evaluación) en diferentes columnas. Combinarlos como en "sin cáncer (3)" limita severamente sus opciones.
rolando2
@Wayne Los datos van desde la predicción de cáncer con máxima confianza Cancer (4)hasta la predicción de no cáncer con máxima confianza No Cancer (4). No podemos decir eso No Cancer (3)y Cancer (2)son lo mismo, pero podríamos decir que hay un continuo, y los puntos medios en este continuo son Cancer (1)y No Cancer (1).
user1205901 - Restablece Monica
@ rolando2 Gracias por el consejo. He reorganizado las cosas en mi propio archivo de datos para que ahora estén separadas.
user1205901 - Restablecer Monica
1
Tenga en cuenta que su umbral es un parámetro ajustable , por lo que el límite apropiado dependerá de su criterio de evaluación. Como no estaba familiarizado con su métrica, lo busqué en Google y, de hecho, el primer golpe puede ser relevante para usted: una nota sobre el puntaje máximo de habilidad de Peirce (2007) .
GeoMatt22

Respuestas:

7

Primero, vería si los médicos están de acuerdo entre sí. No puede analizar a 50 médicos por separado, porque sobreajustará el modelo: un médico se verá genial, por casualidad.

Puede intentar combinar la confianza y el diagnóstico en una escala de 10 puntos. Si un médico dice que el paciente no tiene cáncer y tiene mucha confianza, eso es un 0. Si el médico dice que sí tiene cáncer y tiene mucha confianza, ese es un 9. Si el médico dice que no, y no están seguros, eso es un 5, etc.

Cuando intentas predecir, haces algún tipo de análisis de regresión, pero pensando en el orden causal de estas variables, es al revés. Si el paciente tiene cáncer es la causa del diagnóstico, el resultado es el diagnóstico.

Sus filas deben ser pacientes, y sus columnas deben ser médicos. Ahora tiene una situación común en psicometría (por eso agregué la etiqueta).

Luego mira las relaciones entre los puntajes. Cada paciente tiene una puntuación media y una puntuación de cada médico. ¿La puntuación media se correlaciona positivamente con la puntuación de cada médico? Si no, ese médico probablemente no sea confiable (esto se llama correlación ítem-total). A veces, elimina a un médico de la puntuación total (o puntuación media) y ve si ese médico se correlaciona con la media de todos los demás médicos: esta es la correlación total del elemento corregido.

Podría calcular el alfa de Cronbach (que es una forma de correlación intraclase) y el alfa sin cada médico. Alpha siempre debe aumentar cuando agrega un médico, por lo que si aumenta cuando elimina a un médico, la calificación de ese médico es sospechosa (esto a menudo no le dice nada diferente de la correlación ítem-total corregida).

Si usa R, este tipo de cosas está disponible en el paquete psicológico, usando la función alfa. Si usa Stata, el comando es alfa, en SAS es proc corr, y en SPSS está bajo escala, confiabilidad.

Luego puede calcular una puntuación, como la puntuación media de cada médico, o la media ponderada (ponderada por la correlación) y ver si esa puntuación es predictiva del diagnóstico verdadero.

O puede omitir esa etapa y hacer una regresión de la puntuación de cada médico en el diagnóstico por separado, y tratar los parámetros de regresión como pesos.

No dude en pedir una aclaración, y si quiere un libro, me gustan las "Escalas de medición de salud" de Streiner y Norman.

-Editar: basado en OPs información adicional.

Wow, eso es un gran alfa de Cronbach. La única vez que lo he visto tan alto es cuando se cometió un error.

Ahora haría una regresión logística y miraría las curvas ROC.

La diferencia entre ponderación por regresión y correlación depende de cómo cree que responden los médicos. Algunos documentos pueden ser más seguros (sin ser más hábiles) y, por lo tanto, pueden usar más los rangos extremos. Si desea corregir eso, usar la correlación, en lugar de la regresión, lo hace. Probablemente pesaría por regresión, ya que esto mantiene los datos originales (y no descarta ninguna información).

Editar (2): ejecuté modelos de regresión logística en R para ver qué tan bien cada uno predijo el resultado. TL / DR: no hay nada entre ellos.

Aquí está mi código:

d <- read.csv("Copy of Cancer data - Weightings.csv")

mrc <- glm(cancer ~ weightrc, data = d, family = "binomial")
mun <- glm(cancer ~ unweight, data = d, family = "binomial")
mca <- glm(cancer ~ weightca, data = d, family = "binomial")
mic <- glm(cancer ~ weightic, data = d, family = "binomial")

d$prc <- predict(mrc, type = "response")
d$pun <- predict(mun, type = "response")
d$pca <- predict(mca, type = "response")
d$pic <- predict(mic, type = "response")

par(mfrow = c(2, 2))
roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)
roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

4 curvas ROC

Y la salida:

> par(mfrow = c(2, 2))
> roc(d$cancer, d$prc, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$prc, ci = TRUE,     plot = TRUE)

Data: d$prc in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9831
95% CI: 0.9637-1 (DeLong)
> roc(d$cancer, d$pun, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pun, ci = TRUE,     plot = TRUE)

Data: d$pun in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9808
95% CI: 0.9602-1 (DeLong)
> roc(d$cancer, d$pca, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pca, ci = TRUE,     plot = TRUE)

Data: d$pca in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9854
95% CI: 0.9688-1 (DeLong)
> roc(d$cancer, d$pic, ci = TRUE, plot = TRUE)

Call:
roc.default(response = d$cancer, predictor = d$pic, ci = TRUE,     plot = TRUE)

Data: d$pic in 81 controls (d$cancer 0) < 27 cases (d$cancer 1).
Area under the curve: 0.9822
95% CI: 0.9623-1 (DeLong)
Jeremy Miles
fuente
1
Muy bien. Y, como su razonamiento lo permite, es posible que algún médico empeore la alfa al contribuir con una visión única mientras se opone a la tendencia.
rolando2
@ jeremy-miles Gracias por esta respuesta, y la amable oferta de responder preguntas al respecto. Traté de implementar lo que sugirió, y edité el OP para publicar algunos de los resultados. Lo principal que me pregunto es si interpreté su publicación correctamente, y también qué se necesitaría para mostrar que ciertos métodos de agregación funcionan mejor que otros métodos para predecir el resultado.
user1205901 - Restablecer Monica
Gracias por publicar los datos. Lo echaré un vistazo más tarde. (¿Qué software estás usando?)
Jeremy Miles
@JeremyMiles ¡Gracias por publicar esta edición! Estoy usando MATLAB, pero sé lo suficiente sobre R para cambiar y usar eso en su lugar, ya que ya has publicado el código R. Calculé que el Alfa de Cronbach en SPSS: ¿obtienes un valor diferente de R?
user1205901 - Restablecer Monica
1
Sí, eso es lo que estaba pensando. Entonces cada médico tiene un peso diferente.
Jeremy Miles el
2

Dos sugerencias listas para usar:

  1. Puede usar pesos en la función de pérdida de su regresión logística, de modo que el médico que está muy seguro de que el paciente tiene cáncer con P = 1 tiene el doble de impacto tiene otro que dice que tiene cáncer con P = 0,75. No olvides transformar adecuadamente tus probabilidades en pesos.
  2. Una familia de modelos a menudo descuidados son los modelos de clasificación. Dentro de los rankeadores hay tres grandes grupos: ranking por lista, puntual y por pares, según cuál sea su aporte. Parece que podría usar la clasificación puntual en su caso.
Ricardo Cruz
fuente
¿Puedes sugerir una forma de transformar adecuadamente las probabilidades en pesos? Intenté buscar en Google este concepto, pero no pude encontrar ningún consejo claro sobre cómo hacerlo.
user1205901 - Restablece a Monica el
@ user1205901, tenía en mente algo muy simple como: Let P= probabilidad de ser cáncer dado por el médico, luego (en notación de pitón): y=[1 if p >= 0.5 else 0 for p in P]y w=[abs(p-0.5)*2 for p in P]. Luego entrene al modelo:LogisticRegression().fit(X,y,w)
Ricardo Cruz
En la función de pérdida, esto dará, por ejemplo, el doble de peso a 0.1 que 0.2 por no ser cáncer (0.1 -> 0.8 y 0.2 -> 0.6). Si el médico no está seguro (P ~ 0.5), la observación no contribuye casi nada a la pérdida. Cualquier modelo que use necesita soportar agregar un vector de costos a la función de pérdida, que la mayoría de los modelos admiten. No sé si esto es bueno, pero parece trivial intentarlo. Necesita especificar una métrica primero. La función de pérdida puede adaptarse aún más a la métrica que quiera maximizar.
Ricardo Cruz
2

(Esto está fuera de mi área de especialización, por lo que la respuesta de Jeremy Miles puede ser más confiable).

Aquí hay una idea.

Primero, imagine que no hay nivel de confianza. Luego, para cada paciente , tienen cáncer o no , y cada médico les diagnosticó cáncer o no, .c i{ 0 , 1 } j = 1 ... m d i j{ 0 , 1 }i=1Nci{0,1}j=1mdij{0,1}

Un enfoque simple es asumir que, si bien los médicos pueden estar de acuerdo o en desacuerdo con el diagnóstico de un paciente dado, si conocemos el verdadero estado del paciente, entonces el diagnóstico de cada médico puede tratarse como independiente. Es decir, los son condicionalmente independientes dado . Esto da como resultado un clasificador bien definido conocido como Naive Bayes , con parámetros que son fáciles de estimar.dijci

En particular, los parámetros principales son la tasa base, , y las probabilidades de diagnóstico condicional Tenga en cuenta que este último parámetro es un promedio ponderado de los diagnósticos para el médico , donde los pesos son las verdaderas condiciones del paciente .p[c]1Nici

p[dj|c]idijciici
jci

Ahora, si este modelo es razonable, entonces una forma de incorporar los niveles de confianza es ajustar los pesos. Entonces, las probabilidades condicionales se convertirían en Aquí es un peso que explica el nivel de confianza de .

p[dj|c,wj]idijwijciiwijci
wij0dij

Tenga en cuenta que si sus pesos se lanzan como probabilidades , entonces puede usar la fórmula " Acceso directo de Bernoulli " para dar cuenta del caso adecuada.w[0,1]

p[dw]=dw(1d)1w
d=0

Nota: ¡ Esto requiere que su software dé en 0^0=1lugar de 0^0=NaN, lo cual es común pero vale la pena verificar! Alternativamente, puede garantizar , por ejemplo, si la confianza es entonces funcionaría.w(0,1)k{1K}w=k/(K+1)

GeoMatt22
fuente
En el contexto del comentario de @Wayne: Si dices No Cancer (3) = Cancer (2), esto es consistente con mi modelo de ponderación usando , ya que . Alternativamente, si usted dice , esto es consistente con , ya que . w[k]=kK25=135No Cancer (3) = Cancer (3)w[k]=kK+136=136
GeoMatt22
¿Puedo verificar que entiendo ? Si los resultados son [1,0,1] y un médico pronostica [0,1,1], y los pesos del médico son [0.2,0.4,0.8], ¿la probabilidad de diagnóstico condicional ponderado es 0.5?
p[dj|c,wj]idijwijciiwijci
user1205901 - Restablecer Monica
Lo siento, me di cuenta de que tenía la intención de que las se ponderaran, es decir, , en lugar de los indicadores . Entonces, para su caso . Entonces , mientras que y . Entonces y . dδ[0,1]d{0,1}δi=wi(di=1)+(1wi)(di=0)δ=[0.8,0.4,0.8]p[2]= ˉ c =2p[c,δ]=cδ¯=0.8+0+0.83=230.8 p[δ]= ˉ δ =5p[2]=c¯=23p[c| δ]=p[c,δ]/p[δ]=0.8p[δ| c]=p[c,δ]/p[c]=0.8p[δ]=δ¯=560.8p[c|δ]=p[c,δ]/p[δ]=0.8p[δ|c]=p[c,δ]/p[c]=0.8
GeoMatt22
0

De su pregunta, parece que lo que desea probar es su sistema de medición. En el ámbito de la ingeniería de procesos, este sería un análisis del sistema de medición de atributos o MSA.

Este enlace proporciona información útil sobre el tamaño de muestra necesario y los cálculos se ejecutan para realizar un estudio de este tipo. https://www.isixsigma.com/tools-templates/measurement-systems-analysis-msa-gage-rr/making-sense-attribute-gage-rr-calculations/

Con este estudio, también necesitará que el médico diagnostique al mismo paciente con la misma información al menos dos veces.

Puede realizar este estudio de dos maneras. Puede usar la clasificación simple de cáncer / sin cáncer para determinar el acuerdo entre los médicos y por cada médico. Idealmente, también deberían poder diagnosticar con el mismo nivel de confianza. Luego puede usar la escala completa de 10 puntos para evaluar el acuerdo entre y por cada médico. (Todos deberían estar de acuerdo en que el cáncer (5) tiene la misma calificación, que ningún cáncer (1) tiene la misma calificación, etc.)

Los cálculos en el sitio web vinculado son fáciles de realizar en cualquier plataforma que pueda estar utilizando para sus pruebas.

Tavrock
fuente