如何在R中基于多资产日数据进行OLS回归(整合54个资产对)
解决方法:转成长格式并合并数据
要实现所有资产对的单一OLS回归,核心是把当前的宽格式数据转换为长格式(Tidy Data),再整合为包含所有观测样本的数据集,具体步骤如下(以Python pandas + statsmodels工具链为例):
1. 将每个数据框转为长格式
把df1、df2、df3从「Date列+54个资产对列」的宽结构,转成「Date+PAIR_ID+数值列」的长结构,每个行对应单个资产对的单日观测:
import pandas as pd # df1作为因变量,数值列命名为y df1_long = df1.melt(id_vars='Date', var_name='PAIR_ID', value_name='y') # df2作为第一个自变量,数值列命名为x1 df2_long = df2.melt(id_vars='Date', var_name='PAIR_ID', value_name='x1') # df3作为第二个自变量,数值列命名为x2 df3_long = df3.melt(id_vars='Date', var_name='PAIR_ID', value_name='x2')
2. 合并长格式数据
通过Date和PAIR_ID作为匹配键,将三个长数据框合并为完整数据集,确保每个观测的日期、资产对对应关系一致:
# 逐步合并,只保留三个数据框都存在的(Date, PAIR_ID)组合 merged_data = pd.merge(df1_long, df2_long, on=['Date', 'PAIR_ID'], how='inner') merged_data = pd.merge(merged_data, df3_long, on=['Date', 'PAIR_ID'], how='inner')
3. 执行全局OLS回归
用合并后的全量数据拟合回归模型,此时所有资产对的日度样本都会被纳入,得到单一的alpha、ß1、ß2估计值:
import statsmodels.api as sm # 添加常数项(对应模型中的alpha) X = sm.add_constant(merged_data[['x1', 'x2']]) y = merged_data['y'] # 拟合并输出结果 model = sm.OLS(y, X).fit() print(model.summary())
可选:加入资产对固定效应
如果需要控制不同资产对的固有差异(比如不同资产对有独立截距),可以用面板回归加入实体固定效应:
from linearmodels import PanelOLS # 设置面板索引(资产对+日期) merged_data = merged_data.set_index(['PAIR_ID', 'Date']) # 拟合带固定效应的模型 model_fe = PanelOLS.from_formula('y ~ 1 + x1 + x2 + EntityEffects', data=merged_data) results_fe = model_fe.fit(cov_type='clustered', cluster_entity=True) print(results_fe.summary())
内容的提问来源于stack exchange,提问作者DIzzyWizard
相关产品推荐
相关产品推荐

