我正在尝试对数据集进行剖析,以便比较不同的插补方法,但出现此错误:
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)
答案 0 :(得分:1)
这实际上是ampute
标准化得分数据的方式的问题。如果看一下ampute
函数的源代码,您会发现有一个嵌入式函数用来对每个缺失模式的分数求和。如果std
中的参数ampute
为TRUE
,则此嵌入式分数求和函数将尝试对分数进行居中和 scale (即,采用标准偏差)。当分数矩阵中只有一行时,会发生该错误,因为如果您尝试在一行矩阵中获取每一列的标准偏差,那么您只会得到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创建