在检查因子水平和缺失数据后,`ggeffect` 或 `Effect` 无法估计模型中的边际效应
`ggeffect` or `Effect`cannot estimate marginal effects in model after checking factor levels and missing data
使用 haven
从包含标签的数据集中导入的数据,我无法使用包 ggeffects
中的 ggeffect()
或包 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]])
因为未找到某些预测对象。
我还可以检查什么数据来计算边际效应?
阻碍使用 effects::Effect()
(或使用相同函数的 ggpredict::ggeffect()
)计算边际效应的另一个原因是数据中存在标记变量,即 class haven_labelled
。在使用 haven
库导入外部格式(例如 SPSS、Stata、SAS)的数据集时,这种 class 变量很常见。
在下面的例子中很清楚问题是什么时候出现的:
# 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)
并将持有此 class 的人更改为相关的人。检查 class 的一种方法例如,您可以使用以下代码检查列的 classes:
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"
使用 haven
从包含标签的数据集中导入的数据,我无法使用包 ggeffects
中的 ggeffect()
或包 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]])
因为未找到某些预测对象。
我还可以检查什么数据来计算边际效应?
阻碍使用 effects::Effect()
(或使用相同函数的 ggpredict::ggeffect()
)计算边际效应的另一个原因是数据中存在标记变量,即 class haven_labelled
。在使用 haven
库导入外部格式(例如 SPSS、Stata、SAS)的数据集时,这种 class 变量很常见。
在下面的例子中很清楚问题是什么时候出现的:
# 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)
并将持有此 class 的人更改为相关的人。检查 class 的一种方法例如,您可以使用以下代码检查列的 classes:
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"