无法使用 R 汇总小鼠的平均值:对象 class 数字的无扫视方法

Unable to pool mean values in mice using R: no glance method of object class numeric

我正在尝试使用 R 中的 mice 包来估算连续变量的平均值。我能够生成 m 个估算的平均值,但是当我尝试使用 pool() 函数聚合这些值时,我收到一条错误消息:"Error: No glance method for objects of class numeric"。

我在聚合线性回归模型的结果时能够使用池函数,但不能用于 mean/median 值或分类数据计数。

我试过 iris 数据集和我自己的数据。我将使用虹膜数据来说明问题

library(missForest) # for the prodNA function
library(mice)       # for the imputations

#Creating dataset with missing values (NAs)
iris.mis <- prodNA(iris, noNA = 0.1)
head(iris.mis)

Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2           NA         3.0           NA         0.2    <NA>
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5           NA         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

#Imputation
imputed_data <- mice(data = iris.mis, m = 5, method = "pmm", maxit = 50, seed = 500)
mean_sepal_width <- with(data = imputed_data, expr = mean(Sepal.Width))
print(mean_sepal_width)
summary(pool(mean_sepal_width))

summary(pool()) 命令给出错误信息:"Error: No glance method for objects of class numeric".

我也尝试过不使用汇总功能,但这也不起作用,即

pool(mean_sepal_width)

此外,我尝试将 mean_sepal_width 对象(属于 class mira 和矩阵)转换为向量,然后找到平均值和中值(与 Rubin 的不完全相同插补规则,但考虑到我的数据集中插补值的相似性以及此处显示的鸢尾花示例,这对于本项目的目的来说是可以接受的)。不幸的是,这也不起作用。例如:

mean(as.vector(mean_sepal_width))

上面还给出了错误信息:“警告信息: 在 mean.default(as.vector(mean_sepal_width)) 中: 参数不是数字或逻辑:返回 NA"

在Whosebug上有一个类似的imer测试问题: 但建议的答案对我也不起作用。

也许在老鼠身上做不到这一点?

对于如何解决此问题的任何建议,我将不胜感激。非常感谢。

对于你的第二种方法,取一个向量的平均值,你可以试试mean(unlist(mean_sepal_width$analyses))。我不确定使用 pool 的第一种方法是否可以在不拟合模型的情况下工作。

library(pacman)
p_load(mice)
p_load(missForest)

set.seed(12345)

#Creating dataset with missing values (NAs)
iris.mis <- prodNA(iris, noNA = 0.1)
head(iris.mis)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1          5.1         3.5          1.4          NA  setosa
#> 2          4.9         3.0          1.4         0.2  setosa
#> 3          4.7         3.2          1.3         0.2  setosa
#> 4          4.6          NA          1.5         0.2  setosa
#> 5          5.0         3.6          1.4         0.2    <NA>
#> 6          5.4         3.9          1.7         0.4  setosa

#Imputation
imputed_data <- mice(data = iris.mis, m = 5, method = "pmm", maxit = 50, seed = 500)

mean_sepal_width <- with(data = imputed_data, expr = mean(Sepal.Width))

print(mean_sepal_width)
#> call :
#> with.mids(data = imputed_data, expr = mean(Sepal.Width))
#> 
#> call1 :
#> mice(data = iris.mis, m = 5, method = "pmm", maxit = 50, seed = 500)
#> 
#> nmis :
#> Sepal.Length  Sepal.Width Petal.Length  Petal.Width      Species 
#>           20            8            9           21           17 
#> 
#> analyses :
#> [[1]]
#> [1] 3.059333
#> 
#> [[2]]
#> [1] 3.050667
#> 
#> [[3]]
#> [1] 3.06
#> 
#> [[4]]
#> [1] 3.065333
#> 
#> [[5]]
#> [1] 3.052

# look at the structure of the mean_sepal_width object
str(mean_sepal_width)
#> List of 4
#>  $ call    : language with.mids(data = imputed_data, expr = mean(Sepal.Width))
#>  $ call1   : language mice(data = iris.mis, m = 5, method = "pmm", maxit = 50, seed = 500)
#>  $ nmis    : Named int [1:5] 20 8 9 21 17
#>   ..- attr(*, "names")= chr [1:5] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" ...
#>  $ analyses:List of 5
#>   ..$ : num 3.06
#>   ..$ : num 3.05
#>   ..$ : num 3.06
#>   ..$ : num 3.07
#>   ..$ : num 3.05
#>  - attr(*, "class")= chr [1:2] "mira" "matrix"

# the estimates are held in "analyses", in a list, so take the mean of these
mean(unlist(mean_sepal_width$analyses))
#> [1] 3.057467

reprex package (v0.3.0)

于 2020 年 2 月 10 日创建