pool.compare生成不可兼容的参数错误

时间:2016-04-19 21:51:28

标签: r r-mice

备用标题:模型矩阵和系数集显示不同数量的变量

我正在使用 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的矩阵。

如何解决/阻止此错误?

1 个答案:

答案 0 :(得分:1)

偶尔会发生这样的问题,我在撰写问题时找到了自己的问题的答案。

我的线索是est1.qbar中的分类变量估计只有在数据中存在该变量的级别时才存在。我的一些变量是因子变量,而不是每个级别都被表示。这引起了警告“由于缺少级别因素变量名称的对比度下降”,我愚蠢地忽略了这一点。

另一方面,查看dimnames(model.matrix.temp)[[2]]表明模型矩阵对每个因子变量的每个级别都有一列,无论该变量的该级别是否存在于数据中。因此,尽管在估计系数方面丢失了因子水平的对比,但这些因子水平仍然出现在模型矩阵中。这意味着模型矩阵的列数多于est1.qbar(估计系数的向量)的长度,因此矩阵乘法不起作用。

这里的答案是修复因子变量,以便没有未使用的级别。这可以使用factor()函数完成(如here所述)。不幸的是,这需要在插补之前在原始数据集上完成。