首页 > 其他分享 >在Matlab中如何计算决定系数R^2和相关系数r

在Matlab中如何计算决定系数R^2和相关系数r

时间:2024-06-10 22:54:32浏览次数:20  
标签:pre 决定系数 相关系数 Matlab 计算 拟合 sum

Problem

当你使用polyfit函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何。聪明的你肯定觉得聪明的 Matlab 的polyfit函数的返回值中会有\(R^2\)或者\(r\)吧。你尝试disp了一下,发现有一个结构体\(S\)。再查一查帮助文档,发现误差估计结构体\(S\)中只有一个范德蒙德矩阵\(R\)、自由度\(df\)和残差的范数\(normr\),并没有你想要的\(R^2\)或者\(r\)。

Solution

很遗憾,我们还是需要手动计算这两个系数。

假设X是原始数据自变量,Y是原始数据因变量,我们先进行多项式拟合:

p = polyfit(X, Y, n); % n是多项式次数
Y_pre = polyval(p,X);

得到了Y_pre为多项式拟合后的预测值。

决定系数R-squared的计算

我们使用如下公式计算\(R^2\)​:

\[RSS=\sum (y_{pre}-y)^2\\ TSS=\sum (y-\overline y)^2\\ R^2=1-\frac{RSS}{TSS} \]

代码如下:

SSres = sum((Y_pre - Y).^2); % 残差平方和
SStot = sum((Y - mean(Y)).^2); % 总平方和
R_squared = 1 - (SSres / SStot); % R-squared

相关系数r的计算

计算相关系数\(r\),可以使用corrcoef函数先计算相关系数矩阵,取其非对角线元素的值。

代码如下:

r = corrcoef(Y_pre, Y);
disp(r(1,2))

Others

\(r\)(相关系数)和 \(R^2\)​(决定系数,也称为R-squared)是可以用于衡量数据的不同的方面的两个不同的统计量。

Calculation

\[R^2=1-\frac{RSS}{TSS}=1-\frac{\sum (y_{pre}-y)^2}{\sum (y-\overline y)^2}\\ r=\frac{n(\sum x y)-(\sum x)(\sum y)}{\sqrt{[n \sum x^2-(\sum x)^2][n \sum y^2-(\sum y)^2]}}\\ R^2=r^2 \]

Comparison

  1. 相关系数 \(r\in[-1,1]\):衡量两个变量之间线性关系的强度和方向。
    • \(r = 1\) 表示完全正相关。
    • \(r = -1\) 表示完全负相关。
    • \(r = 0\) 表示没有线性相关。
  2. 决定系数 \(R^2\in[0,1]\):衡量模型对因变量变异的解释程度。
    • R² = 1 表示模型完美地解释了数据的变异。
    • R² = 0 表示模型没有解释数据的任何变异。

R² 衡量模型拟合优度的指标,告诉我们模型对数据变异的解释程度有多好。而相关系数 r 仅仅告诉我们两个变量之间线性关系的强度,它并不对模型拟合优度全面评估。

如果想要更全面的评估,通常会看 \(R^2\) 。

如果只关心两个变量之间是否有线性关系,看相关系数 \(r\)。

References

polyfit and R^2 value - MATLAB Answers - MATLAB Central (mathworks.cn)

相关系数 - MATLAB corrcoef - MathWorks 中国

标签:pre,决定系数,相关系数,Matlab,计算,拟合,sum
From: https://www.cnblogs.com/Vanilla-chan/p/18241194

相关文章