【问题标题】:pool.compare generates non-comformable arguments errorpool.compare 生成不一致的参数错误
【发布时间】:2016-04-19 21:51:27
【问题描述】:

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

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

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

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

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

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

就我而言

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

如何解决/防止此错误?

【问题讨论】:

  • 这更多的是关于 R 的工作原理,而不是统计数据本身。它可能属于Stack Overflow 而不是这里。我们可以将其迁移到那里。
  • 您认为我应该将问题的标题更改为更面向代码吗?
  • 很难说;这取决于你。

标签: r r-mice


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-10
    相关资源
    最近更新 更多