我正在尝试截断数据集以比较不同的插补方法,但是出现此错误:
if 中的错误 (length(scores.temp( ==1 && scores.temp == 0( { : 需要真/假的地方缺少值
这里有一个可重现的例子:
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
标准化截肢数据分数的方式的问题。如果您查看ampute
函数的源代码,您会发现有一个嵌入式函数用于对每个缺失模式的分数求和。如果ampute
std
的参数是TRUE
,这个嵌入式分数求和函数试图使分数居中和缩放(即取标准差(。当分数矩阵中只有一行时,会发生此错误,因为如果您尝试获取一行矩阵中每一列的标准差,则只会得到 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)
创建于 2020-04-14 由 reprex 软件包 (v0.3.0(