根据分组因素对数据进行分区后,有一个R函数(通过nlme软件包)lmList包含一个具有公共模型的lm对象列表。这有很多模型通常具有的有用方法,例如预测。 glm是否有相同的功能?
我确实看到glmlist,但与lmlist不同,它似乎更像是一个花哨的容器,没有像预测那样的方法。
即。是否有相当于glm的以下代码?
library(nlme)
fit <- lmList(disp ~ hp | vs, mtcars)
predict(fit,mtcars)
答案 0 :(得分:2)
lmList
包中的lme4
版本也可以处理GLM。它可能尚未针对此用例进行广泛测试,因此请小心/报告您在https://github.com/lme4/lme4/issues/找到的任何问题...
e.g。
library(lme4)
fit <- lmList(round(disp) ~ hp | vs, family=poisson, mtcars)
predict(fit,mtcars)
给出线性预测器标度上的预测值。令人困惑的是,predict(fit)
给出了响应等级的拟合值,即
all.equal(c(predict(fit)),c(exp(predict(fit,mtcars))))
是TRUE
(在这种情况下,只要模型使用日志链接)。 predict(fit,mtcars,type="response")
默默地忽略type
规范...
答案 1 :(得分:1)
引用vcdExtra
的文档,似乎没有一个:
glmlist创建一个glmlist对象,其中包含一个带有名称的glm对象列表。 [...]
目的是提供对象类以便于模型比较,提取,总结和 绘制模型组件等,可能使用lapply或类似。
但是,您可以这样做,并根据lapply
定义您自己的预测方法:
library(vcdExtra)
# simulate data
x <- rnorm(100)
y <- as.numeric(rnorm(100)>0)
fit <- glm(y~x, family=binomial(link=logit))
gl <- glmlist(fit,fit)
# define method
predict.glmlist <- function(object, ...){
expr <- substitute(predict.glm(obj,...))
lapply(object, function(obj) eval(expr))
}
# use method
predict(gl)
predict(gl, type="response")