经济计量背景
Fama-Macbeth回归是指对面板数据进行回归的过程(其中有N个不同的个体,每个个体对应多个时段T,例如天、月、年)。所以总的来说有N x T obs。请注意,如果面板数据不平衡,则可以。
Fama-Macbeth回归是对每个时期进行跨部门的第一次回归,即在给定的时期t内将N个个体聚集在一起,并在t=1,…t时进行回归,因此在总t回归中进行回归。然后我们得到每个自变量的系数时间序列。然后利用系数的时间序列进行假设检验。通常我们取平均值作为每个自变量的最终系数。我们用t统计量来检验显著性。
我的问题
我的问题是在熊猫身上实施。从pandas的源代码中,我注意到有一个名为fama_macbeth
的过程。但是我找不到任何关于这个的文件。
这个操作也可以通过groupby
轻松完成。目前我正在做:
def fmreg(data,formula):
return smf.ols(formula,data=data).fit().params[1]
res=df.groupby('date').apply(fmreg,'ret~var1')
这是这样的,res
是一个由date
索引的序列,序列的值是params[1]
,这是var1
的系数。但现在我想有更多的自变量,我需要提取所有这些自变量的系数,但我无法计算出来。我试过这个
def fmreg(data,formula):
return smf.ols(formula,data=data).fit().params
res=df.groupby('date').apply(fmreg,'ret~var1+var2+var3')
这行不通。期望的结果是res
是由date
索引的数据帧,数据帧的每一列应该包含每个变量intercept
、var1
、var2
和var3
的系数。
我还用statsmodels
检查过,它们也没有这样的内置过程。
是否有任何包可以生成发布质量回归表?就像Stata中的outreg2
和R中的texreg
?
谢谢你的帮助!
反映Fama MacBeth截至2018年秋季图书馆情况的更新。
fama_macbeth
函数已从pandas
中删除一段时间。你有什么选择?如果您使用的是python 3,那么可以在LinearModels中使用Fama MacBeth方法:https://github.com/bashtage/linearmodels/blob/master/linearmodels/panel/model.py
如果您使用的是Python2,或者只是不想使用LinearModels,那么您最好的选择可能是滚动您自己的。
例如,假设您将Fama-French行业投资组合放在一个面板中,如下所示(您还计算了一些变量,如过去的beta或过去的回报率,用作x变量):
Fama-MacBeth主要涉及逐月计算相同的横截面回归模型,因此可以使用
groupby
实现它。您可以创建一个函数,该函数接受一个dataframe
(它将来自groupby
)和一个patsy
公式;然后它适合模型并返回参数估计值。这是一个你如何实现它的简单版本(注意这是最初的提问者几年前试图做的。。。不知道为什么它不起作用,尽管在当时可能statsmodels
结果对象方法params
没有返回pandas
Series
,所以需要显式地将返回转换为Series
。。。它在当前版本的pandas
,0.23.4)中工作正常:然后计算平均值,平均值的标准误差,然后进行t检验(或者任何你想要的统计数据)。大致如下:
提高速度
使用
statsmodels
进行回归有很大的开销(特别是考虑到您只需要估计的系数)。如果你想要更好的效率,那么你可以从statsmodels
切换到numpy.linalg.lstsq
。写一个新的函数来做ols估计。。。如下所示(注意,我没有检查这些矩阵的秩…)如果您仍然使用较旧版本的
pandas
,则以下操作将起作用:下面是在
pandas
中使用fama_macbeth
函数的示例:注意,结构。函数
fama_macbeth
期望y-var和x-vars在索引中有一个日期为第一变量、股票/公司/实体id为第二变量的多个索引:注意,只打印
fm
调用fm.summary另外,注意
fama_macbeth
函数会自动添加一个截距(与statsmodels
例程相反)。而且x-var必须是dataframe
,因此如果只传递一列,则需要将其作为df[['x']]
传递。如果你不想拦截,你必须:
编辑:新建库
已存在可通过以下命令安装的更新库:
这里的文档:https://fin-585-byu.readthedocs.io/en/latest/contents.html
新的库包括Fama Macbeth回归实现,速度得到了提高,并且更新了
Regtable
类。新的图书馆还包括GRS统计,这也可能是有用的人对Fama麦克白回归感兴趣。作为对Karl D.上述答案的更新,现在有一个非常年轻的库,它在python中生成回归表,并包含Fama Macbeth回归函数。
文档:https://byu-finance-library-finance-byu.readthedocs.io/en/latest/contents.html
当前可以从测试PyPi服务器导入库:
文档中的这一页概述了Fama Macbeth函数:https://byu-finance-library-finance-byu.readthedocs.io/en/latest/fama_macbeth.html
有一个实现非常类似于Karl D.在上面使用
numpy
的线性代数函数的实现,该实现利用joblib
进行并行化,以在数据中有大量时间段时提高性能,以及一个使用numba
进行优化的实现,它在小数据集上削减了一个数量级。下面是一个小的模拟数据集示例,如文档中所示:
注意:关闭memmap可以进行公平比较,而不必每次运行时生成新数据。使用memmap,并行实现只需提取缓存的结果。
下面是表类的两个简单实现,它们也使用模拟数据:
产生以下结果:
产生以下结果:
Regtable类的文档在这里:https://byu-finance-library-finance-byu.readthedocs.io/en/latest/regtables.html
这些表格可以导出为乳胶,便于写入:
相关问题 更多 >
编程相关推荐