在做回归分析时,我注意到了一些非常奇怪的事情.基本上,当我独立地估计一个回归和purrr::map函数中的同一个回归并提取元素时,我得到这两个对象是不相同的.我的问题是为什么会这样,或者是否应该这样.

我问这个问题的主要原因是,有些软件包在从purrr::map个估算中提取信息时遇到问题,但在我单独估算时却没有.下面是一个小例子,其中包含一些无意义的回归:

library(fixest)
library(tidyverse)

## creating a formula for a regression example
formula <- as.formula(paste0(
  "mpg", "~",
  paste("cyl", collapse = "+"),
  paste("|"), paste(c("gear", "carb"), collapse = "+")))

## estimating the regression and saying
mtcars_formula <- feols(formula, cluster = "gear", data = mtcars)

## estimating the same regression twice, but using map
mtcars_list_map <- map(list("gear", "gear"), ~ feols(formula, cluster = ., data = mtcars))

## extracting the first element of the list
is_identical_1 <- mtcars_list_map %>% 
  pluck(1)


## THESE ARE NOT IDENTIAL
identical(mtcars_formula, is_identical_1)

我也用fixest个包裹来标记这个,只是因为这可能是特定于包裹的...

推荐答案

这些差异很大程度上归结于环境的差异.例如,这些列表的第三个元素(即mtcars_formulais_identical_1)是公式mpg~cyl(事实上mtcars_formula[[3]] == is_identical_1[[3]]将返回TRUE).但是,您将看到这些元素与不同的环境相关联.

> mtcars_formula[[3]] == is_identical_1[[3]]
[1] TRUE
> environment(mtcars_formula[[3]])
<environment: 0x560a2490ef40>
> environment(is_identical_1[[3]])
<environment: 0x560a2554d810>

您是否认为这些差异"微不足道"取决于您的用例,但您可以这样判断差异:

differences =list()
for(i in 1:length(mtcars_formula)) {
  if(!identical(mtcars_formula[[i]], is_identical_1[[i]])) {
    differences[[names(mtcars_formula)[i]]] = list(mtcars_formula[[i]], is_identical_1[[i]])
  }
}

一个确实不同的元素是报告的call(第四个元素)

> mtcars_formula[[4]] == is_identical_1[[4]]
[1] FALSE
> c(mtcars_formula[[4]], is_identical_1[[4]])
[[1]]
feols(fml = formula, data = mtcars, cluster = "gear")

[[2]]
feols(fml = formula, data = mtcars, cluster = .)

这可能与您在上面的 comments 中报告的错误有关,与fwildclusterboot::boottest()有关.注意,来自使用map()创建的对象的调用表示cluster=.,而不是'cluster="gear".

解决这个问题的一种方法是这样做:

mtcars_list_map <- map(list("gear", "gear"), function(x) {
  # create the model
  model = feols(formula, cluster = x, data = mtcars)
  # manipulate the call object
  model$call$cluster=x
  # return the model
  model
})


R相关问答推荐

在R中列表的结尾添加数字载体

如何对数据集进行逆向工程?

如何自定义Shapviz图?

如何在xyplot中 for each 面板打印R^2

我不能在docker中加载sf

错误:非常长的R行中出现意外符号

将数字转换为分钟和秒

如何识别倒排的行并在R中删除它们?

您是否可以使用facet_rap设置一个较低的限制来对ggmap上的比例中断进行zoom ?

在列表中排列R数据框中的列顺序

从R中发出的咕噜声中的BUG?

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

按组和连续id计算日期差

如何在条形图中的x和填充变量中包含多个响应变量?

我正在try 创建一个接近cos(X)的值的While循环,以便它在-或+1-E10范围内

如何更改包中函数中的参数?

如何在矩阵图中按标准对数据进行分组以绘制矩阵

对一个数据帧中另一个数据帧中的值进行计数

如何在类应用函数中访问函数本身