Python 中的固定效果模型

问题描述 投票:0回答:1

大家好,我现在正在学习如何用 Python 制作固定效应模型。这篇文章确实很有帮助,但我对“贬低”部分仍然有点困惑

修复了 Pandas 或 Statsmodels 中的效果

在@Karl D.的回答中,他好心提供了选项3的代码(附在下面),我不确定为什么有必要在贬低之后添加回ybarxbar。这似乎是重新引入了我们想要删除的固定效果?感谢 Karl.D,他的回答非常有帮助。我的声誉不足以直接在他的答案下发表评论,所以我决定发布这个问题。

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

谢谢你

如果我们简单地这样做:

y = y -  y.groupby(data[absorb]).transform('mean')
X = X - X.groupby(data[absorb]).transform('mean')

reg = sm.OLS(y,X)

这是一个正确的固定效应模型吗?

python pandas regression statsmodels
1个回答
0
投票

我不是原作者,只能推测原因。最有可能的是,这样做是为了重新引入拦截。虽然当观察到的实体的值存在显着差异时,这可能没有什么意义,但当观察结果更具可比性时,它可能会很有用,因为它有效地将截距带回模型中。需要注意的是,xbarybar 是常数值,因此它们本身不会重新引入固定效应。

© www.soinside.com 2019 - 2024. All rights reserved.