Hồi quy nhị thức


8

Hồi quy logistic nhị thức có các tiệm cận trên và dưới lần lượt là 1 và 0. Tuy nhiên, dữ liệu chính xác (giống như một ví dụ) có thể có các tiệm cận trên và dưới khác nhau rất nhiều so với 1 và / hoặc 0. Tôi có thể thấy ba giải pháp tiềm năng cho vấn đề này:

  1. Đừng lo lắng về điều đó nếu bạn đang có được sự phù hợp tốt trong lĩnh vực quan tâm. Nếu bạn không có được sự phù hợp tốt thì:
  2. Chuyển đổi dữ liệu sao cho số phản hồi đúng tối thiểu và tối đa trong mẫu cho tỷ lệ 0 và 1 (thay vì nói 0 và 0,15).
    hoặc là
  3. Sử dụng hồi quy phi tuyến tính để bạn có thể chỉ định các tiệm cận hoặc yêu cầu bộ chỉnh lưu làm điều đó cho bạn.

Dường như với tôi, tùy chọn 1 & 2 sẽ được ưu tiên hơn tùy chọn 3 phần lớn vì lý do đơn giản, trong trường hợp đó tùy chọn 3 có lẽ là lựa chọn tốt hơn vì nó có thể mang lại nhiều thông tin hơn?

chỉnh sửa
Đây là một ví dụ. Tổng độ chính xác có thể có cho độ chính xác là 100, nhưng độ chính xác tối đa trong trường hợp này là ~ 15.

accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, 100-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/100 ~ x)
with(ndf, lines(fit ~ x))

Tùy chọn 2 (theo nhận xét và để làm rõ ý nghĩa của tôi) sau đó sẽ là mô hình

glmx2<-glm(cbind(accuracy, 16-accuracy) ~ x, family=binomial)

Tùy chọn 3 (để hoàn thiện) sẽ giống như:

fitnls<-nls(accuracy ~ upAsym + (y0 - upAsym)/(1 + (x/midPoint)^slope), 
  start = list("upAsym" = max(accuracy), "y0" = 0, "midPoint" = 10, "slope" = 5), 
  lower = list("upAsym" = 0, "y0" = 0, "midPoint" = 1, "slope" = 0), 
  upper = list("upAsym" = 100, "y0" = 0, "midPoint" = 19, hillslope = Inf), 
  control = nls.control(warnOnly = TRUE, maxiter=1000),
  algorithm = "port")

Tại sao có một vấn đề ở đây? Hồi quy logistic cho rằng logit (tỷ lệ cược log) của xác suất có mối quan hệ tuyến tính với các biến giải thích. Phạm vi tỷ lệ cược log hợp lệ là toàn bộ các số thực; không có khả năng vượt ra ngoài chúng!
whuber

Ví dụ, có một tiệm cận trên có xác suất chính xác là 0,15. Hồi quy sau đó được trang bị kém cho dữ liệu. Tôi sẽ đưa ra một ví dụ.
Matt Albrecht

+1 câu hỏi tuyệt vời. Bản năng của tôi sẽ là sử dụng 16 là tối đa chứ không phải 100 ( cbind(accuracy, 16-accuracy)), nhưng tôi lo lắng về việc liệu nó có hợp lý về mặt toán học hay không.
David Robinson

Câu trả lời:


3

Câu hỏi thú vị. Một khả năng xuất hiện trong đầu tôi là bao gồm một tham số bổ sung để kiểm soát giới hạn trên của chức năng 'liên kết'.p[0,1]

Đặt , là các quan sát độc lập, trong đó , , là một vectơ của các biến giải thích, là một vectơ của các hệ số hồi quy và là hàm liên kết. Sau đó, hàm khả năng được đưa ra bởi{xj,yj,nj}j=1,...,nyjBinomial{ni,pF(xjTβ)}p[0,1]xj=(1,xj1,...,xjk)Tβ=(β0,...,βk)F1

L(β,p)j=1npyjF(xjTβ)yj[1pF(xjTβ)]njyj

Bước tiếp theo là chọn một liên kết, giả sử phân phối logistic và tìm MLE tương ứng của .(β,p)

Xem xét ví dụ đồ chơi mô phỏng sau bằng mô hình phản ứng liều với và(β0,β1,p)=(0.5,0.5,0.25)n=31

dose = seq(-15,15,1)
a = 0.5
b = 0.5
n=length(dose)
sim = rep(0,n)
for(i in 1:n) sim[i] = rbinom(1,100,0.25*plogis(a+b*dose[i]))

plot(dose,sim/100)

lp = function(par){
if(par[3]>0& par[3]<1) return(-(n*mean(sim)*log(par[3]) +  sum(sim*log(plogis(par[1]+par[2]*dose)))  + sum((100-sim)*log(1-par[3]*plogis(par[1]+par[2]*dose))) ))
else return(-Inf)
}

optim(c(0.5,0.5,0.25),lp)

Một trong những kết quả tôi nhận được là . Do đó nó có vẻ chính xác. Tất nhiên, một thăm dò chi tiết hơn về mô hình này sẽ là cần thiết bởi vì bao gồm các tham số trong mô hình hồi quy nhị phân có thể khó khăn và các vấn đề về nhận dạng hoặc sự tồn tại của MLE có thể nhảy vào giai đoạn 1 2 .(β^0,β^1,p^)=(0.4526650,0.4589112,0.2395564)

