python - 从 statsmodels 中提取回归系数
问题描述
我正在估计一个 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 类型的命令。
将不胜感激任何帮助。
解决方案
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
推荐阅读
- python-3.x - 数字识别:我从画布图像中得到相同的输出
- reactjs - 在reactjs甜甜圈图中,如何减小图表的宽度
- android - 使用 AWS API 的应用程序是否需要身份验证?
- python - 一个模型的多个反向 URL
- python - 如何使用python将xml文件转换为csv文件
- c# - 我无法在 C# 中使用 Jquery 和 Ajax 从控制器向 Razor 视图发送值
- django - 从 Apple 快捷方式访问时,对 API 的调用始终返回“未提供身份验证凭据”,但从 Postman 访问时则不返回
- android - 如何调整画廊中的高质量图像以显示在图像视图中?
- javascript - 如何在 for 循环中跳过 cy.get() 函数
- java - 我怎样才能返回这个函数的响应?