Невозможно объединить средние значения у мышей, используя метод R: no glance класса объекта numeric - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь вписать среднее значение непрерывной переменной, используя пакет mice в R. Я могу сгенерировать m вмененных средних значений, но когда я пытаюсь агрегировать их, используя функцию pool (), я получаю сообщение об ошибке: " Ошибка: нет метода взгляда для объектов класса Numri c ".

Мне удалось использовать функцию пула при агрегировании результатов модели линейной регрессии, но не для средних / медианных значений или количества категориальных данных.

Я попробовал набор данных радужной оболочки, а также свои собственные данные. Я буду использовать данные радужной оболочки для иллюстрации проблемы

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))

Сводная команда (pool ()) выдает сообщение об ошибке: «Ошибка: нет метода взгляда для объектов класса Numberri c».

Я также пробовал без функции сводки, но она тоже не работает, т.е.

pool(mean_sepal_width)

Далее я попытался преобразовать объект mean_sepal_width (который имеет класс mira и matrix) к вектору, а затем найти среднее и срединное значение (не совсем то же самое, что правило Рубина для вменения, но учитывая сходство вмененных значений в моем наборе данных, а также пример радужной оболочки, показанный здесь, это будет приемлемо для целей этого проекта ). К сожалению, это тоже не работает. Например:

mean(as.vector(mean_sepal_width))

Вышеприведенное также дает сообщение об ошибке: «Предупреждающее сообщение: в mean.default (as.vector (mean_sepal_width)): аргумент не является цифрой c или логическим: возвращение NA»

Существует аналогичный вопрос о стекопереходе для теста imer: pool.parts мышей выдает «Ошибка: нет метода взгляда для объектов вызова класса» для моделей lmerTest , но предлагаемый ответ не дает работать для меня тоже.

Возможно, это просто невозможно сделать на мышах?

Я был бы очень признателен за любые советы о том, как решить эту проблему. Большое спасибо заранее.

1 Ответ

0 голосов
/ 10 февраля 2020

Для вашего второго метода, взяв среднее значение вектора, вы можете попробовать 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

Создан в 2020-02-10 пакетом Представить ( v0.3.0)

...