MATLAB 线性回归多项式拟合+预测区间、置信区间的绘制

您所在的位置:网站首页 matlab一元线性回归代码 MATLAB 线性回归多项式拟合+预测区间、置信区间的绘制

MATLAB 线性回归多项式拟合+预测区间、置信区间的绘制

2024-07-12 15:46| 来源: 网络整理| 查看: 265

MATLAB 线性回归多项式拟合+预测区间、置信区间的绘制 一、前言二、多项式拟合polyfit1、语法2、示例 三、区间绘制四、整体源码五、思考六、参考博客

一、前言

现有一组数据:x、y

x=[1 2 3 4 5 6 7 8 9 10]; y=[11 13 15 14 17 14 18 16 19 20];

对该数据进行线性回归(1次多项式拟合)并且绘制预测区间和置信度为95%的置信区间 拟合参数:在这里插入图片描述 拟合绘制: 在这里插入图片描述

二、多项式拟合polyfit 1、语法 p=polyfit(x,y,n):最小二乘法计算拟合多项式系数。x,y为拟合数据向量,要求维度相同,n为拟合多项式次数。返回p向量保存多项式系数,由最高次向最低次排列。 y=polyval(p,x):计算多项式的函数值。返回在x处多项式的值,p为多项式系数,元素按多项式降幂排序。

具体语法可参考 :【help-plyfit】

2、示例 x=[1 2 3 4 5 6 7 8 9 10]; y=[11 13 15 14 17 14 18 16 19 20]; a1=x; a2=y; [p,s]=polyfit(a1,a2,1); fprintf("拟合系数分别为:%f %f\n",p(1),p(2)); y1= polyval(p,x); 三、区间绘制

这里提到:

置信区间估计(confidence interval estimate):

利用估计的回归方程,对于自变量 x 的一个给定值 x0 ,求出因变量 y 的平均值的估计区间。

预测区间估计(prediction interval estimate): 利用估计的回归方程,对于自变量 x 的一个给定值 x0 ,求出因变量 y 的一个个别值的估计区间。

代码如下:

% 95% prediction interval 计算: [yfit,dy1] = polyconf(p,x,s); % 95% confidence interval 计算: [yfit,dy] = polyconf(p,a1,s,'predopt','curve'); hold on %置信区域绘制 % fill([a1,fliplr(a1)],[yfit-dy,fliplr(yfit+dy)],[255/255 204/255 255/255],'EdgeColor','none'); % fill([a1,fliplr(a1)],[yfit-dy1,fliplr(yfit+dy1)],[255/255 204/255 255/255],'EdgeColor','none'); plot(a1,y1+dy,'r--',a1,y1-dy,'r--',a1,y1+dy1,'y--',a1,y1-dy1,'y--','LineWidth',1.5) 四、整体源码 %线性回归+置信区 %置信区间估计(confidence interval estimate):利用估计的回归方程,对于自变量 x 的一个给定值 x0 ,求出因变量 y 的平均值的估计区间。 %预测区间估计(prediction interval estimate):利用估计的回归方程,对于自变量 x 的一个给定值 x0 ,求出因变量 y 的一个个别值的估计区间。 clc; clear; %导入数据 x=[1 2 3 4 5 6 7 8 9 10]; y=[11 13 15 14 17 14 18 16 19 20]; % 数据排序,根据第一行的排列顺序进行整体排序 a=[x;y]; a1=a(1,:); [a1,pos]=sort(a1);%左侧的a1是排列之后的第一行,pos是排序后的下标 a2=a(2,pos); %a2,是排列好的第二行 % 多项式拟合 [p,s]=polyfit(a1,a2,1); fprintf("拟合系数分别为:%f %f\n",p(1),p(2)); y1= polyval(p,a1); % 95% prediction interval 计算: [yfit,dy1] = polyconf(p,x,s); % 95% confidence interval 计算: [yfit,dy] = polyconf(p,a1,s,'predopt','curve'); hold on %置信区域绘制 % fill([a1,fliplr(a1)],[yfit-dy,fliplr(yfit+dy)],[255/255 204/255 255/255],'EdgeColor','none'); % fill([a1,fliplr(a1)],[yfit-dy1,fliplr(yfit+dy1)],[255/255 204/255 255/255],'EdgeColor','none'); plot(a1,y1+dy,'r--',a1,y1-dy,'r--',a1,y1+dy1,'y--',a1,y1-dy1,'y--','LineWidth',1.5) hold on plot(a1,y1,'k','linewidth',1.5) hold on; scatter(x(1,1:10),y(1:10),'k','fill'); %R2 r2 = 1 - (sum((y1 - a2).^2) / sum((a2 - mean(a2)).^2)) 五、思考 我在代码中增添了a1、a2,它们的作用是保证x、y数据的顺序性,对x进行排序,对应的y跟着x的排序进行变动。这样可以保证使用fill函数时能够得到我们想要的效果(填充满区域)。 六、参考博客

【1】、Matlab绘制带置信区间的拟合曲线 【2】、误差分析计算公式及其 matlab 代码实现(mse、mape、rmse等) 【3】、matlab曲线拟合 函数 用法以及例子(polyfit) 【4】、Matlab的拟合工具箱的误差参数说明 【5】、什么是预测区间和置信区间

欢迎各位留言交流!!!

同时,如果各位在作图方面有需求 可以闲鱼搜索用户:Man小洁,欢迎交流。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3