【发布时间】:2014-10-02 17:13:11
【问题描述】:
我正在使用循环函数执行多个汇集横截面回归,并将回归输出存储在列表中(回归)。我现在想做的是有效地获得平均系数、平均 t-stats 以及平均 adj.r 平方。
我已经提交了以下代码:
library(plm)
data("Grunfeld", package="plm")
# create list with regression outputs
regression <- list()
# Regression on past six-year subsets of Grunfeld in every year from 1940 to 1950
for(t in 1940:1950){
regression[[as.character(t)]] <- lm(inv ~ value + capital,
subset(Grunfeld, year<=t & year>=t-5))
}
通过这种方式,我获得了存储在列表中的所需回归输出(回归)。我现在想做的是有效地获得平均系数、平均 t-stats 以及平均 adj.r 平方。
我已经尝试计算所有 adj 的平均值。 r 平方:
mean(lapply(regression, function(x) summary(x)$adj.r.squared))
但是,当我收到以下错误时,似乎我使用了错误的平均函数。
Warning message:
In mean.default(lapply(regression, function(x) summary(x)$adj.r.squared)) :
argument is not numeric or logical: returning NA
我还想出了以下方法来“提取”系数。
lapply(regression, function(x) summary(x)$coefficients)
如何从这个 lapply 输出中快速获得平均单个系数? (即单独提取每一行并计算多年来的各自平均值。)
$`1940`
Estimate Std. Error t value Pr(>|t|)
(Intercept) -3.65239712 14.647050149 -0.2493606 8.039783e-01
value 0.08283141 0.006873563 12.0507230 2.615793e-17
capital 0.11033307 0.091543522 1.2052526 2.330857e-01
$`1941`
Estimate Std. Error t value Pr(>|t|)
(Intercept) -13.77258038 16.677399231 -0.825823 4.123477e-01
value 0.08614094 0.007258571 11.867480 4.904857e-17
capital 0.18680229 0.094849038 1.969470 5.376624e-02
....
【问题讨论】:
-
您收到一条错误消息,因为
lapply返回一个列表,然后您将mean函数应用于此列表。请改用sapply,如@landroni 所示。
标签: r regression lapply sapply