r - 模型矩阵不兼容 - R 中 Biglm 包中的更新错误

标签 r bigdata regression lm

我正在逐块运行大型数据集,并在使用 biglm 函数时更新线性模型列表。当特定块不包含我在线性模型中的所有因素时会出现问题,并且出现此错误:

Error in update.biglm(model, new) : model matrices incompatible

update.biglm 的描述提到所有块的因子水平必须相同。我可能会想出一种解决方法来避免这种情况,但必须有更好的方法。 This pdf ,在“biglm”页面上,提到“因子必须具有完整的级别
指定(不一定存在于数据块中)”。所以我认为有一些方法可以指定所有可能的级别,以便我可以在不存在所有因素的情况下更新模型,但我不知道如何去做.

这是一段示例代码来说明我的问题:
df = data.frame(a = rnorm(12),b = as.factor(rep(1:4,each = 3)),c = rep(0:1,6))
model = biglm(a~b+c,data = df

df.new = data.frame(a = rnorm(6),b = as.factor(rep(1:2,each = 3)),c =rep(0:1, 3))
model.new = update(model,df.new)

感谢您的任何建议。

最佳答案

我也遇到了这个问题。在将大数据框中的变量分成块之前,是否将它们指定为因子?另外,数据集是否格式化为数据框?

large_df <- as.data.frame(large_data_set) # just to make sure it's a df.
large_df$factor.vars <- as.factor(large_df$factor.vars)

如果是这种情况,那么即使在将数据框分成块之后,所有因子水平也应保留在因子变量中。这将确保 biglm 从第一次调用创建正确的设计矩阵,并且所有后续更新都将兼容。

如果您从一开始就有不同的数据框(如您在示例中说明的那样),也许您应该在分解成块之前将它们合并为一个。继续你的例子:
df.large <- rbind(df,df.new)
chunk1 <- df.large[1:12,]
chunk2 <- df.large[13:18,]

model <- biglm(a~b+c,data = chunk1)
model.new <- update(model,chunk2)   # this is now compatible  

关于r - 模型矩阵不兼容 - R 中 Biglm 包中的更新错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29239727/

相关文章:

hadoop - Pig/Hive中如何根据关键子集进行聚合?

创建优化的总和减少

hadoop - 如果添加到 zookeeper 的 master 之一关闭,则事件 master 不接受新申请

python - 'PolynomialFeatures' 对象没有属性 'predict'

python - XGboost - 增加训练错误 "mae"

r - 如何在 R 的 lm() 中正确选择因变量和控件?

从 R 中的序列中随机提取多个连续项目

r - 在不损失精度的情况下将 R 中的 float 转换为字符串

r - 如何使用plot.mcmc向后验密度图添加垂直线?

r - 如何使用 geom_col 在同一个 ggplot 中并排绘制两个变量?