CrossValidated memiliki beberapa pertanyaan tentang kapan dan bagaimana menerapkan koreksi bias peristiwa langka oleh King dan Zeng (2001) . Saya mencari sesuatu yang berbeda: demonstrasi berbasis simulasi minimal bahwa bias ada.
Secara khusus, Raja dan negara Zeng
"... dalam data kejadian yang jarang, bias dalam probabilitas dapat secara substantif bermakna dengan ukuran sampel dalam ribuan dan berada dalam arah yang dapat diprediksi: estimasi probabilitas kejadian terlalu kecil."
Ini adalah usaha saya untuk mensimulasikan bias pada 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)
Ketika saya menjalankan ini, saya cenderung mendapatkan skor-z yang sangat kecil, dan histogram perkiraan sangat dekat dengan terpusat pada kebenaran p = 0,01.
Apa yang saya lewatkan? Apakah simulasi saya tidak cukup besar menunjukkan bias yang benar (dan ternyata sangat kecil)? Apakah bias membutuhkan semacam kovariat (lebih dari intersepsi) untuk dimasukkan?
Pembaruan 1: King dan Zeng menyertakan perkiraan kasar untuk bias dalam persamaan 12 dari makalah mereka. Memperhatikan penyebutnya, saya secara drastis mengurangi menjadi dan menjalankan kembali simulasi, tetapi masih tidak ada bias dalam probabilitas kejadian yang diperkirakan. (Saya menggunakan ini hanya sebagai inspirasi. Perhatikan bahwa pertanyaan saya di atas adalah tentang perkiraan probabilitas acara, bukan .)N
N
5
Pembaruan 2: Mengikuti saran dalam komentar, saya menyertakan variabel independen dalam regresi, yang mengarah ke hasil yang setara:
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))
Penjelasan: Saya menggunakan p
dirinya sebagai variabel independen, di mana p
adalah vektor dengan pengulangan nilai kecil (0,01) dan nilai lebih besar (0,2). Pada akhirnya, sim
menyimpan hanya probabilitas yang diperkirakan sesuai dengan dan tidak ada tanda bias.
Pembaruan 3 (5 Mei 2016): Ini tidak terasa mengubah hasil, tetapi fungsi simulasi batin baru saya adalah
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])
}
}
Penjelasan: MLE ketika y secara identik nol tidak ada ( terima kasih untuk komentar di sini untuk pengingat ). R gagal memberikan peringatan karena " toleransi konvergensi positif " -nya benar-benar puas. Lebih bebas berbicara, MLE ada dan minus tanpa batas, yang sesuai dengan ; karenanya pembaruan fungsi saya. Satu-satunya hal yang koheren lain yang dapat saya pikirkan lakukan adalah membuang menjalankan simulasi di mana y adalah identik nol, tapi itu jelas akan mengarah pada hasil yang lebih bertentangan dengan klaim awal bahwa "probabilitas kejadian diperkirakan terlalu kecil".