Multiple regressions in a scatter plot

I have several scatter plots that look like a hockey stick, or even more crooked, and I want to fit a linear trend in each of the segments. Is there a way to get this? Thanks

回答(3 个)

one way: [edit: added pp]
pp = mkpp([0 5 10],[[.5,0];[4,2.5]]);
x = (0:.1:10)';
y = ppval(pp,x);
y = y+rand(101,1); % make hockey stick example data
plot(x,y,'b.') % plot data
hold on
x1 = x(1:50); x1 = [ones(size(x1)),x1];
x2 = x(51:101); x2 = [ones(size(x2)),x2];
y1 = y(1:50); y2 = y(51:101);
c1 = x1\y1; c2 = x2\y2; % least squares coefficients
yhat1 = x1*c1; yhat2 = x2*c2; % fits
plot(x(1:50),yhat1,'--',...
x(51:101),yhat2,'--','LineWidth',2)
[edit]
% R^2 calculation
res1 = y1-yhat1; res2 = y2-yhat2;
r_sq1 = 1-(sum(res1.^2)/sum((y1-mean(y1)).^2));
r_sq2 = 1-(sum(res2.^2)/sum((y2-mean(y2)).^2));

3 个评论

What is "pp" in your second line?
Looks like a pp = polyfit() call went missing, but I don't know what parameters were intended.
sorry about that, sloppy cut and paste. Thanks for pointing that out

请先登录,再进行评论。

the cyclist
the cyclist 2011-9-23
One way to do this would be with the nlinfit() function of the Statistics Toolbox. You could define a function that is parameterized to be a series of line segments, and then nlinfit() will find the parameters that give the best fit to the data.

1 个评论

The problem is I don't have the statistics toolbar in my university's Matlab

请先登录,再进行评论。

Julio
Julio 2011-9-25
Thanks a million! it works nice. Although I will have to look manually for the breaks of all the plot, but at least I can do it now. But how can I get now the R^2 of the fits?

类别

提问:

2011-9-23

Community Treasure Hunt

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

Start Hunting!

Translated by