获得平均系数和adj。来自多个汇集回归的R ^ 2使用lapply

时间:2014-07-18 08:44:56

标签: r lapply

我使用循环函数执行了多个Pooled回归,并将回归输出存储在列表中(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
}

这就是我的问题所在:虽然我能够对列表的invidiual组件执行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?

2 个答案:

答案 0 :(得分:1)

尝试

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

Thsi将为您提供每个回归的coeftest-outputs列表,然后您可以以任何方式使用它们。

作为旁注,请确保无论您对此输出做什么都有意义。取一个coeftest输出的平均值对我来说并不是很明智。如果你想得到所有系数的平均值,可以试试

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

此处,sapplycapital输出中检索变量COEFTEST的所有估算值,并将它们放入向量中。

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

 sapply(myregression, function(x) summary(x)$r.squared)

答案 1 :(得分:0)

有一种更好的方法可以使用pmg()中的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

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

另见: