r - 在具有已删除因子的数据帧上使用 speedglm

标签 r glm

我正在尝试使用 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/

相关文章:

r - 在 R 中合并两个具有常见和不常见样本的数据框

r - 如何让 tidyr 完整地使用指定列的变量?

r - glm 和相对风险 - 在 R 中复制 Stata 代码

r - 如何通过ggplot2绘制复杂的函数?

r - 为什么 R 和 SAS 中的对数二项式回归结果不同?

r - 如何在 R 中读取 Parquet 并将其转换为 R DataFrame?

r - 如何选择 `selectInput()` 作为数据框中的元素,将其粘贴在一起,用 "|"分隔并对齐?

r - 使用 ROCR 包的难点

R使用列索引号预测数据框中每一列的glm拟合

r - 基于不同的多行值集创建列