我正在逐个块地处理大型数据集,并在使用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/

10-12 17:01