CrossValidated tiene varias preguntas sobre cuándo y cómo aplicar la corrección de sesgo de eventos raros por King y Zeng (2001) . Estoy buscando algo diferente: una demostración mínima basada en simulación de que existe el sesgo.
En particular, el estado de King y Zeng
"... en datos de eventos raros, los sesgos en las probabilidades pueden ser significativamente significativos con tamaños de muestra en miles y están en una dirección predecible: las probabilidades de eventos estimadas son demasiado pequeñas".
Aquí está mi intento de simular tal sesgo en R:
# FUNCTIONS
do.one.sim = function(p){
N = length(p)
# Draw fake data based on probabilities p
y = rbinom(N, 1, p)
# Extract the fitted probability.
# If p is constant, glm does y ~ 1, the intercept-only model.
# If p is not constant, assume its smallest value is p[1]:
glm(y ~ p, family = 'binomial')$fitted[1]
}
mean.of.K.estimates = function(p, K){
mean(replicate(K, do.one.sim(p) ))
}
# MONTE CARLO
N = 100
p = rep(0.01, N)
reps = 100
# The following line may take about 30 seconds
sim = replicate(reps, mean.of.K.estimates(p, K=100))
# Z-score:
abs(p[1]-mean(sim))/(sd(sim)/sqrt(reps))
# Distribution of average probability estimates:
hist(sim)
Cuando ejecuto esto, tiendo a obtener puntuaciones z muy pequeñas, y el histograma de estimaciones está muy cerca de centrarse sobre la verdad p = 0.01.
¿Qué me estoy perdiendo? ¿Es que mi simulación no es lo suficientemente grande como para mostrar el sesgo verdadero (y evidentemente muy pequeño)? ¿El sesgo requiere algún tipo de covariable (más que la intercepción) para ser incluido?
Actualización 1: King y Zeng incluyen una aproximación aproximada del sesgo de en la ecuación 12 de su artículo. Observando el en el denominador, reduje drásticamente a ser y volví a ejecutar la simulación, pero aún no hay sesgo en las probabilidades estimadas de eventos. (Utilicé esto solo como inspiración. Tenga en cuenta que mi pregunta anterior es sobre las probabilidades estimadas de eventos, no ).N
N
5
Actualización 2: Siguiendo una sugerencia en los comentarios, incluí una variable independiente en la regresión, lo que condujo a resultados equivalentes:
p.small = 0.01
p.large = 0.2
p = c(rep(p.small, round(N/2) ), rep(p.large, N- round(N/2) ) )
sim = replicate(reps, mean.of.K.estimates(p, K=100))
Explicación: me utilicé p
como la variable independiente, donde p
es un vector con repeticiones de un valor pequeño (0.01) y un valor mayor (0.2). Al final, sim
almacena solo las probabilidades estimadas correspondientes a y no hay signos de sesgo.
Actualización 3 (5 de mayo de 2016): Esto no cambia notablemente los resultados, pero mi nueva función de simulación interna es
do.one.sim = function(p){
N = length(p)
# Draw fake data based on probabilities p
y = rbinom(N, 1, p)
if(sum(y) == 0){ # then the glm MLE = minus infinity to get p = 0
return(0)
}else{
# Extract the fitted probability.
# If p is constant, glm does y ~ 1, the intercept only model.
# If p is not constant, assume its smallest value is p[1]:
return(glm(y ~ p, family = 'binomial')$fitted[1])
}
}
Explicación: El MLE cuando y es idénticamente cero no existe ( gracias a los comentarios aquí para el recordatorio ). R no puede lanzar una advertencia porque su " tolerancia de convergencia positiva " en realidad se satisface. Hablando más liberalmente, el MLE existe y es menos infinito, que corresponde a ; de ahí la actualización de mi función. La única otra cosa coherente que se me ocurre hacer es descartar esas ejecuciones de la simulación donde y es idénticamente cero, pero eso claramente conduciría a resultados aún más contrarios a la afirmación inicial de que "las probabilidades estimadas de eventos son demasiado pequeñas".
fuente
Respuestas:
Esta es una pregunta interesante: he hecho algunas simulaciones que publico a continuación con la esperanza de que esto estimule una mayor discusión.
En primer lugar, algunos comentarios generales:
El artículo que cita es sobre el sesgo de eventos raros. Lo que no estaba claro para mí antes (también con respecto a los comentarios que se hicieron anteriormente) es si hay algo especial sobre los casos en los que tiene 10/10000 en lugar de 10/30 observaciones. Sin embargo, después de algunas simulaciones, estaría de acuerdo en que sí.
Un problema que tenía en mente (lo he encontrado con frecuencia, y recientemente había un artículo en Métodos en Ecología y Evolución sobre eso, aunque no pude encontrar la referencia) es que puede obtener casos degenerados con GLM en datos pequeños situaciones, donde el MLE está lejos de la verdad, o incluso en - / + infinito (debido al enlace no lineal, supongo). No está claro para mí cómo se deben tratar estos casos en la estimación del sesgo, pero según mis simulaciones, diría que parecen ser clave para el sesgo de eventos raros. Mi intuición sería eliminarlos, pero no está claro qué tan lejos deben estar para eliminarlos. Tal vez algo a tener en cuenta para la corrección de sesgos.
Además, estos casos degenerados parecen propensos a causar problemas numéricos (por lo tanto, he aumentado el maxit en la función glm, pero también se podría pensar en aumentar el épsilon para asegurarme de que uno realmente informe el verdadero MLE).
De todos modos, aquí hay un código que calcula la diferencia entre las estimaciones y la verdad para la intercepción, la pendiente y las predicciones en una regresión logística, primero para una situación de bajo tamaño de muestra / incidencia moderada:
El sesgo resultante y los errores estándar de intercepción, pendiente y predicción son
Llegaría a la conclusión de que hay bastante buena evidencia de un ligero sesgo negativo en la intersección, y un ligero sesgo positivo en la pendiente, aunque un vistazo a los resultados trazados muestra que el sesgo es pequeño en comparación con la varianza de los valores estimados.
Si estoy configurando los parámetros a una situación de evento raro
Estoy obteniendo un sesgo mayor para la intercepción, pero aún NINGUNO en la predicción
En el histograma de los valores estimados, vemos el fenómeno de las estimaciones de parámetros degenerados (si los llamamos así)
Eliminemos todas las filas para las cuales las estimaciones de intercepción son <20
El sesgo disminuye y las cosas se vuelven un poco más claras en las figuras: las estimaciones de los parámetros claramente no se distribuyen normalmente. Me pregunto que eso significa para la validez de los IC que se informan.
Llegaría a la conclusión de que el sesgo de eventos raros en la intersección está impulsado por eventos raros en sí, es decir, esas estimaciones raras y extremadamente pequeñas. No estoy seguro de si queremos eliminarlos o no, no estoy seguro de cuál sería el límite.
Sin embargo, una cosa importante a tener en cuenta es que, de cualquier manera, parece que no hay sesgo en las predicciones en la escala de respuesta: la función de enlace simplemente absorbe estos valores extremadamente pequeños.
fuente
El sesgo de eventos raros solo ocurre cuando hay regresores. No ocurrirá en un modelo de solo intercepción como el simulado aquí. Vea esta publicación para más detalles: http://statisticalhorizons.com/linear-vs-logistic#comment-276108
fuente
La Figura 7 en el documento parece abordar más directamente la cuestión del sesgo en las predicciones. No entiendo completamente la figura (específicamente, la interpretación "las probabilidades de evento estimadas son demasiado pequeñas" parece una simplificación excesiva) pero logré reproducir algo similar en base a su breve descripción de su simulación en la Sección 6.1:
La primera gráfica es mi réplica de su figura 7, con la adición de curvas discontinuas que representan el rango completo de resultados en 10 ensayos.
Según el artículo,
x
aquí hay una variable predictora en la regresión extraída de una normal estándar. Por lo tanto, como se ilustra en la segunda gráfica, la frecuencia relativa de observaciones parax > 3
(donde ocurre el sesgo más visible en la primera gráfica) es decrecientemente pequeña.El tercer gráfico muestra las probabilidades de simulación "verdaderas" en el proceso de generación en función de
x
. Parece que el mayor sesgo ocurre dondex
es raro o inexistente.Tomados en conjunto, estos sugieren que el OP malinterpretó por completo la afirmación central del documento al confundir "evento raro" (es decir
x > 3
) con "evento para el cualP(Y = 1)
es muy pequeño". Presumiblemente, el documento se refiere al primero en lugar del segundo.fuente