创建OLS结果矩阵

时间:2015-04-14 22:20:49

标签: r loops matrix linear-regression

对于25个资产组合,我有576年的超额收益数据集(一直持续到2010年12月和25年)

 date    er1     er2     er3     er4     er5   market-rf
196301  12.77   11.19   9.15    10.71   10.87   4.93
196302  -3.48   -3.72   -0.94   -1.06   2.51   -2.42
196303  4.75    -1.7    -0.34    0.99   2.36    3.06
196304  4.55    1.25     1.8     3.29   2.52    4.49
196305  3.15    1.44     2.51    3.89   7.63    1.77

我需要为CAPM模型运行25次回归,我需要以25x3矩阵形式排列alphas(截距),beta(系数)和截距的t统计量。< / p>

以下是我的回归。

capm1 <- lm(er1~market.rf, data=ff25)
capm2 <- lm(er2~market.rf, data=ff25)
capm3 <- lm(er3~market.rf, data=ff25) etc until capm25.

我可以像这样得到coeftest的结果。

coeftest(capm1)

t test系数:

#             Estimate Std. Error t value Pr(>|t|)    
#(Intercept) -0.395188   0.204474 -1.9327  0.05376 .  
#market.rf    1.434851   0.045032 31.8629  < 2e-16 ***
#---
#Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

另外,我可以使用

提取感兴趣的3个变量
summary(capm1)$coef[1,1]
summary(capm1)$coef[2,1]
summary(capm1)$coef[1,3]

任何人都可以帮我安排这些变量(我最终得到25个截距,25个系数和25个截距统计数据)的矩阵或表格形式。 还有任何循环代码可以编写运行此ols回归,因为我不得不为每个资产手动运行25次回归。

1 个答案:

答案 0 :(得分:1)

直接循环示例如下:

# an index matrix to extract to three values of interest
indx <- matrix(c(1,1,
                 2,1,
                 1,3),nrow=3,byrow=TRUE)

# initialize the output matrix to NULL
out <- NULL

# iterate over the 25 variables
for(i in seq(25)) 
    out  <- rbind(out,
                 coeftest(lm(formula(paste0('er',i,'~market.rf')), 
                             data=ff25))[indx])