简单使用matlab做回归分析、拟合分析

简单使用matlab做回归分析、拟合分析

  • 前言
    • 一元线非线性回归
    • 例子
    • 多元线性回归
    • 例子
    • 多元线非线性回归

前言

这里是简单做一元非线性,及多元线性。
一元:就是只有一个X。比如:y=x^2+x+1;
多元:就是多个X,比如:y=x1+x2+1;
首先几对数据,你得大约能知道他们是什么关系。

一元线非线性回归

百度百科:
MATLAB软件提供了基本的曲线拟合函数的命令,多项式函数拟合:a=polyfit(xdata,ydata,n),
其中n表示多项式的最高阶数,xdata,ydata为将要拟合的数据,它是用数组的方式输入。输出参数a为拟合多项式 y=a1x^n+…+anx+a,共n+1个系数。
多项式在x处的值y可用下面程序计算。
y=polyval(a,x,m)
线性:m=1, 二次:m=2, …
polyfit的输出是一个多项式系数的行向量。为了计算在xi数据点的多项式值,调用MATLAB的函数polyval。

例子

close all;clear all;
x=[0,10,50,100,150,200,250,300,350,400,450,500,550,600]';
y=[0,792.5,1976,3410,4794,6127,7411,8644,9827,10960,12040,13070,14060,14990]';
plot(x,y);

%% 一元线非线性回归
[p,S] = polyfit(x,y,2);%polyfit函数基于最小二乘法, 如果是用一元polyfit(x,y,1) 则结果p与regress()结果b 是一样的
%%拟合后对应的多项式即为y=p(1)*x^n + p(2)*x^(n-1) +…+ p(n)*x + p(n+1)。
%S是规模为1×1的结构数组,包括R(系数矩阵的QR分解的上三角阵),df(自由度),normr(拟合误差平方和的算术平方根)。
%%
p,
f=polyval(p,x);%作出拟合函数
  figure();
 plot(x,y,x,f);
 title( "一元线非线性回归")
 %% 相关系数 
 r=corrcoef(x,y); 
 r,
 %%

结果:

p =
   -0.0116   31.3118  317.3271

表达式为 y=-0.0116x^2+31.3118x+317.3271;

多元线性回归

regress用于一元及多元线性回归,本质上是最小二乘法。在Matlab 2014a中,输入help regress ,会弹出和regress的相关信息。
对应生成的表达式 为y=b1+x1b2+x2b3 +…+x(n)* b(n+1),
调用格式:

B = regress(Y,X)
[B,BINT] = regress(Y,X)
[B,BINT,R] = regress(Y,X)
[B,BINT,R,RINT] = regress(Y,X)
B,BINT,R,RINT,STATS] = regress(Y,X)
[...] = regress(Y,X,ALPHA)
参数解释:
B:回归系数,是个向量(“the vector B of regression coefficients in the  linear model Y = X*B”)。
BINT:回归系数的区间估计(“a matrix BINT of 95% confidence intervals for B”)。
R:残差( “a vector R of residuals”)。
RINT:置信区间(“a matrix RINT of intervals that can be used to diagnose outliers”)。
STATS:用于检验回归模型的统计量。有4个数值:判定系数R^2,F统计量观测值,检验的p的值,误差方差的估计。
ALPHA:显著性水平(缺少时为默认值0.05)。

例子

close all;clear all;
x=[0,10,50,100,150,200,250,300,350,400,450,500,550,600]';
y=[0,792.5,1976,3410,4794,6127,7411,8644,9827,10960,12040,13070,14060,14990]';
plot(x,y);
X=[ones(14,1),x];%ones是一个项全1的数据,用来生成b1常数项的 
%x=[ones(14,1),x1,x2,x3]; % 如有x2 x3 多元数据项,
[b,bint,r,rint,stats]=regress(y,X);%基于最小二乘法
% y=b1+x1*b2+x2*b3 +…+x(n)* b(n+1)  b为对应的参数 b1为F(最后那个常数项) ,b2为x1(第一个参数),b3为x2,b4为x3,b5为x4,b6为E。bint为b的95%置信区间
 %%
figure();
Y=x*b(2)+b(1);
plot(x,y,x,Y);
lgd = legend('原线','回归线','Location','North');
set(lgd,'Orientation','horizon','Box','off')
title( "多元线性回归");
 
figure();
b,bint,stats,rcoplot(r,rint)   %rcoplot是用来画残差图的,以便发现异常点

结果:

b =
  832.0708
   24.6682
bint =
   1.0e+03 *
    0.4087    1.2554
    0.0234    0.0259
stats =
   1.0e+05 *
    0.0000    0.0187    0.0000    1.7337

那么表达式为 y=832.0708+24.6682*x;

简单使用matlab做回归分析、拟合分析_第1张图片

多元线非线性回归

利用nlinfit函数实现数据非线性拟合

你可能感兴趣的:(随手笔记,matlab)