Có cách nào để buộc một mối quan hệ giữa các hệ số trong hồi quy logistic không?


8

Tôi muốn chỉ định một mô hình hồi quy logistic nơi tôi có mối quan hệ sau:

E[Yi|Xi]=f(βxi1+β2xi2) trong đó là hàm logit nghịch đảo.f

Có cách nào "nhanh chóng" để làm điều này với các hàm R có sẵn hay có tên cho một mô hình như thế này không? Tôi nhận ra rằng tôi có thể sửa đổi thuật toán Newton-Raphson được sử dụng cho hồi quy logistic nhưng đây là rất nhiều công việc lý thuyết và mã hóa và tôi đang tìm kiếm một cách rút gọn.

EDIT: nhận ước tính điểm cho khá dễ dàng bằng cách sử dụng tối ưu hóa () hoặc một số trình tối ưu hóa khác trong R để tối đa hóa khả năng. Nhưng tôi cần lỗi tiêu chuẩn về những kẻ này.β


1
Bạn có thể giải thích tình huống mà bạn muốn làm điều đó bao giờ không? Tôi chỉ tò mò thôi. Cá nhân tôi đã không nhìn thấy điều này và có lẽ sẽ phải mã hóa nó bằng cách sử dụng tối ưu hóa bị ràng buộc.
wolfsatthedoor

1
Tôi không thể đi vào chi tiết cụ thể nhưng lý do tôi muốn làm điều này về cơ bản là vì sức mạnh thống kê. Nếu tôi tin rằng mối quan hệ này tồn tại thì việc buộc mô hình có mối quan hệ này sẽ giúp tôi tiến gần hơn đến giá trị . Đối với việc lấy ước tính điểm trên , điều đó khá dễ dàng bằng cách sử dụng tối ưu hóa () hoặc một số trình tối ưu hóa khác trong R để tối đa hóa khả năng. Nhưng tôi cần lỗi tiêu chuẩn về những kẻ này. βββ
TrynnaDoStat

3
Điều này không khó như vẻ ngoài của nó: khá dễ dàng để có được MLE từ các nguyên tắc đầu tiên, bởi vì tất cả những gì bạn có là một tham số duy nhất. Viết khả năng ghi nhật ký và phân biệt nó với . Tìm số không. Điều đó sẽ được thực hiện bằng số. Nếu bạn gặp khó khăn khi bắt đầu tìm kiếm, hãy khớp với mô hình hai tham số thông thường và sử dụng (giả sử) hệ số làm giá trị bắt đầu. x 2βx2
whuber

2
Quy trình NLIN trong SAS có thể phù hợp với công thức hồi quy phi tuyến tính như thế này và sẽ xuất ra lỗi hệ số stnd. Bạn đã kết hôn với R hoặc có một số linh hoạt?
RobertF

1
Bắt các SE không khó hơn: đây là trường hợp dễ dàng của lý thuyết chuẩn, trong đó chỉ có một tham số. Nhưng do tính chất phi tuyến của sự phụ thuộc của nó vào các tham số, tôi sẽ miễn cưỡng dựa vào lý thuyết gần đúng hoặc tối ưu hóa số lượng vũ phu: vẽ sơ đồ hàm khả năng, ít nhất là trong một vài trường hợp, để bạn có thể hiểu được định tính của nó hành vi gần đỉnh.
whuber

Câu trả lời:


13

Điều này khá dễ thực hiện với chức năng tối ưu trong R. Hiểu biết của tôi là bạn muốn chạy hồi quy logistic trong đó y là nhị phân. Bạn chỉ cần viết hàm và sau đó dán nó vào tối ưu. Dưới đây là một số mã tôi không chạy (mã giả).

#d is your data frame and y is normalized to 0,1
your.fun=function(b)
{

    EXP=exp(d$x1*b +d$x2*b^2)

    VALS=( EXP/(1+EXP) )^(d$y)*( 1/(1+EXP) )^(1-d$y) 
    return(-sum(log(VALS)))
}

result=optim(0,your.fun,method="BFGS",hessian=TRUE)
# estimates 
 result$par
    #standard errors
    sqrt(diag(inv(result$hessian)))
# maximum log likelihood
-result$value

