是否有现有函数可以从 Pandas 或 Statsmodels 估计固定效应(单向或双向)。
Statsmodels 中曾经有一个功能,但它似乎已停止使用。在 Pandas 中,有一个名为 plm
的东西,但我无法导入它或使用 pd.plm()
运行它。
最佳答案
如评论中所述,从 0.20.0 版开始,PanelOLS 已从 Pandas 中删除。所以你真的有三个选择:
如果您使用 Python 3,您可以使用
linearmodels
,如最近的答案中所指定:https://stackoverflow.com/a/44836199/3435183只需在您的
statsmodels
规范中指定各种虚拟对象,例如使用pd.get_dummies
.如果固定效应的数量很大,则可能不可行。或者进行一些基于 groupby 的贬低,然后使用
statsmodels
(如果您要估计大量固定效应,这会起作用)。这是您可以为单向固定效果执行的操作的准系统版本:import statsmodels.api as sm import statsmodels.formula.api as smf import patsy def areg(formula,data=None,absorb=None,cluster=None): y,X = patsy.dmatrices(formula,data,return_type='dataframe') ybar = y.mean() y = y - y.groupby(data[absorb]).transform('mean') + ybar Xbar = X.mean() X = X - X.groupby(data[absorb]).transform('mean') + Xbar reg = sm.OLS(y,X) # Account for df loss from FE transform reg.df_resid -= (data[absorb].nunique() - 1) return reg.fit(cov_type='cluster',cov_kwds={'groups':data[cluster].values})
例如,假设您有一组股票数据:所有股票的股票 yield 和其他股票数据,在数月内的每个月,并且您想要回归具有日历月固定效应的滞后 yield 的 yield (其中日历month 变量称为 caldt
),您还希望按日历月对标准误差进行聚类。您可以使用以下方法估算此类固定效应模型:
reg0 = areg('ret~retlag',data=df,absorb='caldt',cluster='caldt')
如果使用旧版本的 Pandas
,您可以执行以下操作:
使用 pandas 的 PanelOLS
(位于 plm 模块中)的时间固定效果示例。注意,PanelOLS
的导入:
>>> from pandas.stats.plm import PanelOLS
>>> df
y x
date id
2012-01-01 1 0.1 0.2
2 0.3 0.5
3 0.4 0.8
4 0.0 0.2
2012-02-01 1 0.2 0.7
2 0.4 0.5
3 0.2 0.3
4 0.1 0.1
2012-03-01 1 0.6 0.9
2 0.7 0.5
3 0.9 0.6
4 0.4 0.5
注意,dataframe 必须有一个多索引集; panelOLS
根据索引确定time
和entity
效果:
>>> reg = PanelOLS(y=df['y'],x=df[['x']],time_effects=True)
>>> reg
-------------------------Summary of Regression Analysis-------------------------
Formula: Y ~ <x>
Number of Observations: 12
Number of Degrees of Freedom: 4
R-squared: 0.2729
Adj R-squared: 0.0002
Rmse: 0.1588
F-stat (1, 8): 1.0007, p-value: 0.3464
Degrees of Freedom: model 3, resid 8
-----------------------Summary of Estimated Coefficients------------------------
Variable Coef Std Err t-stat p-value CI 2.5% CI 97.5%
--------------------------------------------------------------------------------
x 0.3694 0.2132 1.73 0.1214 -0.0485 0.7872
---------------------------------End of Summary---------------------------------
文档字符串:
PanelOLS(self, y, x, weights = None, intercept = True, nw_lags = None,
entity_effects = False, time_effects = False, x_effects = None,
cluster = None, dropped_dummies = None, verbose = False,
nw_overlap = False)
Implements panel OLS.
See ols function docs
这是另一个功能(如 fama_macbeth
),我相信计划是将此功能移动到 statsmodels
。
关于python - Pandas 或 Statsmodels 中的固定效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195432/