Biên tập

Với chỉnh sửa (thay đổi đáng kể vấn đề), phương pháp tôi đã đề xuất trước đây có thể được sửa đổi để phù hợp với dữ liệu bạn đã cung cấp. Hãy xem xét mô hình

accuracy=pF(x;μ,σ),

Trong đó là CDF logistic, là tham số vị trí, là tham số tỷ lệ và tham số điều khiển chiều cao của đường cong tương tự như trong mô hình cũ. Mô hình này có thể được trang bị bằng cách sử dụng bình phương tối thiểu phi tuyến . Mã R sau đây cho thấy cách thực hiện điều này cho dữ liệu của bạn.Fμσp

rm(list=ls())
y = c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)/100
x = 1:length(y)
N = length(y)

plot(y ~ x)

Data = data.frame(x,y)

nls_fit = nls(y ~ p*plogis(x,m,s), Data, start = list(m = 10, s = 1,  p = 0.2) )

lines(Data$x, predict(nls_fit), col = "red")

1
Đây là một cách tiếp cận thú vị. Những lợi thế của việc sử dụng phương pháp này so với hàm hồi quy phi tuyến tính ba tham số là gì?
Matt Albrecht

@MattAlbrecht Cảm ơn bạn đã quan tâm. Tôi có thể thấy những ưu và nhược điểm của phương pháp này. Một trong những ưu điểm là khả năng diễn giải của phương pháp này, tương tự như hồi quy logit. Mặt khác, hàm hồi quy phi tuyến có thể linh hoạt hơn. Để có được ước lượng tốt về , có vẻ như cần phải có một thiết kế thử nghiệm tốt không tập trung vào các đuôi của hàm liên kết. Tôi không biết nếu mô hình đã được nghiên cứu trước đó. p

2
Lợi ích sẽ là sự kết hợp chính xác của biến thiên nhị thức.
Aniko

@MattAlbrecht Lưu ý rằng phương pháp này hạn chế hình dạng của hàm được trang bị là sigmoidal và tham số kiểm soát chiều cao trong khi phương pháp không tham số mà bạn đang xem xét thì không. BTW các tham số ước tính với mô hình này là . p(μ^,σ^,p^)=(8.5121,0.8987,0.1483)

2

Tôi sẽ sử dụng tối đa của vectơ X làm tổng số thành công có thể. (Đây là ước tính sai lệch về số lượng thành công tối đa thực sự, nhưng nó sẽ hoạt động khá tốt nếu bạn có đủ dữ liệu).

accuracy <- c(0,0,0,0,0,1,3,5,9,13,14,15,14,15,16,15,14,14,15)
x<-1:length(accuracy)
glmx<-glm(cbind(accuracy, max(accuracy)-accuracy) ~ x, family=binomial)
ndf<- data.frame(x=x)
ndf$fit<-predict(glmx, newdata=ndf, type="response")
plot(accuracy/max(accuracy) ~ x)
with(ndf, lines(fit ~ x))

Điều này tạo ra một cốt truyện trông giống như:

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


1

Lưu ý rằng hồi quy nhị thức dựa trên việc có một phản ứng nhị phân cho từng trường hợp riêng lẻ. mỗi phản hồi riêng lẻ phải có thể nhận một trong hai giá trị. Nếu có một số giới hạn cho tỷ lệ thì cũng phải có một số trường hợp chỉ có thể lấy một giá trị.

Có vẻ như bạn không xử lý dữ liệu nhị phân nhưng với dữ liệu trong phạm vi hữu hạn. Nếu đây là trường hợp, thì hồi quy beta nghe có vẻ phù hợp hơn. Chúng tôi có thể viết bản phân phối beta là:

p(di|LUμiϕ)=(diL)μiϕ1(Udi)(1μi)ϕ1B(μiϕ,(1μi)ϕ)(UL)ϕ1

Sau đó, bạn đặt giống như bất kỳ chức năng liên kết nào ánh xạ khoảng vào thực tế. Có một gói R có thể được sử dụng để phù hợp với các mô hình này, mặc dù tôi nghĩ rằng bạn cần phải biết giới hạn. Nếu bạn làm như vậy, thì hãy xác định lại biến mới .[ L , U ] y i = d i - Lg(μi)=xiTβ[L,U]yi=diLUL


Cảm ơn vì sự trả lời. Dữ liệu này được tạo thành để mô phỏng chuỗi T | F với tổng số 100 lựa chọn nhị phân cho mỗi điểm x. Vì vậy, các giới hạn là 0 đúng hoặc 100 đúng nhưng trường hợp cụ thể này được xấp xỉ 15 đúng. Sử dụng gói betareg ... pacc <- precision / 100 + 0,00001; b1 <- betareg (pacc ~ x) ... mang lại cho tôi hồi quy tìm kiếm tương tự như nhị thức. Đây có phải là những gì bạn có ý nghĩa? Hay bạn đang đề nghị áp đặt giới hạn dựa trên dữ liệu hậu hoc? Trong trường hợp nào điều gì phân biệt beta với nhị thức khi cả hai đã được đưa ra giới hạn hậu hoc?
Matt Albrecht
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.