フィルターのクリア

How to calculate errors in pearson linear fit

110 ビュー (過去 30 日間)
aditi
aditi 2023 年 7 月 9 日
コメント済み: Francesco Sarnari 2024 年 3 月 10 日
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

採用された回答

RANGA BHARATH
RANGA BHARATH 2023 年 7 月 10 日
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 件のコメント
aditi
aditi 2023 年 7 月 20 日
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 2024 年 3 月 10 日
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

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeLinear and Nonlinear Regression についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by