The default behavior for glm with a factor independent variable is to use the first non-empty level as a reference category. It appears that speedglm is treating the last level as the reference category. To get comparable results, you can use relevel
in the call to glm:
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