Tính hệ số trong hồi quy logistic với R


18

Trong hồi quy tuyến tính bội, có thể tìm ra hệ số với công thức sau.

b= =(X'X)-1(X')Y

beta = solve(t(X) %*% X) %*% (t(X) %*% Y) ; beta

Ví dụ:

> y <- c(9.3, 4.8, 8.9, 6.5, 4.2, 6.2, 7.4, 6, 7.6, 6.1)
> x0 <- c(1,1,1,1,1,1,1,1,1,1) 
> x1 <-  c(100,50,100,100,50,80,75,65,90,90)
> x2 <- c(4,3,4,2,2,2,3,4,3,2)
> Y <- as.matrix(y)
> X <- as.matrix(cbind(x0,x1,x2))

> beta = solve(t(X) %*% X) %*% (t(X) %*% Y);beta
         [,1]
x0 -0.8687015
x1  0.0611346
x2  0.9234254
> model <- lm(y~+x1+x2) ; model$coefficients
(Intercept)          x1          x2 
 -0.8687015   0.0611346   0.9234254 

Tôi muốn làm thế nào để tính toán theo cách "thủ công" tương tự bản beta cho hồi quy logistic. Tất nhiên trong đó y sẽ là 1 hoặc 0. Giả sử tôi đang sử dụng họ nhị thức với một liên kết logit.


1
Câu hỏi mà bạn thực sự hỏi đã được đặt ra tại stats.stackexchange.com/questions/949/ . Câu hỏi có vẻ như bạn muốn hỏi được giải quyết bằng các câu trả lời ở đây.
whuber

Câu trả lời:


26

Công cụ ước tính OLS trong mô hình hồi quy tuyến tính là khá hiếm khi có thuộc tính mà nó có thể được biểu diễn ở dạng đóng, mà không cần phải được biểu thị như là trình tối ưu hóa của hàm. Tuy nhiên, đó là một trình tối ưu hóa của hàm - tổng dư của hàm bình phương - và có thể được tính như vậy.

MLE trong mô hình hồi quy logistic cũng là trình tối ưu hóa của hàm khả năng ghi nhật ký được xác định phù hợp, nhưng vì nó không có sẵn trong biểu thức dạng đóng, nên nó phải được tính như một trình tối ưu hóa.

Hầu hết các công cụ ước tính thống kê chỉ có thể biểu thị dưới dạng tối ưu hóa các chức năng được xây dựng phù hợp của dữ liệu được gọi là các hàm tiêu chí. Tối ưu hóa như vậy đòi hỏi phải sử dụng các thuật toán tối ưu hóa số thích hợp. Tối ưu hóa các chức năng có thể được tính trong R bằng cách sử dụng optim()chức năng cung cấp một số thuật toán tối ưu hóa cho mục đích chung hoặc một trong các gói chuyên dụng hơn như optimx. Biết sử dụng thuật toán tối ưu hóa nào cho các loại mô hình và hàm tiêu chí thống kê khác nhau là chìa khóa.

Hồi quy tuyến tính tổng dư của bình phương

Công cụ ước tính OLS được định nghĩa là trình tối ưu hóa của hàm dư bình phương nổi tiếng của hàm bình phương:

β^= =tranh luậntối thiểuβ(Y-Xβ)'(Y-Xβ)= =(X'X)-1X'Y

Trong trường hợp hàm hai lần khác nhau, hàm lồi như tổng bình phương còn lại, hầu hết các trình tối ưu hóa dựa trên độ dốc đều làm tốt công việc. Trong trường hợp này, tôi sẽ sử dụng thuật toán BFGS.

#================================================
# reading in the data & pre-processing
#================================================
urlSheatherData = "http://www.stat.tamu.edu/~sheather/book/docs/datasets/MichelinNY.csv"
dfSheather = as.data.frame(read.csv(urlSheatherData, header = TRUE))

# create the design matrices
vY = as.matrix(dfSheather['InMichelin'])
mX = as.matrix(dfSheather[c('Service','Decor', 'Food', 'Price')])

# add an intercept to the predictor variables
mX = cbind(1, mX)

# the number of variables and observations
iK = ncol(mX)
iN = nrow(mX)

#================================================
# compute the linear regression parameters as 
#   an optimal value
#================================================
# the residual sum of squares criterion function
fnRSS = function(vBeta, vY, mX) {
  return(sum((vY - mX %*% vBeta)^2))
}

# arbitrary starting values
vBeta0 = rep(0, ncol(mX))

# minimise the RSS function to get the parameter estimates
optimLinReg = optim(vBeta0, fnRSS,
                   mX = mX, vY = vY, method = 'BFGS', 
                   hessian=TRUE)

