【问题标题】:Error in if (length(scores.temp) == 1 && scores.temp == 0) { : missing value where TRUE/FALSE neededif (length(scores.temp) == 1 && scores.temp == 0) { 中的错误:需要 TRUE/FALSE 的缺失值
【发布时间】:2019-08-29 14:09:44
【问题描述】:

我正在尝试截断数据集以比较不同的插补方法,但出现此错误:

if (length(scores.temp) == 1 && scores.temp == 0) { 中的错误: 需要 TRUE/FALSE 的缺失值

这是一个可重现的例子:

library(mice)
A <- matrix(c(rep(4,100),rep(5,100),rep(3,100),rep(7,100),rep(8,100),rep(9,100),rep(2,100)), nrow = 20, byrow = F)

A_miss <- ampute(A)

【问题讨论】:

  • 我忘了说'ampute'是'mice'包中的一个函数。
  • 即使使用方阵,我也会遇到同样的错误。
  • 尝试截肢(A,mech = "MCAR")。我能够生成

标签: r


【解决方案1】:

这实际上是ampute 标准化截断数据分数的方式的问题。如果您查看ampute 函数的源代码,您会发现有一个嵌入式函数用于对每个缺失模式的分数求和。如果ampute 中的参数stdTRUE,则此嵌入式分数求和函数会尝试将分数居中并缩放(即,取标准差)。当分数矩阵中只有一行时会发生错误,因为如果您尝试获取单行矩阵中每一列的标准差,您只会得到 NaN。幸运的是,有一个简单的解决方法,只需将 std 设置为 FALSE。这不应该影响截断数据的结构,因为缩放只是用于导致缺失的权重的仿射变换。

library(mice)
#> Loading required package: lattice
#> 
#> Attaching package: 'mice'
#> The following objects are masked from 'package:base':
#> 
#>     cbind, rbind
A <- matrix(c(rep(4,100),rep(5,100),rep(3,100),rep(7,100),rep(8,100),rep(9,100),rep(2,100)), nrow = 20, byrow = F)

A_miss <- ampute(A, std = FALSE)

reprex package (v0.3.0) 于 2020-04-14 创建

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多