Sự sai lệch hồi quy logistic sự kiện hiếm: làm thế nào để mô phỏng các p bị đánh giá thấp với một ví dụ tối thiểu?


19

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 .)β 0β0NN5β^0

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 pchính nó như là một biến độc lập, trong đó pmộ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, simchỉ 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.p=0.01

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ỏ".p=0


3
Tôi rất vui vì bạn đang làm việc này và mong nhận được ý kiến ​​của người khác. Ngay cả khi có sai lệch, hiệu chỉnh sai lệch có thể có thể làm tăng phương sai đủ để tăng sai số bình phương trung bình của các ước tính.
Frank Harrell

3
@FrankHarrell, King và Zeng cũng khẳng định rằng "chúng tôi đang ở trong tình trạng hạnh phúc khi việc giảm sự thiên vị cũng làm giảm phương sai".
zkurtz

1
Tốt Vẫn còn phải xem liệu số lượng sai lệch có đủ lớn để lo lắng hay không.
Frank Harrell

"Hiếm" đối với bạn là gì? Chẳng hạn, tỷ lệ mặc định hàng năm 0,001% được liên kết với xếp hạng tín dụng AAA. Điều này có đủ hiếm cho bạn?
Aksakal

1
@Aksakal, lựa chọn "hiếm" yêu thích của tôi là lựa chọn thể hiện rõ nhất sự thiên vị mà King và Zeng đã viết.
zkurtz

Câu trả lời:


4

Đây là một câu hỏi thú vị - Tôi đã thực hiện một vài mô phỏng mà tôi đăng dưới đây với hy vọng rằng điều này kích thích thảo luận thêm.

Trước hết, một vài nhận xét chung:

  • Bài báo bạn trích dẫn là về sự thiên vị sự kiện hiếm. Điều không rõ ràng với tôi trước đây (cũng liên quan đến các bình luận được đưa ra ở trên) là nếu có bất cứ điều gì đặc biệt về các trường hợp bạn có 10/10000 trái ngược với 10/30 quan sát. Tuy nhiên, sau một số mô phỏng, tôi đồng ý là có.

  • Một vấn đề tôi gặp phải (tôi đã gặp phải vấn đề này thường xuyên và gần đây có một bài viết về Phương pháp sinh thái và tiến hóa, tôi không thể tìm thấy tài liệu tham khảo) là bạn có thể nhận được các trường hợp thoái hóa với GLM trong dữ liệu nhỏ các tình huống, trong đó MLE là FAAAR cách xa sự thật, hoặc thậm chí ở - / + vô cùng (do liên kết phi tuyến mà tôi cho là). Tôi không rõ người ta nên xử lý những trường hợp này như thế nào trong ước tính sai lệch, nhưng từ những mô phỏng của tôi, tôi sẽ nói rằng chúng có vẻ quan trọng đối với sự thiên vị của sự kiện hiếm gặp. Trực giác của tôi sẽ là loại bỏ chúng, nhưng sau đó không rõ chúng phải được loại bỏ bao xa. Có lẽ một cái gì đó để ghi nhớ cho sự điều chỉnh thiên vị.

  • Ngoài ra, các trường hợp suy biến này có vẻ dễ gây ra các vấn đề về số (do đó tôi đã tăng maxit trong hàm glm, nhưng người ta có thể nghĩ về việc tăng epsilon cũng như để đảm bảo một người thực sự báo cáo MLE thực sự).

Dù sao, ở đây, một số mã tính toán sự khác biệt giữa ước tính và sự thật để đánh chặn, độ dốc và dự đoán trong hồi quy logistic, trước tiên là cho tình huống mẫu thấp / tình trạng tỷ lệ mắc trung bình:

set.seed(123)
replicates = 1000
N= 40
slope = 2 # slope (linear scale)
intercept = - 1 # intercept (linear scale)

bias <- matrix(NA, nrow = replicates, ncol = 3)
incidencePredBias <- rep(NA, replicates)

for (i in 1:replicates){
  pred = runif(N,min=-1,max=1) 
  linearResponse = intercept + slope*pred
  data = rbinom(N, 1, plogis(linearResponse))  
  fit <- glm(data ~ pred, family = 'binomial', control = list(maxit = 300))
  bias[i,1:2] = fit$coefficients - c(intercept, slope)
  bias[i,3] = mean(predict(fit,type = "response")) - mean(plogis(linearResponse))
}

