我的问题总体上表明我对泊松回归和 GLM 的理解很差。这里有一些假数据来说明我的问题:
### some fake data
x=c(1:14)
y=c(0, 1, 2, 3, 1, 4, 9, 18, 23, 31, 20, 25, 37, 45)
一些返回伪 R2 的自定义函数:
### functions of pseudo-R2
psuR2 <- function(null.dev, model.dev) { 1 - (model.dev /
null.dev)}
predR2 <- function(actuals, predicted) { 1 - (sum((actuals -
predicted)^2)) / sum((actuals -
mean(actuals))^2)}
拟合四个模型:OLS、带恒等链接的高斯 GLM、带对数链路的泊松 GLM、带恒等链路的泊松 GLM
#### OLS MODEL
mdl.ols = lm(y ~ x)
summary(mdl.ols)
pred.ols = predict(mdl.ols)
summary(mdl.ols)$r.squared
predR2(y, pred.ols)
#### GLM MODEL, family=gaussian(link="identity")
mdl.gauss <- glm(y~x, family=gaussian(link="identity"),
maxit=500)
summary(mdl.gauss)
pred.gauss = predict(mdl.gauss)
psuR2(mdl.gauss$null.deviance, mdl.gauss$deviance)
predR2(y, pred.gauss)
#### GLM MODEL, family=possion (canonical link)
mdl.poi_log <- glm(y~x, family=poisson(link="log"),
maxit=500)
summary(mdl.poi_log)
pred.poi_log= exp(predict(mdl.poi_log)) #transform
psuR2(mdl.poi_log$null.deviance, mdl.poi_log$deviance)
predR2(y, pred.poi_log)
#### GLM MODEL, family=poisson((link="identity")
mdl.poi_id <- glm(y~x, family=poisson(link="identity"),
start=c(0.5,0.5), maxit=500)
summary(mdl.poi_id)
pred.poi_id = predict(mdl.poi_id)
psuR2(mdl.poi_id$null.deviance, mdl.poi_id$deviance)
predR2(y, pred.poi_id)
最后绘制预测:
#### Plot the Fit
plot(x, y)
lines(x, pred.ols, lwd=2, col="green")
lines(x, pred.gauss, col="black", lty="dotted", lwd=1.5)
lines(x, pred.poi_log, col="red")
lines(x, pred.poi_id, col="blue")
legend("topleft", bty="n", title="Model:",
legend=c("pred.ols", "pred.gauss", "pred.poi_log",
"pred.poi_id"),
lty=c("solid", "dotted", "solid", "solid"),
col=c("green", "black", "red", "blue"),
lwd=c(2,1.5,1,1)
)
我有两个问题:
看来,OLS 和具有恒等链接的高斯 GLM 得出的系数和预测完全相同。这总是正确的吗?
我很惊讶 OLS 估计和预测与带有身份链接的 Poisson GLM 非常不同。我认为这两种方法都会尝试估计 E(Y|X)。当我使用 Poisson 的恒等链接时,似然函数是什么样的?