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 函数)。
我想知道 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 函数)。