O CrossValidated tem várias perguntas sobre quando e como aplicar a correção de viés de evento raro por King e Zeng (2001) . Estou procurando algo diferente: uma demonstração mínima baseada em simulação de que o viés existe.
Em particular, o rei e o estado de Zeng
"... em dados de eventos raros, os desvios nas probabilidades podem ser substancialmente significativos com tamanhos de amostra na casa dos milhares e estão em uma direção previsível: as probabilidades estimadas de eventos são muito pequenas."
Aqui está minha tentativa de simular esse viés no 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)
Quando executo isso, tendem a obter escores z muito pequenos, e o histograma de estimativas está muito próximo da verdade p = 0,01.
o que estou perdendo? Será que minha simulação não é grande o suficiente para mostrar o verdadeiro viés (e evidentemente muito pequeno)? O viés exige que algum tipo de covariável (mais que a interceptação) seja incluído?
Atualização 1: King e Zeng incluem uma aproximação aproximada para o viés de na equação 12 de seu artigo. Observando o denominador, reduzi drasticamente a ser e refiz a simulação, mas ainda não é evidente nenhum viés nas probabilidades estimadas do evento. (Eu usei isso apenas como inspiração. Note-se que a minha pergunta acima é sobre probabilidades de eventos estimados, não β 0 ).N
N
5
Atualização 2: Seguindo uma sugestão nos comentários, incluí uma variável independente na regressão, levando 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))
Explicação: Eu me usei p
como a variável independente, onde p
é um vetor com repetições de um valor pequeno (0,01) e um valor maior (0,2). No final, sim
armazena apenas as probabilidades estimadas correspondentes a e não há sinal de viés.
Atualização 3 (5 de maio de 2016): Isso não altera visivelmente os resultados, mas minha nova função de simulação interna é
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])
}
}
fonte
Respostas:
Essa é uma pergunta interessante - fiz algumas simulações que publico abaixo, na esperança de que isso estimule uma discussão mais aprofundada.
Primeiro de tudo, alguns comentários gerais:
O artigo que você cita é sobre viés de eventos raros. O que não estava claro para mim antes (também com relação aos comentários que foram feitos acima) é se há algo de especial nos casos em que você tem 10/10000 em oposição a 10/30 observações. No entanto, após algumas simulações, eu concordo que existe.
Um problema que eu tinha em mente (eu encontrei isso com frequência, e recentemente houve um artigo em Métodos em Ecologia e Evolução sobre isso, mas não consegui encontrar a referência) é que você pode obter casos degenerados com GLMs em dados pequenos situações em que o MLE está FAAAR longe da verdade, ou mesmo no - / + infinito (devido ao link não-linear, suponho). Não está claro para mim como se deve tratar esses casos na estimativa de viés, mas pelas minhas simulações eu diria que eles parecem essenciais para o viés de evento raro. Minha intuição seria removê-los, mas não está claro até que ponto eles precisam ser removidos. Talvez algo a ter em mente para a correção de preconceitos.
Além disso, esses casos degenerados parecem propensos a causar problemas numéricos (portanto, aumentei o maxit na função glm, mas também se poderia pensar em aumentar o epsilon para garantir que o relatório realmente seja verdadeiro).
De qualquer forma, aqui está um código que calcula a diferença entre estimativas e verdade para interceptação, inclinação e previsões em uma regressão logística, primeiro para uma amostra pequena / situação de incidência moderada:
O viés resultante e os erros padrão para interceptação, inclinação e previsão são
Concluo que há boas evidências para um leve viés negativo na interceptação e um leve viés positivo na inclinação, embora uma olhada nos resultados plotados mostre que o viés é pequeno comparado à variação dos valores estimados.
Se estou definindo os parâmetros para uma situação de evento raro
Estou recebendo um viés maior pela interceptação, mas ainda NENHUM na previsão
No histograma dos valores estimados, vemos o fenômeno de estimativas degeneradas de parâmetros (se deveríamos chamá-las assim)
Vamos remover todas as linhas para as quais as estimativas de interceptação são <20
O viés diminui e as coisas ficam um pouco mais claras nas figuras - as estimativas de parâmetros claramente não são normalmente distribuídas. Eu me pergunto que isso significa para a validade dos ICs que são relatados.
Concluo que o viés de evento raro na interceptação é impulsionado pelos próprios eventos raros, ou seja, aquelas estimativas raras e extremamente pequenas. Não tenho certeza se queremos removê-los ou não, não tenho certeza qual seria o ponto de corte.
Uma coisa importante a ser observada, porém, é que, de qualquer forma, parece não haver viés nas previsões na escala de resposta - a função de link simplesmente absorve esses valores extremamente pequenos.
fonte
O viés de eventos raros ocorre apenas quando há regressores. Não ocorrerá em um modelo somente de interceptação como o simulado aqui. Consulte esta publicação para obter detalhes: http://statisticalhorizons.com/linear-vs-logistic#comment-276108
fonte
A Figura 7 no artigo parece abordar mais diretamente a questão do viés nas previsões. Não entendo completamente a figura (especificamente, a interpretação "as probabilidades estimadas de eventos são muito pequenas" parece uma simplificação excessiva), mas consegui reproduzir algo semelhante a ele com base na descrição concisa da simulação na Seção 6.1:
O primeiro gráfico é minha replicação da figura 7, com a adição de curvas tracejadas que representam toda a gama de resultados em 10 tentativas.
De acordo com o artigo,
x
aqui está uma variável preditora na regressão extraída de uma normal padrão. Assim, como ilustrado no segundo gráfico, a frequência relativa de observações parax > 3
(onde o viés mais visível ocorre no primeiro gráfico) é cada vez menor.O terceiro gráfico mostra as probabilidades "verdadeiras" de simulação no processo de geração em função de
x
. Parece que o maior viés ocorre ondex
é raro ou inexistente.Tomados em conjunto, eles sugerem que o OP mal interpretou completamente a alegação central do artigo, confundindo "evento raro" (ie
x > 3
) com "evento para o qualP(Y = 1)
é muito pequeno". Presumivelmente, o artigo diz respeito ao primeiro, e não ao segundo.fonte