基于matlab的多元线性回归分析

二、多元线性回归原理

2.1、数学模型

在社会生活及生产实践中会经常遇到一种问题,即我们非常关注一个量的变化,而这个量受到另一个或是多个因素的影响,我们想要了解这些因素是如何影响我们最为关注的这个量的以及这些因素对我们最为关注的这个量的影响权重分别有多大,知道了这些,我们就可以对该量变化所反映的相关问题做出分析和评价,并对其未来发展趋势进行预测和控制,这里就要用到数理统计中一个非常重要而普遍的分析方法,即回归分析法。

如果一个因变量y与k个自变量 x 1 , x 2 , … , x k x_{1}, x_{2}, \dots, x_{k} x1,x2,,xk存在线性相关关系,那么就可以用多元线性回归模型
y = a 0 + a 1 x 1 + a 2 x 2 + … + a k x k , 公式1 y=a_{0}+a_{1} x_{1}+a_{2} x_{2}+\ldots+a_{k} x_{k},\text{公式1} y=a0+a1x1+a2x2++akxk,公式1
对其进行描述,其中未知常量 a 0 , a 1 , … , a k a_{0}, a_{1}, \dots, a_{k} a0,a1,,ak称为回归模型系数,若n次抽样,第 i i i次抽样数据为 ( y i , x 1 i , x 2 i , ⋯   , x k i ) \left(y_{i}, x_{1 i}, x_{2 i}, \cdots, x_{k i}\right) (yi,x1i,x2i,,xki)那么就有
{ y 1 = a 0 + a 1 x 11 + a 2 x 21 + … + a k x k 1 + ε 1 y 2 = a 0 + a 1 x 12 + a 2 x 22 + … + a k x k 2 + ε 2 ⋮ y n = a 0 + a 1 x 1 i + a 2 x 2 i + … + a i x k i + ε n 公式2 \left\{\begin{array}{l}y_{1}=a_{0}+a_{1} x_{11}+a_{2} x_{21}+\ldots+a_{k} x_{k1}+\varepsilon_{1} \\ y_{2}=a_{0}+a_{1} x_{12}+a_{2} x_{22}+\ldots+a_{k} x_{k2}+\varepsilon_{2} \\ \vdots \\ y_{n}=a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\ldots+a_{i} x_{ki}+\varepsilon_{n}\end{array}\right.\text{公式2} y1=a0+a1x11+a2x21++akxk1+ε1y2=a0+a1x12+a2x22++akxk2+ε2yn=a0+a1x1i+a2x2i++aixki+εn公式2
其中 ε 0 , ε 1 , … , ε n \varepsilon_{0}, \varepsilon_{1}, \ldots, \varepsilon_{n} ε0,ε1,,εn为随机误差项,回归分析的主要任务就是以误差 ε 0 , ε 1 , … , ε n \varepsilon_{0}, \varepsilon_{1}, \ldots, \varepsilon_{n} ε0,ε1,,εn的平方和最小为原则,求多元回归模型的回归系数 a 0 , a 1 , … , a k a_{0}, a_{1}, \dots, a_{k} a0,a1,,ak

求解这个方程是要以 S = ∑ i = 1 i = n ε i 2 = ∑ i = 1 i = n ( a 0 + a 1 x 1 i + ⋯ + a k x k i − y i ) 2 S=\sum_{i=1}^{i=n} \varepsilon_{i}^{2}=\sum_{i=1}^{i=n}\left(a_{0}+a_{1} x_{1 i}+\dots+a_{k} x_{k i}-y_{i}\right)^{2} S=i=1i=nεi2=i=1i=n(a0+a1x1i++akxkiyi)2为最小原则,求 a 0 , a 1 , … , a k a_{0}, a_{1}, \dots, a_{k} a0,a1,,ak要使得S最小,应该满足 ∂ S ∂ a j = 0 , j = 0 , 1 , … , k \frac{\partial S}{\partial a_{j}}=0, j=0,1,\ldots,k ajS=0,j=0,1,,k
即 { ∑ i = 1 i = n 2 ( a 0 + a 1 x 1 i + a 2 x 2 i + ⋯ + a k x k i − y i ) = 0 ∑ i = 1 i = n 2 ( a 0 + a 1 x 1 i + a 2 x 2 i + ⋯ + a k x k i − y i ) x 1 i = 0 ⋮ ∑ i = 1 i = n 2 ( a 0 + a 1 x 1 i + a 2 x 2 i + ⋯ + a k x k i − y i ) x n i = 0 , 公式3 即\left\{\begin{array}{l}\sum_{i=1}^{i=n} 2\left(a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\dots+a_{k} x_{k i}-y_{i}\right)=0 \\ \sum_{i=1}^{i=n} 2\left(a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\dots+a_{k} x_{k i}-y_{i}\right) x_{1 i}=0 \\ \vdots \\ \sum_{i=1}^{i=n} 2\left(a_{0}+a_{1} x_{1 i}+a_{2} x_{2 i}+\dots+a_{k} x_{k i}-y_{i}\right) x_{n i}=0\end{array}\right.,\text{公式3} i=1i=n2(a0+a1x1i+a2x2i++akxkiyi)=0i=1i=n2(a0+a1x1i+a2x2i++akxkiyi)x1i=0i=1i=n2(a0+a1x1i+a2x2i++akxkiyi)xni=0,公式3

有 { n a 0 + ∑ i = 1 i = n x 1 i a 1 + ⋯ + ∑ i = 1 i = n x k i a k = ∑ i = 1 i = n y i ∑ i = 1 i = n x 1 i a 0 + ∑ i = 1 i = n x 1 i 2 a 1 + ⋯ + ∑ i = 1 i = n x 11 x k i a k = ∑ i = 1 i = n x 1 i y i ⋮ ∑ i = 1 i = n x k i a 0 + ∑ i = 1 i = n x 1 i x k i a 1 + ⋯ + ∑ i = 1 i = n x k i 2 a k = ∑ i = 1 i = n x k i y i , 公式4 有\left\{\begin{array}{l}n a_{0}+\sum_{i=1}^{i=n} x_{1 i} a_{1}+\dots+\sum_{i=1}^{i=n} x_{k i} a_{k}=\sum_{i=1}^{i=n} y_{i} \\ \sum_{i=1}^{i=n} x_{1 i} a_{0}+\sum_{i=1}^{i=n} x_{1 i}^{2} a_{1}+\dots+\sum_{i=1}^{i=n} x_{11} x_{k i} a_{k}=\sum_{i=1}^{i=n} x_{1 i} y_{i} \\ \vdots \\\sum_{i=1}^{i=n} x_{k i} a_{0}+\sum_{i=1}^{i=n} x_{1 i} x_{k i} a_{1}+\dots+\sum_{i=1}^{i=n} x_{k i}^{2} a_{k}=\sum_{i=1}^{i=n} x_{k i} y_{i}\end{array}\right.,\text{公式4} na0+i=1i=nx1ia1++i=1i=nxkiak=i=1i=nyii=1i=nx1ia0+i=1i=nx1i2a1++i=1i=nx11xkiak=i=1i=nx1iyii=1i=nxkia0+i=1i=nx1ixkia1++i=1i=nxki2ak=i=1i=nxkiyi,公式4

上式可以写成形式: Y = X A Y=X A Y=XA

其中:
X = [ n ∑ i = 1 i = n x 1 i … ∑ i = 1 i = n x k i ∑ i = 1 i = n x 1 i ∑ i = 1 i = n x 1 i 2 … ∑ i = 1 n x 11 x k i ⋮ ⋮ … ⋮ ∑ i = 1 i = n x k i ∑ i = 1 i = n x 11 x k i … ∑ i = 1 i = n x k i 2 ] , Y = [ ∑ i = 1 i = n y i ∑ i = 1 i = n x 1 i y i ⋮ ∑ i = 1 i = n x 2 i y i ] , A = [ a 0 a 1 ⋮ a k ] X=\left[\begin{array}{ccc}n & \sum_{i=1}^{i=n} x_{1 i} & \ldots & \sum_{i=1}^{i=n} x_{k i} \\ \sum_{i=1}^{i=n} x_{1 i} & \sum_{i=1}^{i=n} x_{1 i}^{2} & \ldots& \sum_{i=1}^{n} x_{11} x_{k i} \\ \vdots& \vdots & \ldots & \vdots \\ \sum_{i=1}^{i=n} x_{k i} & \sum_{i=1}^{i=n} x_{11} x_{k i} & \ldots & \sum_{i=1}^{i=n} x_{k i}^{2}\end{array}\right], Y=\left[\begin{array}{c}\sum_{i=1}^{i=n} y_{i} \\ \sum_{i=1}^{i=n} x_{1 i} y_{i} \\ \vdots \\\sum_{i=1}^{i=n} x_{2 i} y_{i}\end{array}\right], A=\left[\begin{array}{c}a_{0} \\ a_{1} \\ \vdots\\ a_{k}\end{array}\right] X=ni=1i=nx1ii=1i=nxkii=1i=nx1ii=1i=nx1i2i=1i=nx11xkii=1i=nxkii=1nx11xkii=1i=nxki2,Y=i=1i=nyii=1i=nx1iyii=1i=nx2iyi,A=a0a1ak

公式2也可以直接写成矩阵表达式: Y = X A + E Y=X A+E Y=XA+E

其中:
Y = [ y 1 y 2 ⋮ y n ] , X = [ 1 x 1 , 1 … x k , 1 1 x 1 , 2 … x k , 2 ⋮ ⋮ … ⋮ 1 x 1 , k … x 2 , k ] , A = [ a 0 a 1 ⋮ a k ] , E = [ ε 1 ε 2 ⋮ ε n ] Y=\left[\begin{array}{l}y_{1} \\ y_{2} \\ \vdots \\ y_{n}\end{array}\right], X=\left[\begin{array}{ccc}1 & x_{1,1} &\ldots & x_{k,1} \\ 1 & x_{1,2} &\ldots& x_{k,2} \\ \vdots & \vdots &\ldots &\vdots & \\ 1 & x_{1,k}&\ldots & x_{2,k}\end{array}\right], A=\left[\begin{array}{l}a_{0} \\ a_{1} \\ \vdots \\ a_{k}\end{array}\right], E=\left[\begin{array}{c}\varepsilon_{1} \\ \varepsilon_{2} \\ \vdots \\ \varepsilon_{n}\end{array}\right] Y=y1y2yn,X=111x1,1x1,2x1,kxk,1xk,2x2,k,A=a0a1ak,E=ε1ε2εn
那么我们的任务就是求解 A A A

2.2、案例分析

分析总能耗与其他变量的关系,首先分析其相关性,做相似矩阵分析,如下:

第一步:得出总能耗与那些变量之间的关系,求出相关系数

[Data,str]=xlsread('C:\Users\86188\Desktop\仿真数据\北京参数一百组新.xlsx','sheet1','A1:R101',0.4);% 得到表格中所有数据
Resemblance=corrcoef(Data);                                 % 得到系数相关矩阵
[Row,Col]=size(Resemblance);                                % 得到Resemblance矩阵的行和列
site=[];count=0;                                            % 
for row=1:(Row-1)                                           % 得到总能源与哪些因素有关
    if(abs(Resemblance(row,Col))>0.4)
        disp(['总能源与第' num2str(row) '列' str(row) '相关度较高,相关系数为 ' num2str(Resemblance(Col,row)) ]);
        count=count+1;                                      % 保存相关变量的数量
        site(count)=row;                                    % 保存相关变量的列地址
    end
end

第二步:得到回归系数和置信区间

[Row,Col]=size(Data);                                       % 得到数据矩阵的行和列的大小
ConVariable=zeros(Row,count);                               % 创建一个行相等列指定的矩阵                 
for row=1:count
    ConVariable(:,row)=Data(:,site(row));
end
TotalEnergy=Data(:,Col);                                   % 得到总能源原始数据
IndeVariable=[ones(Row,1),ConVariable];                    % 创建相关变量数组
[b,bint,r,rint,stats]=regress(TotalEnergy,IndeVariable);   % 求回归系数的点估计和区间估计、并检验回归模型

第三步:做残差分析,得出那些点偏差太大

得出四个点偏差太大,可以考虑去除这四个点

subplot(211);                                                           % 画残差图
rcoplot(r,rint);                                                        % 画残差图

第四步:得出预测模型,用预测模型去和真实值去对比

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uJ6PN2zt-1587623830400)(C:\Users\86188\Desktop\仿真数据\线性回归图片\改进结果.png)]

NewTotalEnergy=zeros(Row,1);                                            % 预测数据矩阵
for row = 1:Row                                                         % 预测赋值
    NewTotalEnergy(row)=b(1);
    for PaRow=2:(count+1)
        NewTotalEnergy(row)=NewTotalEnergy(row)+b(PaRow)*ConVariable(row,PaRow-1);
    end
end
Loss = 0;                                   % 根据最大斜率和最小效率建立指定长度的损失数据       
for i=1:Row
    Loss = Loss+(TotalEnergy(i)-NewTotalEnergy(i))^2/(2*Row);
end
subplot(212);                                                         % 画预测和真实图
number=[1:1:Row];
plot(number,TotalEnergy','r',number,NewTotalEnergy','b');
xlabel('数量序列');ylabel('总能耗');title('总能耗与相关参数散点图');legend('真实值','预测值')grid on;

第五步:得出模型函数关系
总 能 耗 = 33374 + − 53041 × 体 型 系 数 + 32 × 面 积 − 101 × 人 口 密 度 + 431 × 内 扰 电 耗 总能耗=33374 +-53041\times 体型系数 +32\times 面积 -101\times 人口密度 +431\times 内扰电耗 =33374+53041×+32×101×+431×

参考文献

  1. 数学建模与数学试验
  2. 多元线性回归MATLAB实现
  3. 一元线性回归模型及其假设条件
  4. [MATLAB]逐步回归详解(stepwise使用指南)
  5. 基于Matlab的数据多元回归分析的研究
  • 60
    点赞
  • 511
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaoxiaodawei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值