1

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

我正在使用R的mouse包进行一些分析。我想使用 比较两个模型(保存在mira对象中),但我不断收到以下错误:pool.compare()

Error in model.matrix(formula, data) %*% coefs : non-conformable arguments

二元运算符表示R%*%中的矩阵乘法。

该表达式model.matrix(formula, data)生成“具有指定公式和数据的类回归模型的设计矩阵”(来自model.matrix {stats}的R文档)。

在错误消息中,coefs取自est1$qbar,其中est1mipo对象,qbar元素是“完整数据估计的平均值。多重插补估计”。(来自mipo-class {mice}的文档)。

就我而言

  • est1$qbar是长度为 36 的数值向量
  • data是一个数据框,包含 82 个变量的 918 个观测值
  • formula是包含我的模型公式的类“公式”
  • model.matrix(formula, data)是一个尺寸为 918 x 48 的矩阵。

如何解决/防止此错误?

4

1 回答 1

1

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

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

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

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

于 2016-04-19T21:51:27.687 回答