熊猫或统计模型中的固定效果
是否有现有功能可以从Pandas或Statsmodels估算固定效果(单向或双向)。
Statsmodels中曾经有一个函数,但似乎已停产。在Pandas中,有一个叫做的东西plm
,但是我不能导入它或使用运行它pd.plm()
。
-
如评论中所述,从Plates版本0.20.0起已删除PanelOLS。因此,您确实有三个选择:
-
如果您使用Python 3,则可以
linearmodels
按照最新答案中的指定使用 -
只需在
statsmodels
规范中指定各种虚拟变量即可,例如使用pd.get_dummies
。如果固定效果的数量很多,则可能不可行。 -
或进行一些基于分组的贬义然后使用
statsmodels
(如果您要估计很多固定效果,这将起作用)。这是您可以通过一种固定方式完成的工作的准系统版本:import statsmodels.api as sm
import statsmodels.formula.api as smf
import patsydef 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})
例如,假设您有一个库存数据面板:一个月内每月数月内所有股票的股票收益和其他股票数据,并且您想对固定日历月固定收益的滞后收益进行回归(其中日历月份变量为所谓的
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
注意,数据框必须有一个multindex集;根据索引
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---------------------------------
Docstring:
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
。
-