✅作者简介:热爱科研的算法开发者,Python、Matlab项目可交流、沟通、学习。
🍎个人主页:算法工程师的学习日志
昨天分享了描述性统计量相关内容,今天把昨天剩下的部分写完,
昨天文章链接:
前言:在针对非物理信号分析的时候,例如用户数、用户经常出入的地点、疾病感染人数等,这部分涉及到数据分析知识,本文分享一下Matlab常用的描述性统计量函数和线性回归的基本应用。
1、线性回归简介
数据模型明确描述预测变量与响应变量之间的关系。线性回归拟合模型系数为线性的数据模型。最常见的线性回归类型是最小二乘拟合,它可用于拟合线和多项式以及其他线性模型。
在对各对数量之间的关系进行建模之前,最好进行相关性分析,以确定这些数量之间是否存在线性关系。
如果需要使用非线性模型拟合数据,请转换变量以使关系变成线性关系。或者尝试使用nlinfit 函数、lsqcurvefit 函数直接拟合非线性函数。
2、简单线性回归
线性回归对一个因变量(即响应变量)y 与一个或多个自变量(即预测变量)x1,...,xn之间的关系进行建模。简单线性回归使用以下关系方程:
y=β0+β1x+ϵ
其中,β0是 y 轴截距,β1是斜率(即回归系数),ϵ 是误差项。
首先确定一组(n 个)x 和 y 的观测值,以 (x1,y1), (x2,y2), ..., (xn,yn) 形式给出。对这些值应用简单线性回归关系方程,构成一个线性方程组。这些方程以矩阵形式表示如下:
假设
现在关系变为 Y=XB。
load x.mat
load y.mat
b1 = x\y
b1 =1.372716735564871e-04
b1 是斜率或回归系数。线性关系为 y=β1x=0.0001373x。
yCalc1 = b1*x;
scatter(x,y)
hold on
plot(x,yCalc1)
grid on
在模型中加入 y 轴截距β0 以改进拟合,即y=β0+β1x。用一列 1 填补 x 并使用 \ 运算符计算 β0。
X = [ones(length(x),1) x];
b = X\y
此结果表示关系 y=β0+β1x=142.7120+0.0001256x。
yCalc2 = X*b;
plot(x,yCalc2,'--')
legend('原始数据','方法1','方法2','Location','best');
如图所示,两个拟合非常相似。判断更佳拟合的一种方法是计算决定系数 R2。R2 用于度量模型能够在多大程度上预测数据,其值介于 0 和 1 之间。R2 的值越高,模型预测数据的准确性越高。
其中,ˆy 表示 y 的计算值,‾y 是 y 的均值,R2 定义为
通过比较 R2 的值,找出两个拟合中较好的一个。如 R2 值所示,包含 y 轴截距的第二个拟合更好。
Rsq1 = 1 - sum((y - yCalc1).^2)/sum((y - mean(y)).^2)
Rsq2 = 1 - sum((y - yCalc2).^2)/sum((y - mean(y)).^2)
Rsq1 =
0.822235650485566
Rsq2 =
0.838210531103428
3、残差与拟合优度
残差是响应变量(因变量y)的观测值与模型的预测值之间的差。当拟合的模型适合数据时,残差接近独立随机误差。即,残差分布不应该呈现出可辨识的模式。
利用线性模型产生拟合需要尽量减小残差平方和。该最小化的结果即为最小二乘拟合。
拟合优度的一个度量是决定系数 或 R2。该统计量表明通过拟合模型得到的值与模型可预测的因变量的匹配程度。拟合模型的残差方差定义 R2:
R2 = 1 – SSresid / SStotal
SSresid 是与回归的残差的平方和。SStotal 是与因变量均值的差的平方和(总平方和)。
3.1 通过多项式拟合计算 R2
从多项式回归的系数得出 R2,以确定线性模型对 y 的方差的解释率,
利用 polyfit 计算从 x 预测 y 的线性回归:
p = polyfit(x,y,1)
p =
1.5229 -2.1911
p(1) 是斜率,p(2) 是线性预测变量的截距。
调用 polyval 以使用 p 预测 y,调用结果 yfit:
yfit = polyval(p,x);
使用 polyval,在本例中拟合方程为:
yfit = p(1) * x + p(2);
将残差值计算为有符号数的向量:
yresid = y - yfit;
计算残差的平方并相加,以获得残差平方和:
SSresid = sum(yresid.^2);
通过将观测次数减 1 再乘以 y 的方差,计算 y 的总平方和:
SStotal = (length(y)-1) * var(y);
计算 R2:
rsq = 1 - SSresid/SStotal
rsq =
0.8707
这表明,线性方程 1.5229 * x -2.1911 可预测变量 y 中方差的 87%。
3.2 计算多项式回归的调整 R2
通常可通过拟合更高次多项式,减少模型中的残差。当您添加更多项时,会增加决定系数 R2。您可获得更接近数据的拟合,但代价是模型更为复杂,此时需要对该统计量R2进行改进,调整 R2 中包括了一项对模型中项数的罚值。因此,调整 R2 更适合比较不同的模型对同一数据的拟合程度。调整 R2 定义如下:
R2adjusted = 1 - (SSresid / SStotal)*((n-1)/(n-d-1))
其中 n 是数据中的观测值数量,d 是多项式的次数。(线性拟合的阶数为 1,二次拟合为 2,三次拟合为 3,依此类推。)
调用 polyfit 生成三次拟合,以从 x 预测 y:
p = polyfit(x,y,3)
p =
-0.0003 0.0390 0.2233 6.2779
p(4) 是三次预测变量的截距。
调用 polyval 以使用 p 中的系数预测 y,将结果命名为 yfit:
yfit = polyval(p,x);
polyval 计算显式方程,手动输入则如下所示:
yfit = p(1) * x.^3 + p(2) * x.^2 + p(3) * x + p(4);
计算残差值:
yresid = y - yfit;
计算残差的平方并相加,以获得残差平方和:
SSresid = sum(yresid.^2);
通过将观测次数减 1 再乘以 y 的方差,计算 y 的总平方和:
SStotal = (length(y)-1) * var(y);
计算三次拟合的简单 R2:
rsq = 1 - SSresid/SStotal
rsq =
0.9083
最后,计算调整 R2 :
rsq_adj = 1 - SSresid/SStotal * (length(y)-1)/(length(y)-length(p))
rsq_adj =
0.8945
调整 R2 (0.8945) 小于简单 R2 (0.9083)。后者可以更可靠地估计多项式模型的预测能力。
在许多多项式回归模型中,对方程添加次数会使 R2 和调整 R2 都增加。在上面的示例中,与线性拟合相比,使用三次拟合使这两种统计量都有所增加。线性拟合并非始终差于更高阶拟合:更复杂拟合的调整 R2 也有可能低于更简单的拟合,此时表明增加复杂度并不适当。此外,虽然基本拟合工具生成的多项式回归模型的 R2 值始终在 0 和 1 之间变动,但某些模型的调整 R2 可能为负值,这表明该模型的项太多。