备用标题:模型矩阵和系数集显示不同数量的变量
我正在使用 R 程序包进行一些分析。我想使用pool.compare()
比较两个模型(在 mira 对象中保存),但我不断收到以下错误:
Error in model.matrix(formula, data) %*% coefs : non-conformable arguments
二元运算符%*%
表示 R 中的矩阵乘法。
表达式model.matrix(formula, data)
生成“具有指定公式和数据的回归模型的设计矩阵”(来自模型。矩阵{stats}的 R 文档)。
在错误消息中,coefs
来自est1$qbar
,其中est1
是 mipo 对象,而qbar
元素是“完整数据估算的平均值。多重估算。“ (来自 mipo-class {mice} 的文档。
就我而言
est1$qbar
是一个长度为36的数字向量data
是一个data.frame,包含918个82变量的观察结果formula
是包含我的模型公式model.matrix(formula, data)
是尺寸为918 x 48的矩阵。如何解决/阻止此错误?
答案 0 :(得分:1)
偶尔会发生这样的问题,我在撰写问题时找到了自己的问题的答案。
我的线索是est1.qbar
中的分类变量估计只有在数据中存在该变量的级别时才存在。我的一些变量是因子变量,而不是每个级别都被表示。这引起了警告“由于缺少级别因素变量名称的对比度下降”,我愚蠢地忽略了这一点。
另一方面,查看dimnames(model.matrix.temp)[[2]]
表明模型矩阵对每个因子变量的每个级别都有一列,无论该变量的该级别是否存在于数据中。因此,尽管在估计系数方面丢失了因子水平的对比,但这些因子水平仍然出现在模型矩阵中。这意味着模型矩阵的列数多于est1.qbar
(估计系数的向量)的长度,因此矩阵乘法不起作用。
这里的答案是修复因子变量,以便没有未使用的级别。这可以使用factor()
函数完成(如here所述)。不幸的是,这需要在插补之前在原始数据集上完成。