【问题标题】:Extract regressions coefficient from statsmodels从 statsmodels 中提取回归系数
【发布时间】:2018-09-15 08:55:34
【问题描述】:

我正在估计一个 OLS 模型,如下所示。我需要分类变量的系数及其值。

这是我的代码:

import pandas as pd
import numpy as np
import statsmodels.formula.api as smf

np.random.seed(12345)
df = pd.DataFrame(np.random.randn(25, 1), columns=list('A'))

df['groupid'] = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,5,5,5,5,5,6,6,6,6,6]
df['groupid'] = df['groupid'].astype('int')

###Fixed effects models

FE_ols = smf.ols(formula = 'A ~ C(groupid) - 1', data=df).fit()

FE_coeffs = FE_ols.params #Save coeffs
FE_coeffs.GroupID = FE_coeffs.index #Extract value of GroupID
FE_coeffs.GroupID = FE_coeffs.GroupID.str.extract('(\d+)') #Parse number from string

我能够提取虚拟变量的系数。我把它们放在一个新的数据框中。

C(groupid)[1]   0.2329694463342642
C(groupid)[2]   0.7567034333090062
C(groupid)[3]   0.31355791920072623
C(groupid)[5]   -0.05131898650395289
C(groupid)[6]   0.31757453138500547

但是,我希望数据框是这样的:

1   0.2329694463342642
2   0.7567034333090062
3   0.31355791920072623
5   -0.05131898650395289
6   0.31757453138500547    

代码似乎可以工作,包括解析。当我在 Jupyter 上执行此操作时,它甚至会显示正确的输出。但是更改不会保存到数据框中。似乎没有 inplace=True 类型的命令。

将不胜感激。

【问题讨论】:

    标签: python pandas statsmodels


    【解决方案1】:

    FE_coeffs 是一个系列,因此添加属性 GroupID 就像添加列一样是错误的方向。相反,只需用提取的整数值覆盖索引:

    In [80]: FE_coeffs = FE_ols.params.copy()
    
    In [81]: FE_coeffs.index = FE_coeffs.index.str.extract("(\d+)", expand=False).astype(int)
    
    In [82]: FE_coeffs
    Out[82]: 
    1    0.232969
    2    0.756703
    3    0.313558
    5   -0.051319
    6    0.317575
    dtype: float64
    

    【讨论】:

    • 谢谢你解释了这个问题。但是,我需要将 FE_coeffs 合并到另一个数据框。这就是为什么我试图将它们创建到数据框中。如果我可以直接从系列中或其他方式做到这一点,有什么建议吗?
    猜你喜欢
    • 2022-01-18
    • 2014-12-16
    • 1970-01-01
    • 2020-09-12
    • 2018-05-03
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多