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:
β^= argtố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( β )= ∑i = 1n( YTôiđăng nhậpΛ ( X'Tôiβ ) + ( 1 - YTôi) đăng nhập( 1 - Λ ( X'Tô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 ) )β^= argtố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.