【问题标题】:Logistic Regression Using statsmodels.api with R syntax in Python在 Python 中使用带有 R 语法的 statsmodels.api 进行逻辑回归
【发布时间】:2019-08-07 05:15:54
【问题描述】:

我正在尝试运行一个简单的逻辑回归函数。我有 4 列名为 x1、x2、x3 和 x4。 x4 有一列只有零和一。所以,我用这个作为我的因变量。为了预测因变量,我使用了自变量 x1、x2 和 x3。我的语法是否关闭,或者如何在保持 Statsmodels.api 提供的 R 语法的同时正确完成数据的逻辑回归?

以下是我的代码:

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

df = pd.DataFrame({'x1': [10, 11, 0, 14],
                       'x2': [12, 0, 1, 24],
                       'x3': [0, 65, 3, 2],
                       'x4': [0, 0, 1, 0]})

model = smf.logit(formula='x4 ~ x1 + x2 + x3', data=df).fit()
print(model)

以下是我的错误:

statsmodels.tools.sm_exceptions.PerfectSeparationError: Perfect separation detected, results not available

我明白这意味着什么,但我不明白如何避免这个问题。确认一个成功的逻辑回归算法需要哪些值,我的语法是否正确,是否有更好的方法来解决我所做的事情(使用 R 语法)?

【问题讨论】:

    标签: python pandas statsmodels


    【解决方案1】:

    我可能误解了这个问题,但语法似乎很好——尽管我认为你想要print(model.summary()) 而不是print(model)。问题是您的样本量太小。

    例如,这是有效的:

    import pandas as pd
    import numpy as np
    import statsmodels.formula.api as smf
    
    np.random.seed(2)
    n=100
    df = pd.DataFrame({'x1':np.random.randn(n),
                       'x2': np.random.randn(n),
                       'x3': np.random.randn(n),
                       'x4': np.random.randint(0,2,n)})
    
    model = smf.logit(formula='x4 ~ x1 + x2 + x3', data=df).fit()
    print(model.summary())
    

    更改为 n=10 在汇总表下产生以下消息:

    可能是完全的准分离:0.40 的观察值可以是 完美预测。这可能表明已经完成 准分离。在这种情况下,某些参数将无法识别。

    更改为 n=5 产生

    PerfectSeparationError:检测到完美分离,结果不可用

    【讨论】:

    • 你的逻辑是有道理的。问题不在于语法。相反,问题在于 n 值。我考虑的值太少了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 2016-03-20
    • 1970-01-01
    • 2017-12-02
    • 2015-07-21
    • 2017-05-03
    • 1970-01-01
    相关资源
    最近更新 更多