我想运行时间序列回归(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))