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
builtin functions to make linear
regression

easier for all of us, but we'd like to
show a stepbystep 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/(n2));
%
Interpolation value
y0 = a +
b*x0;
If we have the following data available (where every y_{i} _{ }has its correspondent x_{i}):
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 the 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 a_{1}x_{i}
+ a_{0
}gives the best approximation for y_{i}.
We find the coefficients with 'polyfit'
and evaluate any x_{i}
with 'polyval'.
The Matlab results is
a =
4.0472 106.7917
y0 =
176.5139
y0 =
184.6083
confirming our previous numbers.
From
'Linear Regression'
to home
From
'Linear Regression' to 'Matlab Cookbook'

