선형 회귀 모델의 OLS 추정기는 닫힌 형태로 표현 될 수있는 특성, 즉 함수의 최적화 프로그램으로 표현할 필요가없는 특성을 갖는 경우가 거의 없습니다. 그러나 함수의 최적화 프로그램-잔차 제곱합 함수는 그대로 계산할 수 있습니다.
로지스틱 회귀 모델의 MLE는 적절하게 정의 된 로그 우도 함수의 최적화 프로그램이지만 닫힌 형식 표현식에서는 사용할 수 없으므로 최적화 도구로 계산해야합니다.
대부분의 통계 추정기는 기준 함수라고하는 데이터의 적절하게 구성된 함수의 최적화 프로그램으로 만 표현할 수 있습니다. 이러한 최적화 프로그램에는 적절한 수치 최적화 알고리즘을 사용해야합니다. 함수의 최적화 optim()
는 일부 범용 최적화 알고리즘을 제공 하는 함수 또는와 같은보다 특수화 된 패키지 중 하나를 사용하여 R에서 계산할 수 있습니다 optimx
. 다양한 유형의 모델과 통계 기준 기능에 사용할 최적화 알고리즘을 아는 것이 중요합니다.
선형 회귀 잔차 제곱합
OLS 추정기는 잘 알려진 잔차 제곱합 함수의 최적화 프로그램으로 정의됩니다 :
β^= 인수분β( Y− X β )'( Y− X β )= ( X'X )− 1엑스'와이
잔차 제곱합과 같이 2 배로 차별화되고 볼록한 함수의 경우 대부분의 그래디언트 기반 최적화 프로그램이 잘 작동합니다. 이 경우 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)
결과는 다음과 같습니다.
> 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
로지스틱 회귀 로그 우도
로지스틱 회귀 모델에서 MLE에 해당하는 기준 함수는 로그 우도 함수입니다.
로그엘엔( β )= ∑나는 = 1엔( Y나는로그Λ ( X'나는β ) + ( 1 - Y나는) 로그( 1 − Λ ( X'나는β ) ) )
여기서 는 로지스틱 함수입니다. 모수 추정값은이 함수의 최적화 프로그램입니다.
Λ ( k ) = 1 / ( 1 + exp( − k ) )β^= 인수최대β로그엘엔( β )
optim()
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)
이 결과
> 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
주의 사항으로 수치 최적화 알고리즘은 신중하게 사용해야하거나 모든 종류의 병리학 적 솔루션으로 끝날 수 있습니다. 잘 이해하기 전까지는 추정치를 수치 적으로 계산하는 방법에 대해 걱정하지 않고 모델 지정에 집중할 수있는 사용 가능한 패키지 옵션을 사용하는 것이 가장 좋습니다.