par(mfrow = c(1,3))
text = c("Bias intercept", "Bias slope", "Bias prediction")

for (i in 1:3){
  hist(bias[,i], breaks = 100, main = text[i])
  abline(v=mean(bias[,i]), col = "red", lwd = 3)  
}

apply(bias, 2, mean)
apply(bias, 2, sd) / sqrt(replicates)

Kết quả sai lệch và sai số chuẩn cho đánh chặn, độ dốc và dự đoán là

-0.120429315  0.296453122 -0.001619793
 0.016105833  0.032835468  0.002040664

Tôi sẽ kết luận rằng có bằng chứng khá tốt cho độ lệch âm nhỏ trong phần chặn và độ lệch dương dương tính ở độ dốc, mặc dù nhìn vào kết quả được vẽ cho thấy độ lệch nhỏ so với phương sai của các giá trị ước tính.

nhập mô tả hình ảnh ở đây

Nếu tôi đang đặt tham số cho tình huống sự kiện hiếm gặp

N= 4000
slope = 2 # slope (linear scale)
intercept = - 10 # intercept (linear scale)

Tôi đang nhận được sự thiên vị lớn hơn cho việc đánh chặn, nhưng vẫn KHÔNG CÓ dự đoán

   -1.716144e+01  4.271145e-01 -3.793141e-06
    5.039331e-01  4.806615e-01  4.356062e-06

Trong biểu đồ của các giá trị ước tính, chúng ta thấy hiện tượng ước tính tham số suy biến (nếu chúng ta nên gọi chúng như thế)

nhập mô tả hình ảnh ở đây

Hãy xóa tất cả các hàng có ước tính chặn <20

apply(bias[bias[,1] > -20,], 2, mean)
apply(bias[bias[,1] > -20,], 2, sd) / sqrt(length(bias[,1] > -10))

Độ lệch giảm và mọi thứ trở nên rõ ràng hơn một chút trong các số liệu - ước tính tham số rõ ràng không được phân phối bình thường. Tôi tự hỏi điều đó có nghĩa là tính hợp lệ của các TCTD được báo cáo.

-0.6694874106  1.9740437782  0.0002079945
1.329322e-01 1.619451e-01 3.242677e-06

nhập mô tả hình ảnh ở đây

Tôi sẽ kết luận sự thiên vị sự kiện hiếm gặp trên đánh chặn được thúc đẩy bởi chính các sự kiện hiếm, cụ thể là những ước tính cực kỳ nhỏ, cực kỳ nhỏ. Không chắc chắn nếu chúng ta muốn loại bỏ chúng hay không, không chắc chắn những gì sẽ bị cắt.

Một điều quan trọng cần lưu ý là, dù bằng cách nào, dường như không có sự thiên vị nào đối với các dự đoán ở thang đo phản hồi - hàm liên kết chỉ đơn giản là hấp thụ các giá trị cực kỳ nhỏ này.


1
Có, vẫn quan tâm. +1 cho một cuộc thảo luận tốt đẹp và để tìm kết quả tương tự với tôi (không có xu hướng dự đoán rõ ràng). Giả sử rằng cả hai chúng ta đều đúng, cuối cùng tôi muốn thấy một đặc điểm của các tình huống đáng quan tâm thực sự về xu hướng dự đoán (ví dụ, ít nhất là một ví dụ) HOẶC giải thích về những điểm yếu trong bài báo của King và Zeng dẫn đầu họ nói quá tầm quan trọng của việc điều chỉnh sai lệch của họ.
zkurtz

Chặn và độ dốc có một số giá trị sai lệch vào khoảng , những giá trị này phụ thuộc vào tiêu chí hội tụ, do đó cần được kiểm tra cho điều đó. Có lẽ "dừng sớm" như được sử dụng bởi người học máy có thể được sử dụng? ±20
kjetil b halvorsen

1

Sự kiện hiếm xảy ra sai lệch chỉ xảy ra khi có hồi quy. Nó sẽ không xảy ra trong một mô hình chỉ đánh chặn như mô hình được mô phỏng ở đây. Xem bài đăng này để biết chi tiết: http://statistichorizons.com/linear-vs-logistic#comment-276108


