Asked by Sharah
on 28 Sep 2016

I have a data of DataX and Data Y, which is plotted in the blue line as in picture.I am trying to analyse how much the blue line is deviated from the black dotted line x and y = [0:1:7]. The thing is, if i want to compare the linear fit, the linear fit of my data does not start from 0 (yellow line).

Can anyone suggest what kind of metric that I can use here? If possible, I would like a way to measure say for example if the fit of my data falls below the dotted line, the value will be <0, and if it is above the >0.

Answer by Massimo Zanetti
on 28 Sep 2016

Edited by Massimo Zanetti
on 28 Sep 2016

Accepted Answer

Ok, you just have to use the right statistics. Look here:

%random points

x=1:10;

y=rand(1,10);

%fit data

p=polyfit(x,y,1);

yfit=p(2)+x*p(1);

%residuals

yres = y-yfit;

%deviation from mean

ymean = mean(y(:));

ydev = y-ymean;

%compute R2

SSR = sum(yres.^2);

SST = sum(ydev.^2);

R2 = 1-SSR/SST;

%plot fitting

plot(x,y,'b',x,yfit,'r');

The R2 number is Rsquared statistics explaining how the fit line well represents the points.

Sharah
on 28 Sep 2016

The naswer that you are suggesting over here would calculate how well the data explain to the polyfit of your data. what I am trying to do is to see how well the data is explaining to the linear line of for example xlin=ylin =1:7 (which will be the same size with the data)

function [rsq] = linearity(xData, yData)

xlin = 0:max(xData)/(length(xData)-1):max(xData);

ylin = 0:max(xData)/(length(xData)-1):max(xData);

p = polyfit(xlin, ylin,1);

yfit = p(1) * xlin +p(2); %similar to polyval(p, x)

yresid = yData - yfit';

SSresid = sum(yresid.^2);

SStotal = (length(yData)-1)*var(yData);

rsq= 1-SSresid/SStotal;

will this one works? instead of taking the Rsquared to the polyfit of orginial data, I take 'rsquared' to the linear line that I want (the reference line)

Massimo Zanetti
on 28 Sep 2016

Ok, so it is much simple. Just replace the polyfit line with reference one.

%random points

x=1:10;

y=rand(1,10);

yref=1:10;

%residuals

yres_ref = y-yref;

%deviation from mean

ymean = mean(y(:));

ydev = y-ymean;

%compute R2

SSR = sum(yres_ref.^2);

SST = sum(ydev.^2);

R2 = 1-SSR/SST;

%plot fitting

plot(x,y,'b',x,yref,'r');

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 2 Comments

## Massimo Zanetti (view profile)

## Direct link to this comment

https://au.mathworks.com/matlabcentral/answers/304850-calculating-linear-fit-with-respect-from-origin-0-0#comment_394372

## Sharah (view profile)

## Direct link to this comment

https://it.mathworks.com/matlabcentral/answers/304850-calculating-linear-fit-with-respect-from-origin-0-0#comment_394375

Sign in to comment.