#================================================
# compare to the LM function
#================================================
linregSheather = lm(InMichelin ~ Service + Decor + Food + Price,
                    data = dfSheather)

Sản lượng này:

> print(cbind(coef(linregSheather), optimLinReg$par))
                    [,1]         [,2]
(Intercept) -1.492092490 -1.492093965
Service     -0.011176619 -0.011176583
Decor        0.044193000  0.044193023
Food         0.057733737  0.057733770
Price        0.001797941  0.001797934

Hồi quy logistic khả năng logistic

Hàm tiêu chí tương ứng với MLE trong mô hình hồi quy logistic là hàm khả năng log.

Λ(k)=1/(1+exp(-k)) β Ln(β)

đăng nhậpLn(β)= =ΣTôi= =1n(YTôiđăng nhậpΛ(XTôi'β)+(1-YTôi)đăng nhập(1-Λ(XTôi'β)))
trong đó là hàm logistic. Các ước tính tham số là các trình tối ưu hóa của chức năng này Λ(k)= =1/(1+điểm kinh nghiệm(-k))
β^= =tranh luậntối đaβđăng nhậpLn(β)

Tôi chỉ ra cách xây dựng và tối ưu hóa hàm tiêu chí bằng cách sử dụng optim()hàm một lần nữa bằng thuật toán BFGS.

#================================================
# compute the logistic regression parameters as 
#   an optimal value
#================================================
# define the logistic transformation
logit = function(mX, vBeta) {
  return(exp(mX %*% vBeta)/(1+ exp(mX %*% vBeta)) )
}

# stable parametrisation of the log-likelihood function
# Note: The negative of the log-likelihood is being returned, since we will be
# /minimising/ the function.
logLikelihoodLogitStable = function(vBeta, mX, vY) {
  return(-sum(
    vY*(mX %*% vBeta - log(1+exp(mX %*% vBeta)))
    + (1-vY)*(-log(1 + exp(mX %*% vBeta)))
    ) 
  ) 
}

# initial set of parameters
vBeta0 = c(10, -0.1, -0.3, 0.001, 0.01) # arbitrary starting parameters

# minimise the (negative) log-likelihood to get the logit fit
optimLogit = optim(vBeta0, logLikelihoodLogitStable,
                   mX = mX, vY = vY, method = 'BFGS', 
                   hessian=TRUE)

#================================================
# test against the implementation in R
# NOTE glm uses IRWLS: 
# http://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares
# rather than the BFGS algorithm that we have reported
#================================================
logitSheather = glm(InMichelin ~ Service + Decor + Food + Price,
                                  data = dfSheather, 
                         family = binomial, x = TRUE)

Sản lượng này

> print(cbind(coef(logitSheather), optimLogit$par))
                    [,1]         [,2]
(Intercept) -11.19745057 -11.19661798
Service      -0.19242411  -0.19249119
Decor         0.09997273   0.09992445
Food          0.40484706   0.40483753
Price         0.09171953   0.09175369

Như một lời cảnh báo, lưu ý rằng các thuật toán tối ưu hóa số yêu cầu sử dụng cẩn thận hoặc bạn có thể kết thúc với tất cả các loại giải pháp bệnh lý. Cho đến khi bạn hiểu rõ về chúng, tốt nhất là sử dụng các tùy chọn đóng gói có sẵn cho phép bạn tập trung vào việc chỉ định mô hình thay vì lo lắng về cách tính toán số lượng ước tính.


1
Công việc tuyệt vời @tchakravarty, chức năng khả năng đăng nhập có thể được đơn giản hóa bằng cách sử dụng-sum(vY%*%(mX%*%vBeta)-log(1+exp(mX%*%vBeta)))
Mamoun Benghezal

11

Bạn không thể đến đó từ đây. Các giải pháp cho cả mô hình tuyến tính chung và mô hình logistic phát sinh từ việc giải các phương trình khả năng tối đa tương ứng, nhưng chỉ mô hình tuyến tính có một giải pháp dạng đóng.

Nếu bạn tham khảo cuốn sách của McCullagh và Nelder, bạn có thể tìm hiểu cách các giải pháp thu được trong trường hợp logistic (hoặc mô hình tổng quát khác). Trong thực tế, các giải pháp được tạo ra lặp đi lặp lại, trong đó mỗi lần lặp liên quan đến việc giải một hồi quy tuyến tính có trọng số. Các trọng số phụ thuộc một phần vào chức năng liên kết.


2
hoặc tìm kiếm trên web cho "bình phương tối thiểu lặp lại" ...
Ben Bolker

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.