3
Chào Paul. Sẽ tốt hơn nếu bạn mở rộng câu trả lời của mình để nó độc lập và không yêu cầu quyền truy cập vào một trang web bên ngoài (ví dụ, có thể trở nên không khả dụng tại một số điểm).
Patrick Coulombe

Cũng lưu ý "cập nhật 2" trong OP. Sự thiên vị cũng không xuất hiện với một biến hồi quy duy nhất.
zkurtz

Theo phương trình của King & Zeng (16) và Hình 7, sai lệch là hàm của các biến hồi quy X. Không có sai lệch nếu X nhỏ, đó là tình huống được OP xem xét trong bản cập nhật 2. Tôi sẽ đề nghị xem xét sai lệch khi X lớn. Tôi cũng sẽ đề nghị cố gắng tái tạo mô phỏng của King & Zeng.
Paul von Hippel

Đây là một liên kết đến bài báo King-Zeng: gking.harvard.edu/files/0s.pdf
Paul von Hippel

1

Hình 7 trong bài báo dường như giải quyết trực tiếp nhất câu hỏi về sai lệch trong các dự đoán. Tôi không hiểu đầy đủ về con số (cụ thể, cách diễn giải "xác suất sự kiện ước tính quá nhỏ" có vẻ như là một sự đơn giản hóa) nhưng tôi đã xoay sở để tái tạo một cái gì đó tương tự như nó dựa trên mô tả ngắn gọn về mô phỏng của họ trong Phần 6.1:

n_grid = 40
x_grid = seq(0, 7, length.out = n_grid)
beta0 = -6
beta1 = 1

inverse_logit = function(x) 1/(1 + exp(-x))

do.one.sim = function(){
    N = 5000
    x = rnorm(N)
    p = inverse_logit(beta0 + beta1*x)
    # 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(rep(0, n_grid))
    }else{
        # Extract the error
        mod = glm(y ~ x, family = 'binomial')
        truth = inverse_logit(beta0 + beta1*x_grid)
        pred = predict(mod, newdata = data.frame(x = x_grid),
            type = 'response')
        return(pred - truth)
    }
}
mean.of.K.estimates = function(K){
    rowMeans(replicate(K, do.one.sim()))
}

set.seed(1)
bias = replicate(10, mean.of.K.estimates(100))
maxes = as.numeric(apply(bias, 1, max))
mins = as.numeric(apply(bias, 1, min))

par(mfrow = c(3, 1), mar = c(4,4,2,2))
plot(x_grid, rowMeans(bias), type = 'l',
    ylim = c(min(bias), max(bias)),
    xlab = 'x', ylab = 'bias')
lines(x_grid, maxes, lty = 2)
lines(x_grid, mins, lty = 2)
plot(x_grid, dnorm(x_grid), type = 'l',
    xlab = 'x', ylab = 'standard normal density')
plot(x_grid, inverse_logit(beta0 + beta1*x_grid),
    xlab = 'x', ylab = 'true simulation P(Y = 1)',
    type = 'l')

Cốt truyện đầu tiên là bản sao của tôi về hình 7 của họ, với việc bổ sung các đường cong nét đứt thể hiện toàn bộ kết quả trong hơn 10 thử nghiệm.

Theo bài báo, xđây là một biến dự đoán trong hồi quy được rút ra từ một tiêu chuẩn thông thường. Do đó, như được minh họa trong âm mưu thứ hai, tần số quan sát tương đối cho x > 3(trong đó sai lệch rõ ràng nhất xảy ra trong âm mưu thứ nhất) là nhỏ dần.

Biểu đồ thứ ba cho thấy xác suất mô phỏng "thật" trong quá trình tạo như là một hàm của x. Có vẻ như sự thiên vị lớn nhất xảy ra ở nơi xhiếm hoặc không tồn tại.

Kết hợp lại với nhau, những điều này cho thấy OP hoàn toàn hiểu sai yêu cầu trung tâm của bài báo bằng cách nhầm lẫn giữa "sự kiện hiếm" (nghĩa là x > 3) với "sự kiện P(Y = 1)rất nhỏ". Có lẽ bài báo liên quan đến cái trước thay vì cái sau.

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.