필터 지우기
필터 지우기

Linear fit to log x axis scatter and correlation calculation

조회 수: 4 (최근 30일)
Bhowmik.U
Bhowmik.U 2020년 1월 22일
댓글: dpb 2020년 1월 23일
I have two data streams 618*1 doubles; say 'a' and 'b'
I want to plot scatter of 'a' versus 'b', 'b' in x axis in log scale
I also need a best fit line and a correlation coefficient
My code runs
scatter (a,b,10,[0.5,0.5,0.5],'filled')
set(gca,'XScale','log')
hold on;
set(gca,'Linewidth,2, FontSize',14,'FontWeight','bold');
box on;
p=polyfit(a,b,1); f=polyval(p,a);
plot(a,f,'--')
I am getting multiple fitting lines..one straight..rest curved...in same plot...I am looking for a single line. Also I require to find correlation coefficient.
PS: I even tried to replace a by log10(a) in the following lines as
p=polyfit(log10(a),b,1); f=polyval(p,log10(a));
plot(log10(a),f,'--')
NOw I am getting the multiple fitting lines away from my scatter...kindly help...I also shall require the correlation value

답변 (1개)

dpb
dpb 2020년 1월 22일
You forgot to attach the data so made something up...
x=1:10;
y=sort(lognrnd(10,1,1,10));
b=polyfit(x,log10(y),1);
yf=10.^polyval(b,[x(1) x(end)])
figure
scatter(1:10,y)
hLF=plot([x(1) x(end)],yf,'--');
xlim([0.5 10.5])
hAx=gca;
hAx.YScale='log';
gives
untitled.jpg
Rsq from log is fraught with danger; beware.
  댓글 수: 2
Bhowmik.U
Bhowmik.U 2020년 1월 23일
편집: dpb 2020년 1월 23일
I enclose the data.
The issue is I wish to have 'b' column as x axis, change the x axis to log scale and y axis unchanged and then obtain a straight line fit onto this and the correlation coefficient.
scatter(b,a,10,[0.5 0.5 0.5],'filled')
hold on;
set(gca,'LineWidth',2)
set(gca,'FontSize',14,'FontWeight','bold')
set(gca,'XScale','log')
text(5,2000,str,'FontSize',14, 'FontWeight','bold');
box on;
hold on;
p=polyfit(b,a,1); f=polyval(p,b);
plot(b,f,'--')
even if I use log(b) instead of b in last two lines same issue.
dpb
dpb 2020년 1월 23일
Just reverse x,y above, excepting since it is the independent variable in log scale not the dependent (far less common); hence my misread earlier). Using the same data as previous x,y that happen to still be in my workspace:
figure
scatter(y,x)
hAx=gca;
hAx.XScale='log';
xlim([0.035 1]*1E5)
b=polyfit(y,log10(xx),1)
yf=polyval(b,log10([y(1) y(end)]))
hLF=plot([y(1) y(end)],yf,'--');
results in
untitled.jpg
Rsq is just
Rsq = 1 - SSres/SStot
SSres => Sum of Squares Residuals
SStot => Total Sum of Squares
Again I'll caution against Rsq on logged variables; the value is generally heavily overestimated altho on semilogx with y in linear scale, not so much as other-way-round.
If have Statistics TB, the curve fitting routines in it have the calculation returned...

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Least Squares에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by