How to weigh a station for ordering least squares in python?
I have 10 climate station data for precipitation and DEM.
I did linear regression:
DEM = [200, 300, 400, 500, 600, 300, 200, 100, 50, 200]
Prep = [50, 95, 50, 59, 99, 50, 23, 10, 10, 60]
X = DEM #independent variable
Y = Prep #dependent variable
slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
But now I want to add weight to stations like:
Weight = [0.3, 0.1, 0.1, 0.1, 0.2, 0.05, 0.05, 0.05, 0.05, 0.05]
The diagram is similar to http://ppt.cc/XXrEv
I found weighted least squares to do this, but I want to know how and why it works, or if it is wrong.
import numpy as np import statsmodels.api as sm Y = [1, 3, 4, 5, 2, 3, 4] X = range(1, 8) X = sm.add_constant(X) wls_model = sm.WLS(Y, X, weights=range(1, 8)) results = wls_model.fit() results.params
+3
source to share
1 answer
Answer:
import numpy as np
import statsmodels.api as sm
start_time = time.time()
alist=[2,4,6]
DEM=[200,300,400,500,300,600]
PRE=[20,19,18,20,21,22,30,23]
A_DEM=[]
A_PRE=[]
W=[]
for a in alist:
A_DEM.append(DEM[a-1])
A_PRE.append(PRE[a-1])
W.append(1)
X = sm.add_constant(A_DEM)
Y = A_PRE
wls_model = sm.WLS(Y,X, weights=W).fit()
print wls_model.params[0] # intercept
print wls_model.params[1] # slope
print wls_model.rsquared #rsquared
print wls_model.summary()
And I found that WLS would automatically normalize. This way you can add weight directly.
0
source to share