熊猫或统计模型中的固定效果

发布于 2021-01-29 18:58:22

是否有现有功能可以从Pandas或Statsmodels估算固定效果(单向或双向)。

Statsmodels中曾经有一个函数,但似乎已停产。在Pandas中,有一个叫做的东西plm,但是我不能导入它或使用运行它pd.plm()

关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    如评论中所述,从Plates版本0.20.0起已删除PanelOLS。因此,您确实有三个选择:

    1. 如果您使用Python 3,则可以linearmodels按照最新答案中的指定使用

    2. 只需在statsmodels规范中指定各种虚拟变量即可,例如使用pd.get_dummies。如果固定效果的数量很多,则可能不可行。

    3. 或进行一些基于分组的贬义然后使用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})
      

    例如,假设您有一个库存数据面板:一个月内每月数月内所有股票的股票收益和其他股票数据,并且您想对固定日历月固定收益的滞后收益进行回归(其中日历月份变量为所谓的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确定timeentity效果:

    >>> 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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看