R中“glm”和“optim”参数的区别

The difference of parameters between “glm” and “optim” in R

我想知道 R 中“glm”和“optim”的参数(截距、斜率)的区别。 我认为那些预测会很好,但我不明白为什么这些参数不同。如果理解有误,请多多指教

glm; -23.36, 46.72, 46.72

优化; -73.99506, 330.09424, 122.50453

#data
x1<-c(0,0,1,1)
x2<-c(0,1,0,1)
y<-c(0,1,1,1)

#glm
model<-glm(y~x1+x2,family=binomial(link=logit))
summary(model)
#             Estimate Std. Error z value Pr(>|z|)
#(Intercept)    -23.36   71664.47       0        1
#x1              46.72  101348.81       0        1
#x2              46.72  101348.81       0        1

round(fitted(model))
#0 1 1 1


#optim
f<-function(par){
eta<-par[1]+par[2]*x1+par[3]*x2
p<-1/(1+exp(-eta))
-sum(log(choose(1,y))+y*log(p)+(1-y)*log(1-p),na.rm=TRUE)
}
(optim<-optim(c(1,1,1),f))
$par
#-73.99506   330.09424  122.50453

round(1/(1+exp(-(optim$par[1]+optim$par[2]*x1+optim$par[3]*x2))))
#0 1 1 1

我将在更一般的背景下回答这个问题。您已经建立了 完全分离 的逻辑回归(您可以在别处阅读相关内容);参数的线性组合可以将 all-zero 与 all-one 结果完美分开,这意味着在这种情况下最大似然估计实际上是 无限 。这有几个后果:

  • 您会看到一个警告 glm.fit: fitted probabilities numerically 0 or 1 occurred(这种情况通常会发生,但并非总是如此)
  • 基于局部曲率并取决于 log-likelihood 曲面是二次曲面的假设的标准偏差是荒谬的
  • 由于 log-likelihood 表面随着参数的极值(斜率在无限极限中接近零)变得越来越平坦,不同的优化器将得到本质上任意不同的答案,具体取决于表面恰好足够平坦,算法可以得出结论,它已经足够接近最佳值(=零梯度)。不仅是不同的优化方法(glm 中的 IRLS 与 optim 中的不同 method 选项),甚至不同操作系统上的相同优化方法,甚至可能是用不同的编译器构建的,会给出不同的答案。
  • brglm2包有诊断完全分离的方法(?brglm2::detect_separation),以及计算bias-reduced或[=的方法18=]penalized 将避免问题(通过以合理的方式更改 objective 函数)。