from linearmodels import FamaMacBeth
import pandas as pd
import numpy as np
#生成所用面板数据集
#该数据集在不同的日期有不同的个体
#期望回归模型:Y=3+6*X1-4*X2+7*X3
data=[[date,i] for date in pd.date_range('20050102',end='20060908',freq='D') for i in range(np.random.randint(20,87))]#生成日期和个体
data=pd.DataFrame(data,columns=['date','individual'])
data['const']=1#生成常数项
data[['X1','X2','X3']]=pd.DataFrame(np.random.normal(size=[len(data),3]))#解释变量
data['Y']=3*data['const']+6*data['X1']-4*data['X2']+7*data['X3']+np.random.normal(size=len(data))/10#被解释变量
#将数据格式修改为多个行标签的面板数据
data=pd.pivot_table(data,index=['date','individual'],values=['Y','const','X1','X2','X3'])
#回归模型
model=FamaMacBeth(dependent=data['Y'],exog=data[['const','X1','X2','X3']])
#回归结果用Newey West方法进行调整,滞后阶数设置为5阶
results=model.fit(cov_type= 'kernel',debiased = False,bandwidth = 5)
数据格式必须为以下格式,否则无法运行:
最终回归结果: