我试图使用R的speedglm包来估计回归模型。通常,结果与使用基R的glm函数相同,但是当我从speedglm中完全删除给定的因子级别时,speedglm会提供意想不到的行为。例如,请参见下面的代码:
dat1 <- data.frame(y=rnorm(100), x1=gl(5, 20))
dat2 <- subset(dat1, x1!=1)
glm("y ~ x1", dat2, family="gaussian")
Coefficients:
(Intercept) x13 x14 x15
-0.2497 0.6268 0.3900 0.2811
speedglm(as.formula("y ~ x1"), dat2)
Coefficients:
(Intercept) x12 x13 x14 x15
0.03145 -0.28114 0.34563 0.10887 NA 在这里,这两个函数提供不同的结果,因为因子级别的x1==1已经从dat2中删除了。如果我用dat1代替,结果将是相同的。在处理像speedglm这样的数据时,是否有办法使dat2的行为像glm一样?
发布于 2013-10-31 01:00:20
我认为机器人是关键。
str(droplevels(dat2))与str(dat2) --尽管x1==1被删除了,但仍在因素级别中列出
所以speedglm(as.formula("y ~ x1"), droplevels(dat2))应该等于glm("y ~ x1", dat2, family="gaussian")
发布于 2013-10-31 02:27:41
具有因子自变量的glm的默认行为是使用第一个非空级别作为引用类别。似乎航速是将最后一级作为参考类别。要获得类似的结果,可以在调用glm时使用relevel:
set.seed(2)
dat1 <- data.frame(y=rnorm(100), x1=gl(5, 20))
dat2 <- subset(dat1, x1!=1)
glm(y ~ relevel(x1,"5"), dat2, family="gaussian")
Coefficients:
(Intercept) relevel(x1, "5")2 relevel(x1, "5")3 relevel(x1, "5")4
-0.27163 0.27135 0.36688 0.09934
speedglm(as.formula("y ~ x1"), dat2)
Coefficients:
(Intercept) x12 x13 x14 x15
-0.27163 0.27135 0.36688 0.09934 NA https://stackoverflow.com/questions/19696073
复制相似问题