偏移不适用于二项式GLM

时间:2012-11-05 18:15:18

标签: r glm

我正在尝试使用glm( family='binomial')进行逻辑回归。

以下是模型:

model<-glm(f_ocur~altitud+UTM_X+UTM_Y+j_sin+j_cos+temp_res+pp, 
           offset=(log(1/off)), data=mydata, family='binomial')

mydata有76820条观察结果。 响应变量(f_ocur)为0-1 此数据是较大数据集的样本,因此设置偏移量的想法是考虑到此处使用的数据代表要分析的实际数据的样本。

由于某种原因,偏移无效。当我运行这个模型时,我得到一个结果,但是当我运行相同的模型但没有偏移时,我得到与前一个模型完全相同的结果。我期待一个不同的结果,但没有区别。

我做错了吗?偏移应该与线性预测因子一致吗?像这样:

model <- glm(f_ocur~altitud+UTM_X+UTM_Y+j_sin+j_cos+temp_res+pp+offset(log(1/off)), 
             data=mydata, family='binomial')

模型准备好后,我想将它与新数据一起使用。新数据将是验证此模型的数据,此数据具有相同的列。我的想法是使用:

validate <- predict(model, newdata=data2, type='response')

这就是我的问题,预测函数是否考虑了用于创建模型的偏移量?如果没有,我该怎么做才能获得新数据的正确概率?

2 个答案:

答案 0 :(得分:4)

我认为对数偏移与Poisson系列一起使用。如果是二项式,则不应使用日志。查看链接https://stats.stackexchange.com/questions/25415/using-offset-in-binomial-model-to-account-for-increased-numbers-of-patients

答案 1 :(得分:2)

看看你的问题,我猜你的主要问题是为什么抵消不会产生任何影响。

从@Ben Bolker Rpub(https://rpubs.com/bbolker/logregexp)窃取一句话:&#34;生态学(以及其他地方)非常常见的情况是生存/二元结果模型,其中个体(每次测量一次)不同在他们的曝光。解决此问题的经典方法是使用补充的对数日志链接。&#34;

所以在此基础上我会建议您正在寻找的代码:

model <- glm(f_ocur~altitud+UTM_X+UTM_Y+j_sin+j_cos+temp_res+pp, 
       data=mydata, family = binomial(link = cloglog),offset=log(1/off))

下面是一个小例子,它表明不仅有和没有偏移的结果不同,但使用AICc模型选择,更好的模型排名更高,尽管&#34; time&#34;与#34; site&#34;混淆。

library(AICcmodavg)

set.seed(1)
time <- c(rep(1,50),rep(2,50))
site <- c(rep("site 1",50),rep("site 2",50))
surv <- c(rbinom(50,1,prob=0.7),rbinom(50,1,prob=0.7^2))

my.data <- data.frame(surv, site, time)

# setup AICc model list
Cand.models <- list( )

Cand.models[[1]] <- glm(surv ~ 1, data=my.data, family = binomial(link = cloglog), offset=log(1/time))
Cand.models[[2]] <- glm(surv ~ 1, data=my.data, family = binomial(link = cloglog))
Cand.models[[3]] <- glm(surv ~ site , data=my.data, family = binomial(link = cloglog), offset=log(1/time))

# create a vector of names to trace back models in set
Modnames <- paste("mod", 1:length(Cand.models), sep = " ")

# generate AICc table
aictab(cand.set = Cand.models, modnames = Modnames, sort = TRUE)