在R中一次运行多个OLS回归

时间:2016-07-25 17:32:00

标签: r statistics regression

我想运行时间序列回归(Fama-French三因素与我的新因子)。我有以下表格。

Table01

    Date     Port_01  Port_02 --------- Port_18
    01/1965     0.85    0.97               1.86
    02/1965     8.96    7.2                0.98
    03/1965     8.98    7.9                8.86 

Table 02

    Date        Market   SMB    HML     WXO
    01/1965      0.85    0.97    0.86    0.87
    02/1965      8.96    7.2     0.98    0.79
    03/1965      8.98     7.9    8.86    0.86

我必须运行18次回归并将其截距存储在向量中。 像这样的东西

      Port_1=inter(1)+Beta1(Market)+Beta2(SMB)+Beta3(HML)+Beta3(WXO)+e
      Port_2=inter(2)+Beta1(Market)+Beta2(SMB)+Beta3(HML)+Beta3(WXO)+e
      Port_18=inter(18)+Beta1(Market)+Beta2(SMB)+Beta3(HML)+Beta3(WXO)+e

我希望将这18个截距存储在矢量中。我可以单独做。但如果有一种编码方式可以帮助我很多时间。

1 个答案:

答案 0 :(得分:0)

考虑vapply()lapply()的变体,允许在此输出的规范是原子数向量(长度为1)。但是,首先,您需要通过Date字段合并表,然后创建 Port 公式的列表(假设这是所需的基础数据)。下面运行线性回归lm,但调整到可能需要调整拦截提取的实际模型:

data <- merge(Table_01, Table_02, by="Date")

ports <- colnames(Table_01)[2:ncol(Table_01)]    
formulas <- paste(ports, "~ Market + SMB + HML + WXO")

intercepts <- vapply(formulas, function(i) { 
                          output <- lm(i, data)
                          coef(output)["(Intercept)"]
                     }, numeric(1))