大家好,我现在正在学习如何用 Python 制作固定效应模型。这篇文章确实很有帮助,但我对“贬低”部分仍然有点困惑
在@Karl D.的回答中,他好心提供了选项3的代码(附在下面),我不确定为什么有必要在贬低之后添加回ybar和xbar。这似乎是重新引入了我们想要删除的固定效果?感谢 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)
这是一个正确的固定效应模型吗?
我不是原作者,只能推测原因。最有可能的是,这样做是为了重新引入拦截。虽然当观察到的实体的值存在显着差异时,这可能没有什么意义,但当观察结果更具可比性时,它可能会很有用,因为它有效地将截距带回模型中。需要注意的是,xbar 和 ybar 是常数值,因此它们本身不会重新引入固定效应。