1

我正在尝试在 xy 数据的简单测试集上使用来自 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 尝试了同样的事情,这确实给了我拦截和斜率作为回报。

4

1 回答 1

2

如果您使用数组,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()
...

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

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

于 2014-11-19T00:12:25.623 回答