Statsmodel 跳过逻辑回归中的值?
Posted
技术标签:
【中文标题】Statsmodel 跳过逻辑回归中的值?【英文标题】:Statsmodel skips a value in a logistic regression? 【发布时间】:2019-03-06 10:25:56 【问题描述】:我用scikit_learn
构建了一个多项回归,效果很好。
然后我尝试将相同的数据与statsmodel
一起使用,因为它提供了更多的洞察力,而且它似乎跳过了第一个 y 值。关于我可能做错了什么的任何想法?
我有 6 个变量 in_X
和 7 个可能的结果 in_y
(从 y=1 到 y=7),但 statsmodel
只返回 6 个系数。
当我打印 print(result.summary())
时,日志从 y=2 开始
这是数据形状:
in_y.value_counts()
>>>
3 295
4 154
5 125
2 86
6 28
1 5
7 3
Name: y, dtype: int64
in_X.head()
>>>
ENTERPRISE_VALUE_ SALES_GROWTH_ EBIT_TO_INT_EXP_ NET_DEBT_TO_EBITDA_ RETURN_COM_EQY_ CASH_RATIO_
918 4.0 4.0 4.0 4.0 5.0 4.0
344 6.0 3.0 4.0 4.0 4.0 6.0
348 5.0 3.0 3.0 5.0 3.0 6.0
906 4.0 5.0 4.0 4.0 4.0 4.0
80 3.0 4.0 4.0 4.0 4.0 4.0
(696, 6)
代码:
import pandas as pd
import statsmodels.discrete.discrete_model as sm
logit_model = sm.MNLogit(in_y, in_X)
result = logit_model.fit()
# Results analysis
print(result.summary())
out1 = result.params
输出1
0 1 2 3 4 5
ENTERPRISE_VALUE_ -0.228684 -1.274831 -2.546053 -3.440249 -3.602911 -3.822631
SALES_GROWTH_ 0.553498 0.706551 1.399920 1.675287 1.646694 1.152329
EBIT_TO_INT_EXP_ -0.036777 -0.304586 -0.895444 -1.351096 -1.614823 -0.593286
NET_DEBT_TO_EBITDA_ 0.772482 1.690700 2.106280 2.881484 3.524116 4.281756
RETURN_COM_EQY_ -0.053659 0.269994 0.487565 0.653377 0.228949 -1.413008
CASH_RATIO_ -0.035479 0.399930 0.808460 0.722607 0.263178 -0.502091
结果总结:
Logit Regression Results
==============================================================================
Dep. Variable: y No. Observations: 696
Model: MNLogit Df Residuals: 660
Method: MLE Df Model: 30
Date: Mon, 01 Oct 2018 Pseudo R-squ.: 0.2390
Time: 12:09:15 Log-Likelihood: -769.38
converged: True LL-Null: -1011.0
LLR p-value: 3.400e-83
=======================================================================================
y=2 coef std err z P>|z| [0.025 0.975]
---------------------------------------------------------------------------------------
[...]
【问题讨论】:
【参考方案1】:由于概率必须加到 1 的限制,我们需要删除其中一个类别作为参考类别。因此,给定其他参数,参考类别的概率只是减去一些非参考概率.
这与 Logit 模型相同,我们只能估计一组参数,例如对于成功的概率,第二个二元选择的概率,例如失败的概率只是一减去成功的概率。
在这两种情况下,响应变量的预测都是二进制或多项式概率,需要满足概率限制,即介于 0 和 1 之间并加到 1 的值。
【讨论】:
有没有办法指定选择哪个变量作为参考?说 y=3 而不是 1。在 documentation 中找不到它 目前还没有办法选择参考水平。做到这一点的唯一方法是重新编码级别,使其首先按字母/字母数字顺序。以上是关于Statsmodel 跳过逻辑回归中的值?的主要内容,如果未能解决你的问题,请参考以下文章
在逻辑回归中,如何在 python 中为我的虚拟变量设置“参考水平”