CrossValidated มีหลายคำถามเกี่ยวกับเวลาและวิธีการที่จะใช้การแก้ไขเหตุการณ์อคติที่หายากโดยพระบาทสมเด็จพระเจ้าอยู่หัวและเซง (2001) ฉันกำลังมองหาสิ่งที่แตกต่าง: การสาธิตแบบจำลองขั้นต่ำที่มีอคติอยู่
โดยเฉพาะอย่างยิ่งราชาและเซงรัฐ
"... ในเหตุการณ์ที่หายากข้อมูลอคติในความน่าจะเป็นความหมายอย่างมีนัยสำคัญกับขนาดตัวอย่างเป็นพันและอยู่ในทิศทางที่สามารถคาดการณ์ได้: ความน่าจะเป็นของเหตุการณ์โดยประมาณนั้นเล็กเกินไป"
นี่คือความพยายามของฉันในการจำลองอคติดังกล่าวใน 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)
เมื่อฉันทำสิ่งนี้ฉันมักจะได้คะแนน z น้อยมากและฮิสโตแกรมของการประมาณนั้นใกล้เคียงกับความจริงที่ p = 0.01 มาก
ฉันพลาดอะไรไป นั่นคือการจำลองของฉันไม่ใหญ่พอที่จะแสดงอคติที่แท้จริง (และเล็กมาก) ได้หรือไม่? อคติต้องการความแปรปรวนร่วม (รวมถึงการสกัดกั้น) หรือไม่?
อัปเดต 1: King และ Zeng มีการประมาณคร่าวๆสำหรับอคติของในสมการที่ 12 ของกระดาษ สังเกตในส่วนที่ผมลดลงอย่างมากที่จะเป็นอีกครั้งวิ่งจำลอง แต่ยังคงมีอคติในความน่าจะเป็นเหตุการณ์ที่คาดไม่เป็นที่เห็นได้ชัด (ฉันใช้สิ่งนี้เป็นแรงบันดาลใจเท่านั้นโปรดทราบว่าคำถามของฉันข้างต้นเกี่ยวกับความน่าจะเป็นเหตุการณ์โดยประมาณไม่ใช่ )N
N
5
อัปเดต 2:ทำตามคำแนะนำในความคิดเห็นฉันรวมตัวแปรอิสระในการถดถอยนำไปสู่ผลลัพธ์ที่เทียบเท่า:
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))
คำอธิบาย: ฉันใช้p
ตัวเองเป็นตัวแปรอิสระโดยที่p
เป็นเวกเตอร์ที่มีการซ้ำของค่าขนาดเล็ก (0.01) และค่าที่มีขนาดใหญ่กว่า (0.2) ในที่สุดจัดsim
เก็บเฉพาะความน่าจะเป็นโดยประมาณที่สอดคล้องกับและไม่มีสัญญาณของความลำเอียง
อัปเดต 3 (5 พฤษภาคม 2559): สิ่งนี้ไม่ได้เปลี่ยนผลลัพธ์อย่างเห็นได้ชัด แต่ฟังก์ชั่นการจำลองภายในใหม่ของฉันคือ
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])
}
}
คำอธิบาย: MLE เมื่อ y เป็นศูนย์เหมือนกันไม่มีอยู่ ( ขอบคุณสำหรับความคิดเห็นที่นี่เพื่อเตือนความจำ ) R ล้มเหลวในการส่งคำเตือนเนื่องจาก " การยอมรับการบรรจบกันในเชิงบวก " ของมันได้รับความพึงพอใจจริง ๆ พูดอย่างเสรีมากขึ้น MLE มีอยู่และเป็นลบอนันต์ซึ่งสอดคล้องกับ ; ดังนั้นการปรับปรุงฟังก์ชั่นของฉัน สิ่งเดียวที่เชื่อมโยงกันอื่น ๆ ที่ฉันสามารถคิดได้คือการทิ้งสิ่งที่จำลองไว้ซึ่ง y เป็นศูนย์เหมือนกัน แต่สิ่งนี้จะนำไปสู่ผลลัพธ์ที่ชัดเจนยิ่งกว่าการโต้แย้งกับการอ้างสิทธิ์เริ่มแรกว่า