Clear Filters
Clear Filters

How to calculate errors in pearson linear fit

114 views (last 30 days)
Hello everyone,
I have done straight line fitting by using polyfit command where i gave polynomial = 1 and found the values of m and c of the equation mx + c = y
Now i want to find errors associated with m and c i.e I want finally
m +/- error c +/- error and also the r value
It would be nice if anyone could help me with it. I am badly stuck :(
Thanks

Accepted Answer

RANGA BHARATH
RANGA BHARATH on 10 Jul 2023
Hi @aditi. Here is the solution and code for your question.
Question: How can I calculate the errors associated with the slope (m) and y-intercept (c) of a straight line fit using the polyfit command with polynomial degree 1? Additionally, how can I determine the coefficient of determination (r)?
Solution:
To find the errors associated with the slope (m) and y-intercept (c) in a linear regression model (polynomial = 1), as well as the coefficient of determination (r), you can use the "polyfit" function along with additional calculations.
Code:
% Sample data points
x = [1, 2, 3, 4, 5];
y = [2, 4, 6, 8, 10];
% Perform linear regression using polyfit
coefficients = polyfit(x, y, 1); % As polynomial = 1
m = coefficients(1); % Slope
c = coefficients(2); % Y-intercept
% Calculate the residuals (errors)
residuals = y - (m*x + c);
% Calculate the standard deviation of the residuals
residuals_std = std(residuals);
% Calculate the standard error of the slope and y-intercept
n = length(x); % Number of data points
x_mean = mean(x);
x_var = sum((x - x_mean).^2);
m_std_error = residuals_std/sqrt(x_var*(n - 1));
c_std_error = residuals_std*sqrt(sum(x.^2)/(n*x_var));
% Calculate the coefficient of determination (r)
y_mean = mean(y);
ss_total = sum((y - y_mean).^2);
ss_residual = sum(residuals.^2);
r_squared = 1 - (ss_residual/ss_total);
r = sqrt(r_squared);
% Display the results
disp(["Slope (m): ", num2str(m)]);
"Slope (m): " "2"
disp(["Slope Error: ", num2str(m_std_error)]);
"Slope Error: " "9.9301e-17"
disp(["Y-Intercept (c): ", num2str(c)]);
"Y-Intercept (c): " "5.1884e-17"
disp(["Y-Intercept Error: ", num2str(c_std_error)]);
"Y-Intercept Error: " "6.5869e-16"
disp(["Coefficient of Determination (r): ", num2str(r)]);
"Coefficient of Determination (r): " "1"
  • In this code, we first perform linear regression using polyfit to obtain the slope (m) and y-intercept (c).
  • Then, we calculate the residuals (errors) by subtracting the predicted values from the actual values.
  • The standard deviation of the residuals is calculated to estimate the overall error.
  • The standard error of the slope and y-intercept are then calculated using the residuals' standard deviation, the number of data points, and the variance of the x-values.
  • Finally, the coefficient of determination (r) is calculated using the sum of squares of residuals and the total sum of squares.
Links to Documentation:
Here are some documentation links that you can refer to for more information:
  3 Comments
aditi
aditi on 20 Jul 2023
Hi
Could you please help me understand the maths behind the above code.. like how to derive the formulae of slope and intercept errors? And how to find the residuals?
Thanks
Francesco Sarnari
Francesco Sarnari on 10 Mar 2024
thanks so much for this very useful piece of code. My question to you is the following:
how would this script change if I were willing to calculate the errors associated with a
quadratic, rather than linear fitting? How did you determine the analytical expressions for m_std_error and c_std_error?
Cheers,
Francesco

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!