Doğrusal regresyon modelindeki OLS tahmincisi, kapalı formda temsil edilebilme özelliğine sahip olması, yani bir fonksiyonun optimize edicisi olarak ifade edilmesine gerek olmaması bakımından oldukça nadirdir. Bununla birlikte, bir işlevin optimize edicisidir - kareler işlevinin kalan toplamı - ve bu şekilde hesaplanabilir.
Lojistik regresyon modelindeki MLE aynı zamanda uygun şekilde tanımlanmış bir log-olasılık fonksiyonunun optimize edicisidir, ancak kapalı form ifadesinde bulunmadığından, bir optimizer olarak hesaplanmalıdır.
İstatistiksel tahmincilerin çoğu, ölçüt işlevleri olarak adlandırılan verilerin uygun şekilde yapılandırılmış işlevlerinin iyileştiricileri olarak ifade edilebilir. Bu gibi optimize ediciler, uygun sayısal optimizasyon algoritmalarının kullanılmasını gerektirir. Fonksiyon optim()
optimizatörleri, bazı genel amaçlı optimizasyon algoritmaları sağlayan fonksiyon veya R gibi daha özel paketlerden biri kullanılarak R'de hesaplanabilir optimx
. Farklı model ve istatistiksel kriter fonksiyonları için hangi optimizasyon algoritmasının kullanılacağını bilmek önemlidir.
Doğrusal regresyon artık kareler toplamı
OLS tahmincisi, kareler fonksiyonunun iyi bilinen artık toplamının optimize edici olarak tanımlanır:
β^=argminβ(Y−Xβ)′(Y−Xβ)=(X′X)−1X′Y
Kalan kareler toplamı gibi iki farklılaşabilir, dışbükey bir fonksiyon olması durumunda, gradyan temelli optimizatörlerin çoğu iyi bir iş çıkarır. Bu durumda, BFGS algoritmasını kullanacağım.
#================================================
# 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)
Bu şu sonuçları verir:
> 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
Lojistik regresyon log olasılığı
Lojistik regresyon modelinde MLE'ye karşılık gelen kriter fonksiyonu, log-olasılık fonksiyonudur.
logLn(β)=∑i=1n(YilogΛ(X′iβ)+(1−Yi)log(1−Λ(X′iβ)))
Λ(k)=1/(1+exp(−k))β^=argmaxβlogLn(β)
Bir optim()
kez daha BFGS algoritmasını kullanarak fonksiyonu kullanarak kriter fonksiyonunun nasıl oluşturulacağını ve optimize edileceğini göstereceğim .
#================================================
# 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)
Bu,
> 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
Bir uyarı olarak, sayısal optimizasyon algoritmalarının dikkatli bir şekilde kullanılması gerektiğini veya her türlü patolojik çözümle sonuçlanabileceğinizi unutmayın. Onları iyi anlayana kadar, tahminleri sayısal olarak nasıl hesaplayacağınız konusunda endişelenmek yerine, modeli belirlemeye konsantre olmanızı sağlayan mevcut paketlenmiş seçenekleri kullanmak en iyisidir.