在R中同时运行多个OLS回归



我想运行时间序列回归(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个截距存储在一个向量中。我可以单独做。但是,如果有一种编码的方法,这将帮助我很多时间。

考虑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))