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 dbinom
vì 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.