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개)
bym
2011년 9월 24일
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
the cyclist
2011년 9월 25일
What is "pp" in your second line?
Walter Roberson
2011년 9월 25일
Looks like a pp = polyfit() call went missing, but I don't know what parameters were intended.
bym
2011년 9월 25일
sorry about that, sloppy cut and paste. Thanks for pointing that out
the cyclist
2011년 9월 23일
0 개 추천
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.
카테고리
도움말 센터 및 File Exchange에서 Support Vector Machine Regression에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!