使用来自python模块“statsmodels”的强大线性方法和权重?

时间:2014-02-13 13:08:00

标签: python matlab linear-regression statsmodels

我有一些数据,y有错误,y_err,在x处测量。我需要拟合一条直线来模拟matlab中的一些代码,特别是带有强大“on”的拟合方法,并将权重赋予1 / yerr。 matlab文档说它使用了bisquare方法(也称为TukeyBiweight方法)。到目前为止我的代码是..

    rlm_model = sm.RLM(y, x, M=sm.robust.norms.TukeyBiweight())
    rlm_results = rlm_model.fit()
    print rlm_results.params

然而,我需要找到一种方法来包括从yerr派生的权重。 希望人们可以提供帮助,这是我第一次尝试使用statsmodel模块。

回答第一个答案: 我试过了;

y=y*(yerr)
x=x*(yerr)

x=sm.add_constant(x, prepend=False)
rlm_model = sm.RLM(y, x, M=sm.robust.norms.TukeyBiweight())
results=rlm_model.fit()

但遗憾的是,这与matlab函数不匹配。

1 个答案:

答案 0 :(得分:0)

反映异方差性的权重,即观察结果之间的不等方差,尚未被statsmodels RLM支持。

作为一种解决方法,您可以在调用RLM时将y和x除以yerr。

我认为,与加权最小二乘类比,参数估计,它们的标准误差和其他统计数据在这种情况下仍然是正确的。但我还没有检查过。

作为参考:

Carroll,Raymond J.和David Ruppert。 “异方差线性模型中的稳健估计。”统计年鉴(1982):429-441。

他们还估计了方差函数,但对于固定权重1 / sigma_i,优化只是使用

(y_i - x_i beta)/ sigma_i

权重1 / sigma_i只是相对权重,仍然会与误差范围的稳健估计相乘。