`ggeffect` или` Effect` не могут оценить предельные эффекты в модели после проверки уровней факторов и пропущенных данных - PullRequest
0 голосов
/ 20 апреля 2020

Используя данные, импортированные с помощью haven из набора данных, который включает метки, я не могу получить предельные эффекты, используя ggeffect() из пакета ggeffects или Effect() из пакета effects

При использовании В этих функциях выдается сообщение об ошибке, несмотря на проверку количества уровней и пропущенных случаев в предикторах модели. В этом посте объясняется, как отлаживать эти последние случаи, избегая пустых уровней факторов или пропусков, которые будут препятствовать получению предельных эффектов.

Хотя, при отсутствии этих проблем, я все равно получаю сообщение об ошибке от ggeffect(): Can't compute marginal effects, 'effects::Effect()' returned an error.; или в effects::Effect(): Error in eval(parse(text = x, keep.source = FALSE)[[1L]]), потому что некоторый объект-предиктор не был найден.

Что еще я могу проверить в своих данных, чтобы вычислить предельные эффекты?

1 Ответ

0 голосов
/ 20 апреля 2020

Другая причина, которая будет препятствовать вычислению предельных эффектов с effects::Effect() (или с ggpredict::ggeffect(), который использует эту же функцию), - это наличие помеченных переменных в данных, то есть тех столбцов класса haven_labelled. Этот класс переменных является общим при импорте наборов данных в сторонних форматах (например, SPSS, Stata, SAS) с библиотекой haven.

В следующем примере ясно, когда возникает проблема:

# Load libraries
library(ggeffects)
library(haven)

# Fit model with no labelled variables
ex1 <- lm(mpg ~ cyl,
               data = mtcars)
ggeffect(ex1, term = c("cyl"))
#> 
#> # Predicted values of mpg
#> # x = cyl
#> 
#> x | Predicted |   SE |         95% CI
#> -------------------------------------
#> 4 |     26.38 | 0.90 | [24.53, 28.23]
#> 6 |     20.63 | 0.57 | [19.47, 21.79]
#> 8 |     14.88 | 0.81 | [13.22, 16.54]

# Label one value of variable cyl
mtcars$cyl2 <- labelled(mtcars$cyl, labels = c("6" = 6))

# Fit model with the value-labelled variable cyl2
ex2 <- lm(mpg ~ cyl2,
               data = mtcars)
ggeffect(ex2, term = c("cyl2"))
#> Can't compute marginal effects, 'effects::Effect()' returned an error.
#> 
#> Reason: non-conformable arguments
#> You may try 'ggpredict()' or 'ggemmeans()'.
#> NULL
effects::Effect(ex2, "cyl2")
#> Error in eval(parse(text = x, keep.source = FALSE)[[1L]]): object 'cyl2' not found

Чтобы проверить, есть ли в ваших данных столбцы типа haven_labelled, вы можете использовать str(data) и изменить тех, кто содержит этот класс, на соответствующий. Один из способов проверить класс вашего Например, вы можете проверить классы столбцов с помощью этого кода:

library(haven)
mtcars$cyl2 <- labelled(mtcars$cyl, labels = c("6" = 6))
str(mtcars)
#> 'data.frame':    32 obs. of  12 variables:
#>  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
#>  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
#>  $ disp: num  160 160 108 258 360 ...
#>  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
#>  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
#>  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
#>  $ qsec: num  16.5 17 18.6 19.4 17 ...
#>  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
#>  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
#>  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
#>  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...
#>  $ cyl2: 'haven_labelled' num  6 6 4 6 8 6 8 4 4 6 ...
#>   ..- attr(*, "labels")= Named num 6
#>   .. ..- attr(*, "names")= chr "6"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...