I have used 'statsmodels.regression.linear_model' to do WLS.
But I have no idea about how to give weight my regression.
Does anyone know how the weight be given and how it work?
import numpy as np import statsmodels.api as sm Y = [1,2,3,4,5,6,7] X = range(1,8) W= [1,1,1,1,1,1,1] X = sm.add_constant(X) wls_model = sm.WLS(Y,X, weights=W) results = wls_model.fit() results.params print results.params #[ -1.55431223e-15 1.00000000e+00] import numpy as np import statsmodels.api as sm Y = [1,2,3,4,5,6,7] X = range(1,8) W= range(1,8) X = sm.add_constant(X) wls_model = sm.WLS(Y,X, weights=W) results = wls_model.fit() results.params print results.params #[0 1] why when weight is range(1,8) the slope and intercept is 1 and 0. but when weight is "1" the intercept is not 0.
1 Answer
In your example, the data is linear anyway, so the the regression will be a perfect fit, no matter what your weights. But if you change your data to have an outlier in the first position like this
Y = [-5,2,3,4,5,6,7] then with constant weights you get
[-3.42857143 1.64285714] but with W = range(1,8) you get
[-1.64285714 1.28571429] which is closer to what you want without the outlier.
1