Lưu ý rằng your.fun là phủ định của hàm khả năng đăng nhập. Vì vậy, tối ưu hóa là tối đa hóa khả năng đăng nhập (theo mặc định tối ưu hóa tối thiểu hóa mọi thứ đó là lý do tại sao tôi làm cho hàm âm). Nếu Y không phải là nhị phân, hãy truy cập http://fisher.osu.edu/~schroeder.9/AMIS900/ch5.pdf để biết các dạng hàm đa phương thức và điều kiện trong các mô hình logit.


1
Đánh giá cao phản ứng Zachary! Tuy nhiên, điều này sẽ không hoạt động vì tôi cần các lỗi tiêu chuẩn trong ước tính của mình. Tôi đang nghĩ đến việc kết hợp bootstrapping và Optim () nhưng thực sự sẽ thích một phương thức không bootstrapping nếu có thể. Sửa đổi Newton-Raphson sẽ thỏa mãn hơn nhiều nhưng khó thực hiện hơn nhiều.
TrynnaDoStat

3
Có thể tôi không hiểu, lỗi tiêu chuẩn của ước tính xuất phát từ chức năng của hessian khả năng tối đa được đánh giá tại các ước tính. Cách bạn viết chức năng của bạn, bạn chỉ có một tham số. Bạn chắc chắn có thể bootstrap mã trên để có được lỗi tiêu chuẩn.
Zachary Blumenfeld

1
@ZacharyBlumenfeld Tôi hiểu những gì bạn đang nói bây giờ! Tôi đã bối rối bởi vì sự hiểu biết của tôi về lý thuyết tiệm cận về MLE là các quan sát của chúng tôi phải là iid (ý nghĩa chắc chắn thay đổi ở đây vì vậy các quan sát của tôi không phải là iid). Tuy nhiên, bây giờ tôi thấy rằng các quan sát không phải là iid trong các điều kiện đều đặn nhất định ( en.wikipedia.org/wiki/Maximum_likabilities#Asymptotic_normality ). Bây giờ tôi chỉ cần kiểm tra lại tình hình của tôi đáp ứng các điều kiện thường xuyên. Cảm ơn một lần nữa!
TrynnaDoStat

1
Lưu ý: Nếu sau đó nó là có thể được giả định iid, không nhất thiết . ε YY=Xβ+ϵϵY
liên hợp chiến binh

2

Câu trả lời trên là chính xác. Để tham khảo, đây là một số mã R hoạt động được xây dựng để tính toán nó. Tôi có quyền tự do thêm một đánh chặn, bởi vì bạn có thể muốn một trong số đó.

## make some data
set.seed(1234)
N <- 2000
x1 <- rnorm(N)
x2 <- rnorm(N)
## create linear predictor
lpred <- 0.5 + 0.5 * x1 + 0.25 * x2
## apply inverse link function
ey <- 1/(1 + exp(-lpred))
## sample some dependent variable
y <- rbinom(N, prob=ey, size=rep(1,N))

dat <- matrix(c(x1, x2, y), nrow=N, ncol=3)
colnames(dat) <- c('x1', 'x2', 'y')

Bây giờ xây dựng hàm khả năng ghi nhật ký để tối đa hóa, ở đây sử dụng dbinomvì nó ở đó và tổng hợp kết quả

## the log likelihood function
log.like <- function(beta, dat){
  lpred <- beta[1] + dat[,'x1'] * beta[2] + dat[,'x2'] * beta[2]**2
  ey <- 1/(1 + exp(-lpred))
  sum(dbinom(dat[,'y'], prob=ey, size=rep(1,nrow(dat)), log=TRUE))
}

và phù hợp với mô hình theo khả năng tối đa. Tôi không bận tâm để cung cấp một gradient hoặc chọn một phương pháp tối ưu hóa, nhưng bạn có thể muốn làm cả hai.

## fit
res <- optim(par=c(1,1), ## starting values 
             fn=log.like,
             control=list(fnscale=-1), ## maximise not minimise
             hessian=TRUE, ## for SEs
             dat=dat)

Bây giờ hãy xem kết quả. Các ước tính tham số ML và SE không triệu chứng là:

## results
data.frame(coef=res$par,
           SE=sqrt(diag(solve(-res$hessian))))

cần được

##        coef         SE
## 1 0.4731680 0.04828779
## 2 0.5799311 0.03363505

hoặc có một lỗi (luôn luôn có thể).

Những cảnh báo thông thường về lỗi tiêu chuẩn có nguồn gốc từ Hessian được áp dụng.

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.