R 泊松回归预测

R 泊松回归预测,r,plot,regression,glm,predict,R,Plot,Regression,Glm,Predict,我目前正在使用该模型处理一个数据集 glm1 <- glm(FALL ~ GRP + AGE + SEX + offset(log(FU)), family=poisson, data=dat) 但这只给了我一个奇怪的情节。我需要做什么 编辑:根据再现性要求添加的数据 亲切的问候 编辑:关于置信区间的问题 我还有一个问题。我创建了如下置信区间: prs <- predict(glm1, newdata = newdat, type = "response", se.fit=TRUE

我目前正在使用该模型处理一个数据集

glm1 <- glm(FALL ~ GRP + AGE + SEX + offset(log(FU)), family=poisson, data=dat)
但这只给了我一个奇怪的情节。我需要做什么

编辑:根据再现性要求添加的数据

亲切的问候

编辑:关于置信区间的问题


我还有一个问题。我创建了如下置信区间:

prs <- predict(glm1, newdata = newdat, type = "response", se.fit=TRUE)
newdat$pred <- prs[[1]]
newdat$se <- prs[[2]]
newdat$lo <- newdat$pred - 1.96 * newdat$se 
newdat$up <- newdat$pred + 1.96 * newdat$se
但是,是否可以在同一个图表中绘制此图?

当您使用predict时,需要设置新数据。只需调用predict而不使用newdata将只返回拟合值。因此,您的predict调用实质上是获取glm1$fitted.values

听着,你想从GRP==控件中预测FU==12的性别==女性。使用

但有没有可能在同一张图上画出这个呢

您的置信区间计算不正确。响应不是正态分布的,所以不能使用1.96。线性预测器是渐近正态的,所以您需要为线性预测器生成置信带,然后使用反向链接函数将其转换为响应尺度

ginv <- glm1$family$linkinv  ## inverse link function
prs <- predict(glm1, newdata = newdat, type = "link", se.fit=TRUE)
newdat$pred <- ginv(prs[[1]])
newdat$lo <- ginv(prs[[1]] - 1.96 * prs[[2]])
newdat$up <- ginv(prs[[1]] + 1.96 * prs[[2]])
或者,您可以使用matplot:


谢谢你的建议,我要补充一句:我正在使用这个:非常感谢!我会尝试一下,看看它是否有效:我还有一个问题。我创建了这样的置信区间:你知道我需要使用哪些命令来正确计算吗?啊,非常感谢!这真的解释了很多!非常感谢。非常感谢你!你真让我开心非常感谢。我想知道我是否接受12个月的随访。我是说FU=12还是别的什么?我试着用0:12做,但那不起作用,4:12最小值也不起作用。你有什么建议吗?
prs <- predict(glm1, newdata = newdat, type = "response", se.fit=TRUE)
newdat$pred <- prs[[1]]
newdat$se <- prs[[2]]
newdat$lo <- newdat$pred - 1.96 * newdat$se 
newdat$up <- newdat$pred + 1.96 * newdat$se
## I use `AGE = 65:87` because this is what `range(dat$AGE)` gives
## we must provide all covariates used in model formula to make `predict` work
## recycling rule is applied here.
## `GRP`, `SEX` and `FU` are given a single value, while `AGE` has length 23
## they will be recycled 23 times
newdat <- data.frame(AGE = 65:87, GRP = "CONTROL", SEX = "FEMALE", FU = 12)
pred <- predict(glm1, newdata = newdat, type = "response")
plot(newdat$AGE, pred, type = "l")
newdat <- subset(dat, GRP == "CONTROL" & SEX == "FEMALE" & FU == 12)
prs <- predict(glm1, newdata = newdat, type = "response", se.fit=TRUE)
newdat$pred <- prs[[1]]
newdat$se <- prs[[2]]
newdat$lo <- newdat$pred - 1.96 * newdat$se 
newdat$up <- newdat$pred + 1.96 * newdat$se
ginv <- glm1$family$linkinv  ## inverse link function
prs <- predict(glm1, newdata = newdat, type = "link", se.fit=TRUE)
newdat$pred <- ginv(prs[[1]])
newdat$lo <- ginv(prs[[1]] - 1.96 * prs[[2]])
newdat$up <- ginv(prs[[1]] + 1.96 * prs[[2]])
with(newdat, plot(AGE, pred, type = "l", ylim = c(min(lo), max(up)) ))
with(newdat, lines(AGE, lo, lty = 2))
with(newdat, lines(AGE, up, lty = 2))
matplot(newdat[c("pred", "lo", "up")], type = "l", col = 1, lty = c(1, 2, 2))