我有一些数据,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的权重。希望大家能帮忙,这是我第一次尝试使用状态模型模块。
第一个回答是:我试过了;
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函数不匹配。
发布于 2014-02-13 17:13:30
反映异方差的权值,即不同观测值的不等方差,还没有得到状态模型RLM的支持。
作为解决办法,您可以在调用RLM时将y和x除以yerr。
我认为,与加权最小二乘法类似,在这种情况下,参数估计、它们的标准误差和其他统计量仍然是正确的。但我还没查过。
作为参考:
卡罗尔雷蒙德J.和大卫鲁珀特。异方差线性模型的鲁棒估计统计年鉴(1982年):429-441。
它们还估计了方差函数,但是对于固定的权重1/sigma_i,优化只是使用
(y_i - x_iβ)/ sigma_i
权重1/sigma_i将仅为相对权重,并且仍将与误差尺度的稳健估计相乘。
https://stackoverflow.com/questions/21755153
复制相似问题