# Correlation regression lines between two parameters

6 views (last 30 days)
Amjad Iqbal on 8 Nov 2021
Commented: Adam Danz on 9 Nov 2021
Hello dear Researchers,
I have a query need your expertise to resolve.
I want to add correlation regression for two paramters for comparison purpose.
I have attached sub-plots which are scatter plots among two orientations.
Now purpose is to add correlation regression line i.e., one plot I added from a reference.

yanqi liu on 9 Nov 2021
Edited: yanqi liu on 9 Nov 2021
sir, may be upload some data, use lsqcurvefit、polyfit and so on to compute the coef
clc; clear all; close all;
xdata = linspace(0,3);
ydata = 1.3*xdata + 0.05*randn(size(xdata));
lb = [];
ub = [];
fun = @(x,xdata)x(1)*xdata+x(2);
x0 = [0,0];
x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub)
Local minimum found. Optimization completed because the size of the gradient is less than the value of the optimality tolerance.
x = 1×2
1.3048 -0.0023
plot(xdata,ydata,'ko',xdata,fun(x,xdata),'r-','LineWidth',2)
legend('Data','Fitted exponential')
title('Data and Fitted Curve')
Adam Danz on 9 Nov 2021
Yes, lsqcurvefit will provide the same results as polyfit or fitlm but the latter two are designed for linear models and do not require making initial guesses to the parameter values. I'm not trying to convince anyone to change their approach (or their selected answer). I'm arguing that lsqcurvefit is not the best tool for linear regression.
polyfit is much more efficient than lsqcurvefit (95x faster):
x = rand(1,100);
y = 4.8*x+2.1 +rand(1,100);
n = 5000;
tic
for i = 1:n
opts = struct('Display','off');
fun = @(x,xdata)x(1)*xdata+x(2);
p = lsqcurvefit(fun, [0,0],x,y,[],[],opts);
end
T1 = toc % time in seconds
T1 = 13.2634
p
p = 1×2
4.9170 2.4408
tic
for i = 1:n
p2 = polyfit(x,y,1);
end
T2 = toc % time in seconds
T2 = 0.1386
p2 % same results
p2 = 1×2
4.9170 2.4408
% Difference in time
T1/T2
ans = 95.7249

Adam Danz on 8 Nov 2021
Edited: Adam Danz on 8 Nov 2021
Common methods of adding a simple linear regression line
1. Use lsline which will add a regression line for each set of data in the plot.
2. Use polyfit (degree 1) & refline to compute the regression coefficients and plot the line.
3. Use fitlm & refline to compute the regression coefficients and plot the line.
Examples of #1 & #2
Example of #3
If you want to compute correlation, see corr or corrcoeff.
##### 2 CommentsShowHide 1 older comment
Amjad Iqbal on 9 Nov 2021
Thanks a lot dear Adam Danz and Image Analyst
That's seems a proper way to add several numerical comparisons. It helps a lot.

R2015a

### Community Treasure Hunt

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

Start Hunting!