The polyfitw function computes weighted polyfits.
Back to Climate Data Tools Contents. polyfitw computes weighted polyfits.
p = polyfitw(x,y,n) p = polyfitw(x,y,n,w) [p,S,mu] = polyfitw(...)
p = polyfitw(x,y,n) calculates the unweighted polynomial fit of x vs y to the nth order, exactly like the standard Matlab polyfit function.
p = polyfitw(x,y,n,w) specifies weights to apply to each y value. For measurements whose formal error estimates are given by err, try using weights w = 1/err.^2.
[p,S,mu] = polyfitw(...) returns the S structure and centering/scaling values mu for use in polyval. Don't forget, if you return more than one output (meaning [p,S,mu] instead of just p), the values in p will be scaled according to the values in mu.
Example: 1st order:
Here's some scattered data with a known slope of -12, and some prescribed errors associated with each measurement:
x = [1 1.5 2.1 3 4 6 6.6 7.3 7.5 8 8.6 9 9.5]; err = [1 2 -1 3 6 1 3 -7 4 15 30 25 1]; y = 654 - 12*x + err; % Weights from errors: w = 1./err.^2; figure scatter(x,y,50,w,'filled') hold on axis tight cb = colorbar; ylabel(cb,'weight') cmocean amp
Here's how to use the standard Matlab function polyfit to find the unweighted slope of the line
p = polyfit(x,y,1)
p = -10.35 650.99
That tells us the unweighted slope is -10.35, although we imposed a slope of -12. The difference is due to the error in the measurements. Notably, you can use the CDT trend function to get the same answer:
ans = -10.35
The mismatch between the -10.35 slope value and the imposed -12 slope is due to measurement error. Fortunately, we know how much weight to give to each measurement, and we can weight accordingly with polyfitw:
pw = polyfitw(x,y,1,w)
pw = -11.90 654.34
Now -11.9 is not exactly the -12 slope we imposed, but this is much closer than the estimate from the unweighted trend. Here's the difference:
xi = 1:10; hold on plot(xi,polyval(p,xi)) plot(xi,polyval(pw,xi)) legend('data points','unweighted','weighted')
This function is part of the Climate Data Toolbox for Matlab. The function and supporting documentation were written by Chad A. Greene of NASA Jet Propulsion Laboratory.