 |
Linear
Regression
This program fits a straight line to a given set of coordinates using
the method of least
squares ( linear regression ). The coefficients of the line,
coefficient
of determination, coefficient
of correlation and standard
error of estimate are calculated. Once the line has been
fitted, you may predict values of y
for given values of x.
We develop the following Matlab code (note that Matlab has its own
built-in functions to make linear
regression easier for all of us, but we'd like to
show a step-by-step way to do it, to understand the inner concepts):
function [y0, a, b, r2, r, k2] = lin_reg(x, y, x0)
% Number of
known points
n = length(x);
%
Initialization
j = 0; k = 0; l = 0; m = 0; r2 = 0;
% Accumulate
intermediate sums
j = sum(x);
k = sum(y);
l = sum(x.^2);
m = sum(y.^2);
r2 = sum(x.*y);
% Compute
curve coefficients
b = (n*r2 - k*j)/(n*l - j^2);
a = (k - b*j)/n;
% Compute
regression analysis
j = b*(r2 - j*k/n);
m = m - k^2/n;
k = m - j;
% Coefficient
of determination
r2 = j/m;
% Coefficient
of correlation
r = sqrt(r2);
% Std. error
of estimate
k2 = sqrt(k/(n-2));
%
Interpolation value
y0 = a + b*x0;
If we have the following data available (where every yi has its correspondent xi):
x = [71
73 64 65 61
70 65 72 63 67 64];
y = [160
183 154 168 159 180 145 210 132 168 141];
we can call the function above in this manner (to obtain interpolated
values for x = 70 and x = 72):
[y0, a, b, r2, r, k2] = lin_reg(x, y, 70)
[y0] = lin_reg(x, y, 72)
And Matlab response is:
y0 =
176.5139
a =
-106.7917
b =
4.0472
r2 =
0.5563
r =
0.7458
k2 =
15.4135
y0 =
184.6083
We can use the 'polyfit'
and 'polyval'
instructions in Matlab for this purpose, like this:
a = polyfit(x,y,1)
y0 = polyval(a,70)
y0 = polyval(a,72)
Fitting
a straight line through the data means thet we want to find the
polynomial coefficients of a first order polynomial such that a1xi
+ a0
gives the best approximation for yi.
We find the coefficients with 'polyfit'
and evaluate any xi
with 'polyval'.
Matlab result is
a =
4.0472 -106.7917
y0 =
176.5139
y0 =
184.6083
confirming our previous results.
From
'Linear Regression'
to home
From
'Linear Regression' to 'Matlab Cookbook'


|
|