我正在尝试使用 R 的 speedglm
包来估计回归模型。通常,结果与使用基本 R 的 glm
函数相同,但是当我从 data.frame 中完全删除给定的因子级别时,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
?
最佳答案
我认为 Droplevels 是关键。
str(droplevels(dat2))
与 str(dat2)
- 即使 x1==1
被删除,它仍然列在因素水平
所以 speedglm(as.formula("y ~ x1"), droplevels(dat2))
应该等于 glm("y ~ x1", dat2, family="gaussian")
关于r - 在具有已删除因子的数据帧上使用 speedglm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19696073/