在R语言的LFE包中,关于带聚类标准误的p值的问题

5
我正在使用lfe包进行固定效应和聚类标准误的模型估计。结果显示我有一个非常大的t值(23.317),但只有相对较小的p值(0.0273)。这似乎与我使用固定效应的投影有关。当我手动估计固定效应作为控制变量时,我的p值太小无法报告<2e-16。
考虑以下工作示例(如果比严格要求更复杂,很抱歉,我试图靠近我的应用程序):我只是对50个时间周期内的10个时间序列进行汇总面板估计,并假设时间序列中存在两个簇。
library(data.table)
library(lfe)


x <- rnorm(50, mean = 1, sd = 1)
common_shock <- rnorm(50, mean = 0, sd = 1)


y1 = 0.5 + 5*x + rnorm(50, mean = 0, sd = 2) + common_shock
y2 = 0.5 + 5*x + rnorm(50, mean = 0, sd = 2) + common_shock
y3 = 0.5 + 5*x + rnorm(50, mean = 0, sd = 2) + common_shock
y4 = 0.5+ 5*x + rnorm(50, mean = 0, sd = 2) + common_shock
y5 = 0.5+ 5*x + rnorm(50, mean = 0, sd = 2) + common_shock
y6 = x + rnorm(50, mean = 0, sd = 2)
y7 = x + rnorm(50, mean = 0, sd = 2)
y8 = x + rnorm(50, mean = 0, sd = 2)
y9 = x + rnorm(50, mean = 0, sd = 2)

y10 = x + rnorm(50, mean = 0, sd = 2)

DT <- data.table(periods = 1:50, y1, y2, y3, y4, y5, y6, y7, y8, y9, y10)
Controls <- data.table(periods = 1:50, x)
indicators <- data.table(y_label = paste0("y", 1:10),
                         indicator = c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0))

DT <- melt(DT, id.vars= c("periods"))

DT <- merge(DT, Controls, by="periods", all = TRUE)
DT <- merge(DT, indicators, by.x="variable", by.y="y_label", all = TRUE)


results <- felm(as.formula("value ~ -1 + indicator + x:indicator  | periods | 0 | periods + indicator"), data = DT)
results2 <- felm(as.formula("value ~ -1 + indicator + x:indicator + as.factor(periods) | 0 | 0 | periods + indicator"), data = DT)
summary(results)
summary(results2)

第一个结果给了我:

指标:x 3.8625 0.1657 23.317 0.0273 *

第二个结果给了我:

指标:x 3.86252 0.20133 19.185 < 2e-16 ***

因此,这一定与固定效应的投影有关,但这种差异是如此之大,以至于我想更多地了解它。是否有人知道这里的潜在问题?

1个回答

3

您正在尝试对二元变量"indicator"进行集群调整标准误差。

table(DT$indicator)
#   0   1 
# 250 250 

换句话说,您只有两个簇。您的第一个“结果”似乎是“正确的”,因为它们正确地给出了1作为自由度。
(df1 <- results$df)
# [1] 1

"results2"具有448个自由度。

(df2 <- results2$df)
# [1] 448

当我们每手计算p值时,我们可以使用一个自由度(因为只有两个簇),复制您的第一个结果,使用448个自由度来复制您的第二个结果。
PV <- function(x, df) 2 * pt(-abs(x), df=df)

r1 <- summary(results)$coe
t1 <- r1[grep("indicator:x", rownames(r1)), "t value"]
PV(t1, df1)
# [1] 0.02937402

r2 <- summary(results2)$coe
t2 <- r2[grep("indicator:x", rownames(r2)), "t value"]
PV(t2, df2)
# [1] 2.371641e-55

看起来 felm 无法处理一个 factor 变量作为固定效应,因为它的标准符号是 y ~ x1 + x2 | f1 + f2 | (Q|W ~ x3+x4) | clu1 + clu2

注意:即使将您的第一个结果调整到自由度,也不是“正确”的。仅有两个聚类对我来说没有多大意义,也许您需要重新考虑您的模型。无论如何,如果您的聚类少于~50个,您应该使用类似于野外聚类引导方法(参见Cameron and Miller, 2015)的方法。


数据:

我使用了您的数据,并使用了 set.seed(42)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接