# Fit Plots to A Given Slope

9 views (last 30 days)

Show older comments

##### 1 Comment

dpb
on 21 Aug 2013

Is this slope/fit in log-log space I presume?

Why not approach it the other way 'round--just do the fit and find the slope then compare it to the three choices for nearest neighbor --

Simple example...

>> y=rand(10,1); x=1:10; x=x'; % make up some data

>> c=polyfit(x,5*sort(y),1)

c =

0.4067 -0.0011

>> bnear=interp1([0.5 1 2]',[0.5 1 2]',c(1),'nearest','extrap')

bnear =

0.5000

>> c=polyfit(x,10*sort(y),1)

c =

0.8134 -0.0022

>> bnear=interp1([0.5 1 2]',[0.5 1 2]',c(1),'nearest','extrap')

bnear =

1

>> c=polyfit(x,20*sort(y),1)

c =

1.6268 -0.0045

>> bnear=interp1([0.5 1 2]',[0.5 1 2]',c(1),'nearest','extrap')

bnear =

2

>>

Easy enough to vectorize, of course...

### Accepted Answer

Walter Roberson
on 21 Aug 2013

x = [....]; %the vector of x values that "data" exist at

sd_half = std(data - 0.5 * x);

sd_one = std(data - x);

sd_two = std(data - 2 * x);

I would suggest, though, trying

coeffs = polyfit(x, data, 2);

slope = coeffs(1);

You might to use the three-output version of polyfit to have centering and scaling done.

##### 4 Comments

dpb
on 24 Aug 2013

Edited: dpb
on 25 Aug 2013

What's wrong w/ my solution--just apply it in the log-log space if that's where the correlation is.

Walter's works, too, but seems simpler to me to do the match to the nearest computed slope rather than find the minimum variance his does (didn't think about the assumed slope of unity still leading to the smallest variance w/ choice of exponent was what got me initially) as only compute the one slope and a lookup as opposed to three variances and the comparison...overall, probably not a great deal of difference, though.

Pick one (or both and compare) and go with it... :)

### More Answers (0)

### See Also

### Categories

### Products

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!