eval(object$call$data) 错误:对象'.'在 gls 模型对象上 运行 Anova 时找不到

Error in eval(object$call$data) : object '.' not found when running Anova on gls model object

我已经成功地 运行 对 amelia 使用以下代码生成的推算数据集进行了 gls

mod <- impute_data %>% mutate(gls_mod = data %>% purrr::map(~nlme::gls(resp_var ~ pred_var1 + pred_var2 + pred_var2), data = .)))

现在,我想 运行 car::Anova 来测试每个预测变量的显着性。为此,我使用了:

Anova_mod <- mod  %>% mutate(gls.Anova = mod_gls %>% purrr::map(print(~car::Anova(.))))

并收到以下错误消息:Error in eval(object$call$data) : object '.' not found

但是,如果我 运行 通过 car::Anova 分别估算每个数据集,则效果很好(但我不想分别 运行 每个数据集)。如果我把之前的代码改成mod %>% mutate(gls.Anova = mod_gls %>% purrr::map(print(~anova(.))))
这也很好用。但是,我需要 car::Anova 才能获得 II 型 SS。我无法解释此错误消息。任何有关解释错误消息的帮助都会很棒。

我遇到了同样的错误(使用 mtcars,见下文)。 Error in eval(object$call$data) : object '.' not found 与通过 map 对模型的估计有关,并源于 data = .。例如,从 . 切换到 .x ,即 运行 mod <- impute_data %>% mutate(gls_mod = data %>% purrr::map(~nlme::gls(resp_var ~ pred_var1 + pred_var2 + pred_var2), data = .x))) 会将错误消息更改为 Error in eval(object$call$data) : object '.x' not found。换句话说,car::Anova 正在寻找一个名为 .data 对象,但它找不到。我很确定我几个月前遇到过这个问题,但我不记得我是如何解决它的。 ):

一个简单的解决方案是使用 "old-school" for 循环来估计模型。使用 mtcars 作为示例数据,按 cyl 拆分并使用公式 mpg ~ hp。不如 map 优雅,但它有效:

library(dplyr)

df_list <- mtcars %>% 
  split(.$cyl)

mod_gls_loop <- list()
for (i in seq_along(df_list)) {
  mod_gls_loop[[i]] <- nlme::gls(mpg ~ hp, data = df_list[[i]])  
}
Anova_gls <- mod_gls_loop %>% purrr::map(~ print(car::Anova(.)))
#> Analysis of Deviance Table (Type II tests)
#> 
#> Response: mpg
#>    Df  Chisq Pr(>Chisq)  
#> hp  1 3.3976    0.06529 .
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> Analysis of Deviance Table (Type II tests)
#> 
#> Response: mpg
#>    Df  Chisq Pr(>Chisq)
#> hp  1 0.0821     0.7745
#> Analysis of Deviance Table (Type II tests)
#> 
#> Response: mpg
#>    Df  Chisq Pr(>Chisq)
#> hp  1 1.0498     0.3055

reprex package (v0.3.0)

于 2020 年 3 月 11 日创建