本文同步发布在我的网站上,欢迎来看看~
Problem
当你使用polyfit
函数进行多项式拟合之后,你希望计算决定系数或者相关系数看看拟合效果如何。聪明的你肯定觉得聪明的 Matlab 的polyfit
函数的返回值中会有
R
2
R^2
R2或者
r
r
r吧。你尝试disp
了一下,发现有一个结构体
S
S
S。再查一查帮助文档,发现误差估计结构体
S
S
S中只有一个范德蒙德矩阵
R
R
R、自由度
d
f
df
df和残差的范数
n
o
r
m
r
normr
normr,并没有你想要的
R
2
R^2
R2或者
r
r
r。
Solution
很遗憾,我们还是需要手动计算这两个系数。
假设X
是原始数据自变量,Y
是原始数据因变量,我们先进行多项式拟合:
p = polyfit(X, Y, n); % n是多项式次数
Y_pre = polyval(p,X);
得到了Y_pre
为多项式拟合后的预测值。
决定系数R-squared的计算
我们使用如下公式计算
R
2
R^2
R2:
R
S
S
=
∑
(
y
p
r
e
−
y
)
2
T
S
S
=
∑
(
y
−
y
‾
)
2
R
2
=
1
−
R
S
S
T
S
S
\begin{align} RSS&=\sum (y_{pre}-y)^2\\ TSS&=\sum (y-\overline y)^2\\ R^2&=1-\frac{RSS}{TSS} \end{align}
RSSTSSR2=∑(ypre−y)2=∑(y−y)2=1−TSSRSS
代码如下:
SSres = sum((Y_pre - Y).^2); % 残差平方和
SStot = sum((Y - mean(Y)).^2); % 总平方和
R_squared = 1 - (SSres / SStot); % R-squared
相关系数r的计算
计算相关系数
r
r
r,可以使用corrcoef
函数先计算相关系数矩阵,取其非对角线元素的值。
代码如下:
r = corrcoef(Y_pre, Y);
disp(r(1,2))
Others
r r r(相关系数)和 R 2 R^2 R2(决定系数,也称为R-squared)是可以用于衡量数据的不同的方面的两个不同的统计量。
Calculation
R 2 = 1 − R S S T S S = 1 − ∑ ( y p r e − y ) 2 ∑ ( y − y ‾ ) 2 r = n ( ∑ x y ) − ( ∑ x ) ( ∑ y ) [ n ∑ x 2 − ( ∑ x ) 2 ] [ n ∑ y 2 − ( ∑ y ) 2 ] R 2 = r 2 \begin{gather} 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 \end{gather} R2=1−TSSRSS=1−∑(y−y)2∑(ypre−y)2r=[n∑x2−(∑x)2][n∑y2−(∑y)2]n(∑xy)−(∑x)(∑y)R2=r2
Comparison
- 相关系数
r
∈
[
−
1
,
1
]
r\in[-1,1]
r∈[−1,1]:衡量两个变量之间线性关系的强度和方向。
- r = 1 r = 1 r=1 表示完全正相关。
- r = − 1 r = -1 r=−1 表示完全负相关。
- r = 0 r = 0 r=0 表示没有线性相关。
- 决定系数
R
2
∈
[
0
,
1
]
R^2\in[0,1]
R2∈[0,1]:衡量模型对因变量变异的解释程度。
- R² = 1 表示模型完美地解释了数据的变异。
- R² = 0 表示模型没有解释数据的任何变异。
R² 衡量模型拟合优度的指标,告诉我们模型对数据变异的解释程度有多好。而相关系数 r 仅仅告诉我们两个变量之间线性关系的强度,它并不对模型拟合优度全面评估。
如果想要更全面的评估,通常会看 R 2 R^2 R2 。
如果只关心两个变量之间是否有线性关系,看相关系数 r r r。
References
polyfit and R^2 value - MATLAB Answers - MATLAB Central (mathworks.cn)