Statsmodel 在逻辑回归中跳过一个值?
Statsmodel skips a value in a logistic regression?
我用 scikit_learn
构建了一个 多项式回归 ,它运行良好。
然后我尝试将相同的数据与 statsmodel
一起使用,因为它提供了更多的洞察力,而且它似乎跳过了第一个 y 值。关于我可能做错了什么的任何想法?
我有 6 个变量 in_X
和 7 个可能的结果 in_y
(从 y=1 到 y=7),但是 statsmodel
returns 只有 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
out1
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 的限制,我们需要删除其中一个类别作为参考类别。因此给定其他参数,参考类别的概率只是一个减去一些非参考概率。
这与 Logit 模型相同,我们只能估计一组参数,例如对于成功的概率,第二个二元选择的概率,例如失败的概率就是一减去成功的概率。
在这两种情况下,响应变量的预测将是二元或多项式概率,需要满足概率限制,即介于零和一之间并加一的值。
我用 scikit_learn
构建了一个 多项式回归 ,它运行良好。
然后我尝试将相同的数据与 statsmodel
一起使用,因为它提供了更多的洞察力,而且它似乎跳过了第一个 y 值。关于我可能做错了什么的任何想法?
我有 6 个变量 in_X
和 7 个可能的结果 in_y
(从 y=1 到 y=7),但是 statsmodel
returns 只有 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
out1
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 的限制,我们需要删除其中一个类别作为参考类别。因此给定其他参数,参考类别的概率只是一个减去一些非参考概率。
这与 Logit 模型相同,我们只能估计一组参数,例如对于成功的概率,第二个二元选择的概率,例如失败的概率就是一减去成功的概率。
在这两种情况下,响应变量的预测将是二元或多项式概率,需要满足概率限制,即介于零和一之间并加一的值。