在lmtest::coeftest上使用purrr::map,并使用cluster参数调用带有“~”符号的变量

ehxuflar  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(85)

当我指定参数“cluster”时,我无法使用map(purr包)对coeftest函数(lmtest包)进行迭代。此参数使用“~”符号调用变量来估计聚集的标准误差。我得到的错误是:

eval(model$call$data,envir)出错:未找到对象“.”。

错误似乎是map无法在提供的map对象中“找到”变量。您是否介意简要解释一下如何在purrr::map迭代中使用~符号正确地调用变量?

**最小可重复的示例。**这里我展示了在没有迭代的情况下一切都很好,以及在Map迭代时如何失败。

data("mtcars")
library(tidyverse)
library(purrr)
library(lmtest)
library(sandwich)

form <- formula(vs ~ hp + cyl)

m1 <- glm(
  formula = form,
  family=binomial(link="logit"),
  data = mtcars)

# all works well here:

coeftest(m1,
         vcov = vcovCL,
         type = "HC0",
         cluster = ~cyl)

# z test of coefficients:
#   
#                 Estimate  Std.Error z value  Pr(>|z|)    
#   (Intercept)  9.0890128  1.7544879  5.1804 2.214e-07 ***
#   hp          -0.0413522  0.0081069 -5.1009 3.381e-07 ***
#   cyl         -0.6895012  0.1632085 -4.2247 2.393e-05 ***
#   ---
#   Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

# failed iteration with purrr::map

data <- mtcars %>% 
  split(.$am)

m2 <- map(
  data,
  ~ glm(
    formula = form,
    family=binomial(link="logit"),
    data = .))

map(m2,
    ~ coeftest(.,
               vcov = vcovCL,
               type = "HC0",
               cluster = ~cyl))

Error in eval(model$call$data, envir) : object '.' not found
vs91vp4v

vs91vp4v1#

如果您正在寻找实现此功能的方法,我建议您使用基于R的by()。在by()函数中,您可以对数据进行子集化,构建参数列表,包括数据、公式和族,然后将带有do.call()的参数传递给glm。然后,您可以创建所需的系数检验,并返回模型和检验。下面是一个示例:

data("mtcars")
library(lmtest)
library(sandwich)

form <- formula(vs ~ hp + cyl)

out <- by(mtcars, list(mtcars$am), \(x){
  args <- list(formula = form, 
       family = binomial(link="logit"), 
       data = x)
  m <- do.call(glm, args)
  tst <- coeftest(m, vcov=vcovCL, type="HC0", cluster=~cyl)
  list(model = m, test = tst)
})
lapply(out, "[", "test")
#> $`0`
#> $`0`$test
#> 
#> z test of coefficients:
#> 
#>                Estimate  Std. Error    z value  Pr(>|z|)    
#> (Intercept)  1.7018e+02  6.1237e+00     27.791 < 2.2e-16 ***
#> hp          -1.6003e-02  2.0194e-07 -79247.830 < 2.2e-16 ***
#> cyl         -2.4043e+01  8.6601e-01    -27.762 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> 
#> 
#> $`1`
#> $`1`$test
#> 
#> z test of coefficients:
#> 
#>                Estimate  Std. Error     z value  Pr(>|z|)    
#> (Intercept)  4.4251e+01  2.4495e+00  1.8066e+01 < 2.2e-16 ***
#> hp          -2.3612e-02  6.1130e-16 -3.8625e+13 < 2.2e-16 ***
#> cyl         -1.0070e+01  6.1237e-01 -1.6444e+01 < 2.2e-16 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

创建于2023-09-26附带reprex v2.0.2

相关问题