当前位置: 首页 > 面试题库 >

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

张唯
2023-03-14
问题内容

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

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


问题答案:

如评论中所述,从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



 类似资料:
  • 问题内容: 我有一个测试成绩的频率表: 我想显示基本统计数据和箱图,该图由频率表汇总。(例如,上面示例的平均值为79.16,中位数为80。) 熊猫有办法做到这一点吗?我所看到的所有示例均假设有个别案例的表格。 我想我可以生成一个个人分数列表,像这样- -但我希望避免这种情况;真实的非玩具数据集中的总频率高达十亿。 任何帮助表示赞赏。 (我认为这与对带加权数据使用describe()的问题不同,后者

  • 问题内容: 我有两个numpy数组light_points和time_points,想对这些数据使用一些时间序列分析方法。 然后我尝试了这个: 这有效,但没有做正确的事。确实,测量值不是均匀地间隔开的,如果我只是将time_points pandas DataFrame声明为帧的索引,则会出现错误: 我不知道该如何纠正。另外,似乎不建议使用大熊猫。 我尝试了这个: 但这给了我长度上的不匹配: 但是

  • 在前端,我有3个层次结构。 顶层显示一个测试摘要,包含统计信息,如%通过/失败、各种标签、运行标识等。 第二级由测试套件的各个部分组成,这些部分可以通过顶级运行id访问。其中包含测试的名称,特定的测试通过/失败。 第三级是实际测试本身,包括报告、通过/失败状态等。 我使用的是平均堆栈,我想知道使用1、2或3种不同的Mongoose模型在MongoDB中存储数据的利弊。我知道在数组中使用嵌入式文档的

  • 问题内容: 我正在尝试做一个简单的文本区域,其中包含“剩余的许多字符”以及验证。当我使用ng- maxlength验证表单时,一旦长度达到最大长度,它将立即重置我的字符计数。这是笨蛋 任何解决方法? 问题答案: 当您的textarea超过15个字符时,变为-这就是指令的工作方式。我认为您必须编写自己的指令。这是一条指令,它将在15个字符后阻止输入: 更新: 允许超过15个字符,但是当计数超过15个

  • 我必须根据以下col1、col2和loc的数据进行分组,并计算col3中的项数。此外,还应考虑开始和结束日期,即日期应在2021 1月1日至2021 1月31日之间。最终结果应显示在col4中。 数据 预期输出

  • 问题内容: 我想要按元素进行逻辑或运算符。我知道“或”本身不是我想要的。 我知道AND对应于NOT 。但是OR呢? 问题答案: 相应的运算符是: 将按元素检查值是否小于3或等于5。 如果您需要执行此操作的功能,我们有 。对于两个条件,您可以使用 或者,对于多种情况,请使用, 由于条件被指定为单独的参数, 因此不需要括号分组。