当我指定参数“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
1条答案
按热度按时间vs91vp4v1#
如果您正在寻找实现此功能的方法,我建议您使用基于R的
by()
。在by()
函数中,您可以对数据进行子集化,构建参数列表,包括数据、公式和族,然后将带有do.call()
的参数传递给glm
。然后,您可以创建所需的系数检验,并返回模型和检验。下面是一个示例:创建于2023-09-26附带reprex v2.0.2