我有一些数据,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函数不匹配。
答案 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只是相对权重,仍然会与误差范围的稳健估计相乘。