我想运行时间序列回归(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个截距存储在矢量中。我可以单独做。但如果有一种编码方式可以帮助我很多时间。
答案 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))