Обчисліть коефіцієнти в логістичній регресії з R


18

При множинній лінійній регресії можна виявити коефіцієнт за такою формулою.

b=(XX)1(X)Y

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

Наприклад:

> 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 

Мені б хотілося, як таким же «вручну» розрахувати бета-версію для логістичної регресії. Де, звичайно, y буде 1 або 0. Припустимо, що я використовую сімейство біномів з посиланням logit.


1
Питання, яке ви фактично задаєте, вже було поставлено на сайті stats.stackexchange.com/questions/949/… . Питання, яке, схоже, ви хотіли задати, вирішене тут.
whuber

Відповіді:


26

Оцінювач OLS в моделі лінійної регресії є досить рідкісним властивістю того, що він може бути представлений у закритому вигляді, тобто не потрібно виражати його як оптимізатор функції. Однак це оптимізатор функції - залишкова сума функції квадратів - і може бути обчислений як такий.

MLE в моделі логістичної регресії також є оптимізатором відповідно визначеної функції вірогідності журналу, але оскільки вона недоступна в виразі закритої форми, вона повинна бути обчислена як оптимізатор.

Більшість статистичних оцінювачів виражаються лише як оптимізатори належним чином побудованих функцій даних, що називаються критерійними функціями. Такі оптимізатори вимагають використання відповідних алгоритмів чисельної оптимізації. Оптимізатори функцій можуть бути обчислені в R за допомогою optim()функції, яка забезпечує деякі алгоритми оптимізації загального призначення, або одного з більш спеціалізованих пакетів, таких як optimx. Знання, який алгоритм оптимізації використовувати для різних типів моделей та функцій статистичного критерію є ключовим.

Лінійна регресія залишкова сума квадратів

Оцінювач OLS визначається як оптимізатор відомої функції залишкової суми квадратів:

β^=argminβ(YXβ)(YXβ)=(XX)1XY

У разі подвійно диференційованої, опуклої функції, як залишкова сума квадратів, більшість оптимізаторів на основі градієнта добре справляються. У цьому випадку я буду використовувати алгоритм 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 в моделі логістичної регресії, є функція вірогідності журналу.

logLn(β)=i=1n(YilogΛ(Xiβ)+(1Yi)log(1Λ(Xiβ)))
where - це логістична функція. Оцінки параметрів є оптимізаторами цієї функції Λ(k)=1/(1+exp(k))
β^=argmaxβlogLn(β)

Я показую, як побудувати та оптимізувати функцію критерію, використовуючи 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

Зауважте, що алгоритми чисельної оптимізації потребують ретельного використання, або ви можете вирішити всілякі патологічні рішення. Поки ви їх добре не зрозумієте, найкраще скористатися наявними пакетованими опціями, які дозволять вам сконцентруватися на конкретизації моделі, а не перейматися питанням чисельного обчислення оцінок.


1
Чудова робота @tchakravarty, функцію правдоподібності журналу можна спростити за допомогою-sum(vY%*%(mX%*%vBeta)-log(1+exp(mX%*%vBeta)))
Mamoun Benghezal

11

Ви не можете дістатися звідси. Рішення як загальної лінійної моделі, так і логістичної моделі виникають з рішення відповідних рівнянь максимальної ймовірності, але тільки лінійна модель має рішення закритої форми.

Якщо ви звернетесь до книги МакКаллаха і Нелдера, ви можете дізнатися, як отримуються рішення в логістичному випадку (або іншій узагальненій моделі). По суті, рішення виробляються ітераційно, де кожна ітерація включає вирішення зваженої лінійної регресії. Ваги частково залежать від функції зв'язку.


2
або шукайте в Інтернеті "ітераційно переосмислені найменші квадрати" ...
Бен Болкер

Або безпосередньо тут: stats.stackexchange.com/questions/236676/…
kjetil b halvorsen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.