How does "statsmodels.regression.linear_model. WLS" work?

4.7k views Asked by At

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

There are 1 answers

1
maxymoo On

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.