predict.glm() 中的偏移量,假设拟合的泊松模型已经考虑了偏移量 - R

问题描述 投票:0回答:1

我想在新数据上预测拟合的泊松glm,因为它是使用offset=log(Exposure)拟合的,但我对predict.glm()中包含术语“offset”感到困惑。我不明白是否有必要包含它,如果我想包含它,我应该如何做到与拟合中使用的偏移量具有相同的影响?

为了消除我的疑虑,我从头开始创建了一个数据集,并决定比较三种可能的方法:

  • 预测(glm.model, data=newdata, type="response", offset=log(曝光));
  • 预测(glm.model,data=newdata,type=“response”,offset=曝光);
  • 预测(glm.model,数据=newdata,类型=“响应”);

然而,在比较结果时,我惊讶地发现所有三种方法都得出相同的预测。结论:predict.glm() 中的偏移项被忽略?我仍然问这个,因为我是 R 的新手,我检查它的程序可能是错误的。

此外,即使可能已经发布了类似的问题,但答案很少且与此结果不一致。

set.seed(1)
exp<-c(1:100)/100
dummy<-rep(c(0,1), each=50)
y<-floor(rpois(100,dummy*exp*10)) #count data
DTtest<-as.data.frame(exp)
DTtest$D<-dummy
DTtest$y<-y
gtest<-glm(y~D, offset=log(exp), family=poisson(link="log"), data=DTtest, trace=TRUE)
DTtest1<-predict(gtest, newdata=DTtest, type="response", offset=log(exp)) #predict1
DTtest2<-predict(gtest, newdata=DTtest, type="response", offset=exp) #predict2
DTtest3<-predict(gtest, newdata=DTtest, type="response") #predict3
sum(DTtest1==DTtest2)
sum(DTtest2==DTtest3)
sum(DTtest1==DTtest3)

我得到的总和的结果是:100,100,100,这等于用于预测的数据的长度(我也使用DTtest作为新数据)。这意味着这 3 种方法之间的所有预测都具有相同的值。

我原以为这些值会因预测()中显式偏移量的不同影响而有所不同,但结果却不然。

r offset glm predict poisson
1个回答
0
投票

是的,

offset
被忽略。

?predict.glm
的帮助包只说:

...
:进一步传入或传出其他方法的参数。

这不是很有帮助。但是,如果我们查看

predict.glm
的代码,我们不会看到
...
在任何地方使用(它将被传递给另一个函数)。 (如果您坚持基于代码的解决方案,我们可以这样搜索:

any(grepl("...", deparse(body(stats:::predict.glm)), fixed = TRUE))
## FALSE

如果您想使用其他偏移值进行预测,您可以设置一个具有不同

newdata
值的
exp
数据框。 (顺便说一句,使用
exp
作为变量名可能是一个坏主意,因为它与内置指数函数的名称相同......大多数时候你可以摆脱这个,但有时它会导致令人困惑的错误。)

© www.soinside.com 2019 - 2024. All rights reserved.