CrossValidated có một số câu hỏi về thời điểm và cách áp dụng hiệu chỉnh sai lệch sự kiện hiếm gặp của King và Zeng (2001) . Tôi đang tìm kiếm một cái gì đó khác biệt: một minh chứng dựa trên mô phỏng tối thiểu rằng sự thiên vị tồn tại.
Đặc biệt, nhà nước King và Zeng
"... trong dữ liệu sự kiện hiếm, các sai lệch về xác suất có thể có ý nghĩa thực sự với kích thước mẫu trong hàng nghìn và theo hướng có thể dự đoán được: xác suất sự kiện ước tính quá nhỏ."
Đây là nỗ lực của tôi để mô phỏng sự thiên vị như vậy trong 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)
Khi tôi chạy nó, tôi có xu hướng đạt được điểm z rất nhỏ và biểu đồ ước tính rất gần với trung tâm so với sự thật p = 0,01.
Tôi đang thiếu gì? Có phải là mô phỏng của tôi không đủ lớn cho thấy sự thiên vị thực sự (và hiển nhiên là rất nhỏ)? Có sự thiên vị đòi hỏi một số loại đồng biến (nhiều hơn số chặn) được đưa vào không?
Cập nhật 1: King và Zeng bao gồm một xấp xỉ thô cho độ lệch của trong phương trình 12 của bài báo của họ. Lưu ý đến mẫu số, tôi giảm mạnh để được chạy lại mô phỏng, nhưng vẫn không có sai lệch trong xác suất sự kiện ước tính là hiển nhiên. (Tôi chỉ sử dụng điều này như một nguồn cảm hứng. Lưu ý rằng câu hỏi của tôi ở trên là về xác suất sự kiện ước tính, không phải .)β 0N
N
5
Cập nhật 2: Theo gợi ý trong các bình luận, tôi đã đưa một biến độc lập vào hồi quy, dẫn đến kết quả tương đương:
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))
Giải thích: Tôi đã sử dụng p
chính nó như là một biến độc lập, trong đó p
một vectơ có sự lặp lại của một giá trị nhỏ (0,01) và giá trị lớn hơn (0,2). Cuối cùng, sim
chỉ lưu trữ các xác suất ước tính tương ứng với và không có dấu hiệu sai lệch.
Cập nhật 3 (ngày 5 tháng 5 năm 2016): Điều này không thay đổi đáng kể kết quả, nhưng chức năng mô phỏng bên trong mới của tôi là
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])
}
}
Giải thích: MLE khi y là 0 hoàn toàn không tồn tại ( nhờ nhận xét ở đây để nhắc nhở ). R không đưa ra cảnh báo vì " dung sai hội tụ tích cực " của nó thực sự được thỏa mãn. Nói một cách tự do hơn, MLE tồn tại và trừ đi vô hạn, tương ứng với ; do đó chức năng của tôi cập nhật. Điều duy nhất mạch lạc khác mà tôi có thể nghĩ đến là loại bỏ các lần chạy mô phỏng trong đó y hoàn toàn bằng 0, nhưng điều đó rõ ràng sẽ dẫn đến kết quả thậm chí còn phản đối nhiều hơn với tuyên bố ban đầu rằng "xác suất sự kiện ước tính là quá nhỏ".