【问题标题】:Python statsmodels return values missingPython statsmodels 返回值丢失
【发布时间】:2015-01-15 01:20:48
【问题描述】:

我正在尝试在一个简单的 x-y 数据测试集上使用来自 statsmodels 的稳健线性模型。但是,作为 model.params 的返回值,我只能得到一个值。如何获得拟合的斜率和截距?最小的例子(我试图从拟合中排除异常值,因此 rlm):

import statsmodels.api as sm
a = np.array([1,2,3,4,5,6,7,8,9])
b = 2. * np.array([1,2,9,4,5,6,7,13,9])
model = sm.RLM(b, a, M=sm.robust.norms.HuberT()).fit()
model.params

最后一行只返回array([2.])。 我用同一个包中的 ols 尝试了同样的事情,这确实给了我截距和斜率作为回报。

【问题讨论】:

    标签: python regression statsmodels robust


    【解决方案1】:

    如果您使用数组,statsmodels 不会自动添加常量或截距。有一个辅助函数 add_constant 来添加一个常量。

    >>> import statsmodels.api as sm
    >>> a = np.array([1,2,3,4,5,6,7,8,9])
    >>> b = 2. * np.array([1,2,9,4,5,6,7,13,9])
    >>> model = sm.RLM(b, a, M=sm.robust.norms.HuberT()).fit()
    >>> model.params
    array([ 2.])
    

    有一个常数

    >>> a2 = sm.add_constant(a)
    >>> model = sm.RLM(b, a2, M=sm.robust.norms.HuberT()).fit()
    >>> model.params
    array([  2.85893087e-10,   2.00000000e+00])
    >>> print model.summary()
    ...
    

    这对于所有模型都是一样的,除了一些可以选择添加常数或趋势的时间序列模型。

    公式界面默认添加一个常量。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2021-09-20
    • 2014-11-21
    • 2015-12-31
    • 2011-08-23
    • 2013-03-18
    相关资源
    最近更新 更多