2

我已经使用循环函数执行了多个池化回归,并将回归输出存储在列表中(myregression)。我现在想做的是在我所有的回归(即 myregression 列表)上有效地执行 lmtest 包中的 coeftest 函数,以调整标准误差和 t 统计量。最后,我想获得系数、标准误差和 t 值的平均值。

这是我到目前为止提出的:

library(plm)
data("Grunfeld", package="plm")

# Store each subset regression in myregression
myregression <- list()

count <- 1

# Regression on six-year subsets of Grunfeld
for(t in 1940:1950){

  myregression[[count]] <- plm(inv ~ value + capital, 
                              subset(Grunfeld, year<=t & year>=t-5),
                              index=c("firm","year"))

# Name each regression based on the year range included in the data subset
names(myregression)[[count]] = paste0("Year_",t)
count <- count+1
}

这是我的问题出现的地方:虽然我能够对列表的各个组件执行 coeftest 函数,但我无法相应地编写 lapply 函数。

## Apply coeftest function to all plm-objects
library(lmtest)

coeftest(myregression$Year_1940, vcov=function(x) vcovSCC(x, type="HC3", maxlag=4))
coeftest(myregression$Year_1941, vcov=function(x) vcovSCC(x, type="HC3", maxlag=4))

COEFTEST<-lapply(myregression, coeftest(x, vcov=function(x) vcovSCC(x, type="HC3", maxlag=4)))

## obtaining average coefficients, se's,and t values over all regressions
lapply(COEFTEST, mean)

我希望只有一个我看不到的小错误。我进一步注意到 plm 回归输出小于常规 lm 输出是否有另一种获得均值调整的方法。R^2?

4

2 回答 2

1

尝试

 COEFTEST<-lapply(myregression, function(x) coeftest(x, vcov=vcovSCC(x, type="HC3", maxlag=4)))

Thsi 将为您提供每个回归的 coeftest 输出列表,然后您可以以任何您想要的方式使用它。

作为旁注,请确保您对这个输出所做的任何事情都是有意义的。取 coeftest-output 的平均值对我来说显然不明智。如果您想获得所有系数的平均值,请尝试类似

 mean(sapply(COEFTEST, function(x)  x["capital", "Estimate"]))

在这里,从输出中sapply检索变量的所有估计值并将它们放入向量中。capitalCOEFTEST

要访问其他元素,使用 . 查看对象的结构会很有帮助str()。例如,str(summary(myregression[[1]]))显示 r-squares 保存在 name 下r.squared。这些您可以使用例如summary(myregression[[1]])$r.squared第一个回归输出来访问。自动执行此操作,您可以再次使用上述构造,例如

 sapply(myregression, function(x) summary(x)$r.squared)
于 2014-07-18T08:54:38.430 回答
0

pmg()有一种更好的方法可以使用in获得平均系数(技术上称为平均组估计器)plm。从外观上看,您正在尝试估计 Fama-MacBeth 回归和 SE。

require(foreign)
require(plm)
require(lmtest)
test <- read.dta("http://www.kellogg.northwestern.edu/faculty/petersen/htm/papers/se/test_data.dta")
fpmg <- pmg(y~x, test, index=c("year","firmid")) ##Fama-MacBeth

> ##Fama-MacBeth
> coeftest(fpmg)

t test of coefficients:

            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.031278   0.023356  1.3392   0.1806    
x           1.035586   0.033342 31.0599   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

有关详细信息,请参阅R 中的 Fama-MacBeth 和 Cluster-Robust (by Firm and Time) Standard Errors

也可以看看:

于 2014-08-15T07:37:48.583 回答