精华内容
下载资源
问答
  • Matlab一元非线性回归分析的分析步骤与一元线性回归分析的步骤类似:大体分为以下几步:(1)绘制x,y的散点图,分析散点图的走势;(2)根据散点图的走势,确定回归方程的具体形式,特别是参数个数的设定和设定初始值;...

    Matlab一元非线性回归分析的分析步骤与一元线性回归分析的步骤类似:

    大体分为以下几步:

    (1)绘制x,y的散点图,分析散点图的走势;

    (2)根据散点图的走势,确定回归方程的具体形式,特别是参数个数的设定和设定初始值;

    (3)调用NonLinearModel的fit方法进行模型拟合;

    (4)模型改进,去除异常值的操作;

    (5)进行残差分析,验证模型。

    下面以某商品的数量与定价为例,进行实例展示;

    (1)绘制x,y的散点图,分析散点图的走势;

    [data,y0]=xlsread('C:\Users\箫韵\Desktop\Matlab数理与统计分析\exdata\test1',3);

    x=data(:,2);%提取列数据自变量数据

    y=data(:,3);%提取列数据因变量数据

    figure;

    plot(x,y,'ko');%绘制散点图

    xlabel('数量');

    ylabel('价格');

    05133c8185c9a446a0f1302f5f194750.png

    图1 散点图

    (2)根据散点图的走势,确定回归方程的具体形式,特别是参数个数的设定和设定初始值;

    %建立一元非线性回归方程

    % yi=f(xi;b1,b2)+ai

    % ai~N(0,aa^2),i=1,2,..n

    price=@(beta,x)beta(1)./(1-beta(2)*x);%根据散点图趋势建立方程f(x)=b1./(1-b2*x),方程形式并不唯一。

    beta0=[120,0.008];%beta0为b1,b2的初始值。根据x的取值范围,x在22与40之间,y>0,故需b2<0.25。

    %根据y值是84到280的不等分布,主要集中在110到130,故b1取值120较合适,根据方程,b2取0.008即可。

    opt=statset;%创建结构体变量类

    opt.Robust='on';%开启回归稳健性方法

    nlm1=NonLinearModel.fit(x,y,price,beta0,'Options',opt);

    %y=41.459./(1-0.02213*x)

    4ece3a554e28fc8d60a65c59b508a8e7.png

    (3)调用NonLinearModel的fit方法进行模型拟合;

    xnew=linspace(20,40,50)';%取50个x的值在20到40之间

    ynew=nlm1.predict(xnew);%进行ynew预测

    figure;

    plot(x,y,'ko');

    hold on;

    plot(xnew,ynew,'linewidth',2.5);

    xlabel('数量');

    ylabel('价格');

    legend('原始数据散点','非线性回归曲线');

    c0b1ab12d244be927700c086a250edc6.png

    图2 模型拟合效果

    (4)模型改进,去除异常值的操作;

    异常值的诊断。NonlinearModel类对象的Residuals属性值中有标准化残差和学生化残差值。这里通过学生化残差查询异常值

    Res2=nlm1.Residuals;

    Res_Stu2=Res2.Studentized;

    id2=find(abs(Res_Stu2)>2);

    %properties(nlm1);%可以查询nlm1的属性

    %去除异常值重新构建回归模型

    nlm2=NonLinearModel.fit(x,y,price,beta0,'Exclude',id2,'options',opt);

    %y=41.394./(1-0.22195*x)

    1f38401eead11d83f644dbbcab757a1c.png

    xnew=linspace(20,40,50)';

    y1=nlm1.predict(xnew);

    y2=nlm2.predict(xnew);

    figure;

    plot(x,y,'ko');

    hold on;

    plot(xnew,y1,'r--','linewidth',2);

    plot(xnew,y2,'b.','linewidth',2);

    xlabel('数量');

    ylabel('价格');

    legend('原始数据散点','回归曲线','去除异常值后的回归曲线');

    95a4054964cdca205e7f2ec334691fa5.png

    图3 去除异常值与未去除异常值的拟合对比

    (5)进行残差分析,验证模型。

    调用的是NonLinearModel类中的plotResiduals方法。残差分析有比较多的方法,这里以残差直方图和残差正态概率图为例。

    %回归诊断

    figure;

    subplot(1,2,1);

    nlm1.plotResiduals('histogram');

    title('(a)残差直方图');

    xlabel('残差r');

    ylabel('f(r)');

    subplot(1,2,2);

    nlm1.plotResiduals('probability');

    title('(b)残差正态概率图');

    xlabel('残差');

    ylabel('概率');

    7d450885eab88fd35feb615818040ef5.png

    图4 残差直方图和残差正态概率图

    原始数据

    order

    数量

    价格

    1

    25

    89

    2

    28

    108

    3

    26

    115

    4

    23

    99

    5

    26

    109

    6

    32

    124

    7

    35

    210

    8

    30

    126

    9

    34

    132

    10

    29

    110

    11

    33

    135

    12

    36

    226

    13

    34

    136

    14

    36

    220

    15

    36

    208

    16

    30

    125

    17

    32

    146

    18

    30

    129

    19

    35

    140

    20

    29

    116

    21

    31

    123

    22

    32

    126

    23

    28

    135

    24

    36

    208

    25

    40

    240

    26

    28

    125

    27

    29

    113

    28

    36

    208

    29

    32

    135

    30

    38

    267

    31

    40

    225

    32

    38

    278

    33

    28

    118

    34

    32

    124

    35

    34

    146

    36

    36

    208

    37

    30

    111

    38

    29

    115

    39

    36

    208

    40

    29

    123

    41

    25

    110

    42

    29

    135

    43

    26

    123

    44

    23

    99

    45

    26

    125

    36

    35

    180

    37

    35

    178

    38

    35

    175

    39

    35

    176

    40

    35

    180

    41

    35

    178

    42

    34

    175

    43

    35

    168

    44

    35

    167

    45

    34

    179

    43

    31

    129

    44

    31

    121

    45

    31

    125

    展开全文
  • matlab一元非线性回归

    千次阅读 2019-05-17 21:12:45
    现实应用除了线性方程之外,就是非线性方程了,作为最常用的一元非线性函数的代表,首先介绍的就是对数方程的解法 百货商店销售额与流通费率存在着非线性关系,试求出方程 %百货商店销售额与流通费率 x=[1.5,4.5,7.5...
    现实应用除了线性方程之外,就是非线性方程了,作为最常用的一元非线性函数的代表,首先介绍的就是对数方程的解法
    百货商店销售额与流通费率存在着非线性关系,试求出方程
    %百货商店销售额与流通费率
    x=[1.5,4.5,7.5,10.5,13.5,16.5,19.5,22.5,25.5];
    y=[7.0,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2];
    plot(x,y,'*','linewidth',2) %布置散点,linewidth表示标点‘*’粗细
    set(gca,'linewidth',2)%设置边宽度
    %布置横坐标,纵坐标
    xlabel('x销售额','fontsize',12)
    ylabel('y流通费率','fontsize',12)
    m1=@(b,x)b(1)+b(2)*log(x);
    nonlinfit1=fitnlm(x,y,m1,[0.01;0.01])
    b=nonlinfit1.Coefficients.Estimate;
    Y1=b(1,1)+b(2,1)*log(x);
    hold on
    plot(x,Y1,'--k','linewidth',2)
    

    销售额与流通费率之间的关系图

    方法二:上面为对数形式非线性回归决定系数R-Squared:0.973
    那么非线性回归中还有一种就是指数形式非线性回归
    m2='y~b1*x^b2';
    nonlinfit2=fitnlm(x,y,m2,[1;1])
    b1=nonlinfit2.Coefficients.Estimate(1,1);
    b2=nonlinfit2.Coefficients.Estimate(2,1);
    Y2=b1*x.^b2;
    hold on plot(x,Y2,'r','linewidth',2)
    legend('原始数据','a+b*lnx','a*x^b')
    %R-Squared:0.993证明指数形式的函数形式更为符合
    
    展开全文
  • function [beta_hat,Y_hat,stats]=regress(X,Y,alpha) % 多元线性回归(Y=Xβ+ε)MATLAB代码 % % 参数说明 % X:自变量矩阵,列为自变量,行为观测值 % Y:应变量矩阵,同X % alpha:置信度,[0 1]之间的任意数据 % ...

    例子;

    x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; X=[ones(16,1) x]; 增加一个常数项 Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; [b,bint,r,rint,stats]=regress(Y,X) 得结果:b = bint = -16.0730 -33.7071 1.5612 0.7194 0.6047 0.8340 stats = 0.9282 180.9531 0.0000 即对应于b的置信区间分别为[-33.7017,1.5612]、[0.6047,0.834]; r2=0.9282, F=180.9531, p=0.0000 p<0.05, 可知回归模型 y=-16.073+0.7194x 成立. 这个是一元的,如果是多元就增加X的行数!

    function [beta_hat,Y_hat,stats]=regress(X,Y,alpha)

    % 多元线性回归(Y=Xβ+ε)MATLAB代码

    %

    % 参数说明

    % X:自变量矩阵,列为自变量,行为观测值

    % Y:应变量矩阵,同X

    % alpha:置信度,[0 1]之间的任意数据

    % beta_hat:回归系数

    % Y_beata:回归目标值,使用Y-Y_hat来观测回归效果

    % stats:结构体,具有如下字段

    %      stats.fTest=[fV,fH],F检验相关参数,检验线性回归方程是否显著

    %                   fV:F分布值,越大越好,线性回归方程越显著

    %                   fH:0或1,0不显著;1显著(好)

    %      stats.tTest=[tH,tV,tW],T检验相关参数和区间估计,检验回归系数β是否与Y有显著线性关系

    %                   tV:T分布值,beta_hat(i)绝对值越大,表示Xi对Y显著的线性作用

    %                   tH:0或1,0不显著;1显著

    %                   tW:区间估计拒绝域,如果beta(i)在对应拒绝区间内,那么否认Xi对Y显著的线性作用

    %      stats.TUQR=[T,U,Q,R],回归中使用的重要参数

    %                  T:总离差平方和,且满足T=Q+U

    %                  U:回归离差平方和

    %                  Q:残差平方和

    %                  R∈[0 1]:复相关系数,表征回归离差占总离差的百分比,越大越好

    % 举例说明

    % 比如要拟合 y=a+b*log(x1)+c*exp(x2)+d*x1*x2,注意一定要将原来方程线化

    % x1=rand(10,1)*10;

    % x2=rand(10,1)*10;

    % Y=5+8*log(x1)+5.623*exp(x2)+1.2*x1.*x2+rand(10,1); % 以上随即生成一组测试数据

    % X=[ones(10,1) log(x1) exp(x2) x1.*x2]; % 将原来的方表达式化成Y=Xβ,注意最前面的1不要丢了

    % [beta_hat,Y_hat,stats]=mulregress(X,Y,0.99)

    %

    % 注意事项

    % 有可能会出现这样的情况,总的线性回归方程式显著的(stats.fH=1),

    % 但是所有的回归系数却对Y的线性作用却不显著(stats.tF=0),产生这种现象的原意是

    % 回归变量之间具有较强的线性相关,但这种线性相关不能采用刚才使用的模型描述,

    % 所以需要重新选择模型

    %

    C=inv(X'*X);

    Y_mean=mean(Y);

    % 最小二乘回归分析

    beta_hat=C*X'*Y; % 回归系数β

    Y_hat=X*beta_hat; % 回归预测

    % 离差和参数计算

    Q=(Y-Y_hat)'*(Y-Y_hat); % 残差平方和

    U=(Y_hat-Y_mean)'*(Y_hat-Y_mean); % 回归离差平方和

    T=(Y-Y_mean)'*(Y-Y_mean); % 总离差平方和,且满足T=Q+U

    R=sqrt(U/T); % 复相关系数,表征回归离差占总离差的百分比,越大越好

    [n,p]=size(X); % p变量个数,n样本个数

    % 回归显著性检验

    fV=(U/(p-1))/(Q/(n-p)); % 服从F分布,F的值越大越好

    fH=fV>finv(alpha,p-1,n-p); % H=1,线性回归方程显著(好);H=0,回归不显著

    % 回归系数的显著性检验

    chi2=sqrt(diag(C)*Q/(n-p)); % 服从χ2(n-p)分布

    tV=beta_hat./chi2; % 服从T分布,绝对值越大线性关系显著

    tInv=tinv(0.5+alpha/2,n-p);

    tH=abs(tV)>tInv; % H(i)=1,表示Xi对Y显著的线性作用;H(i)=0,Xi对Y的线性作用不明显

    % 回归系数区间估计

    tW=[-chi2,chi2]*tInv; % 接受H0,也就是说如果在beta_hat(i)对应区间中,那么Xi与Y线性作用不明显

    stats=struct('fTest',[fH,fV],'tTest',[tH,tV,tW],'TUQR',[T,U,Q,R]);

    展开全文
  • Matlab 非线性回归

    千次阅读 2020-03-15 09:46:29
    非线性回归工作流程:导入数据,拟合非线性回归,测试其质量,对其进行修改以提高质量以及根据模型进行预测。 例子 clc clear all close all % step1:加载reaction数据,reaction是具有13行3列的矩阵。每一行对应一...

    简介

    非线性回归需要指定模型,然后再采取某种方法计算出模型参数。实际操作过程中可能需要因变量与自变量散点图来分析具体模型形式。

    非线性回归

    非线性回归工作流程:导入数据,拟合非线性回归,测试其质量,对其进行修改以提高质量以及根据模型进行预测。

    例子

    clc
    clear all
    close all
    
    % step1:加载reaction数据,reaction是具有133列的矩阵。每一行对应一个观察值,每一列对应一个变量。
    load reaction
    
    % step2:hougen.m文件包含反应速率的非线性模型,该模型是三个预测变量的函数。
    beta0 = ones(5,1);
    mdl = fitnlm(reactants,...
        rate,@hougen,beta0)
    
    % step3:检查模型的质量。与观测值范围相比,均方根误差相当低。
    [mdl.RMSE min(rate) max(rate)]
    plotResiduals(mdl)
    plotDiagnostics(mdl,'cookd')
    
    % step4.移除异常值。使用排除名称/值对从拟合中移除异常值。
    mdl1 = fitnlm(reactants,...
        rate,@hougen,ones(5,1),'Exclude',6)
    
    % step5.检查两个模型的切片图。要查看每个预测变量对响应的影响,请使用plotSlice(mdl)绘制切片图。
    plotSlice(mdl)  
    plotSlice(mdl1) 
    
    % step6.预测新数据。创建一些新数据并预测两个模型的响应。
    Xnew =  [200,200,200;100,200,100;500,50,5];
    [ypred yci] = predict(mdl,Xnew)
    [ypred1 yci1] = predict(mdl1,Xnew)
    
    

    结果

    
    mdl = 
    
    
    Nonlinear regression model:
        y ~ hougen(b,X)
    
    Estimated Coefficients:
              Estimate       SE       tStat     pValue 
              ________    ________    ______    _______
    
        b1      1.2526     0.86702    1.4447    0.18654
        b2    0.062776    0.043562    1.4411    0.18753
        b3    0.040048    0.030885    1.2967    0.23089
        b4     0.11242    0.075158    1.4957    0.17309
        b5      1.1914     0.83671    1.4239     0.1923
    
    
    Number of observations: 13, Error degrees of freedom: 8
    Root Mean Squared Error: 0.193
    R-Squared: 0.999,  Adjusted R-Squared 0.998
    F-statistic vs. zero model: 3.91e+03, p-value = 2.54e-13
    
    ans =
    
        0.1933    0.0200   14.3900
    
    
    mdl1 = 
    
    
    Nonlinear regression model:
        y ~ hougen(b,X)
    
    Estimated Coefficients:
              Estimate       SE       tStat     pValue 
              ________    ________    ______    _______
    
        b1       0.619      0.4552    1.3598    0.21605
        b2    0.030377    0.023061    1.3172    0.22924
        b3    0.018927     0.01574    1.2024    0.26828
        b4    0.053411    0.041084       1.3    0.23476
        b5      2.4125      1.7903    1.3475     0.2198
    
    
    Number of observations: 12, Error degrees of freedom: 7
    Root Mean Squared Error: 0.198
    R-Squared: 0.999,  Adjusted R-Squared 0.998
    F-statistic vs. zero model: 2.67e+03, p-value = 2.54e-11
    
    ypred =
    
        1.8762
        6.2793
        1.6718
    
    
    yci =
    
        1.6283    2.1242
        5.9789    6.5797
        1.5589    1.7846
    
    
    ypred1 =
    
        1.8984
        6.2555
        1.6594
    
    
    yci1 =
    
        1.6260    2.1708
        5.9323    6.5787
        1.5345    1.7843
    
    >> 
    

    找到误差并移除

    这些图看起来非常相似,其对mdl1的置信区间稍宽。 这种差异是可以理解的,因为拟合中的数据点少了,表示观测值减少了7%以上。模型系数虽然不同,但是预测几乎相同。

    展开全文
  • matlab多元非线性回归教程

    千次阅读 2021-04-20 05:05:55
    matlab多元非线性回归教程》由会员分享,可在线阅读,更多相关《matlab多元非线性回归教程(2页珍藏版)》请在人人文库网上搜索。1、matlab回归(多元拟合)教程前言 1、学三条命令 polyfit(x,y,n)-拟合成一元幂函数...
  • 在学习模拟电路的时候,有时需要稍微精确的去计算输出电压,会遇到非线性方程,采用Matlab去解方程则是很重要的技能在Matlab的官方文档中,可以发现 fzero 这个函数专门用于解一元非线性方程组 注意函数得有异号零点...
  • matlab实现一元线性回归和多元线性回归

    万次阅读 多人点赞 2018-01-30 10:58:46
    回归分析中,如果有两个或两个以上的自变量,就称为多元回归。事实上,一种现象常常是与多个因素相联系的,由多个自变量的最优组合共同来预测或估计因变量,比只用一个自变量进行预测或估计更有效,更符合实际。 ...
  • 机器学习 一元非线性回归模型

    万次阅读 2018-08-15 00:36:38
    这时,通常是选配一条比较接近的曲线,通过变量替换把非线性方程加以线性化,然后按照线性回归的方 法进行拟合。 常见的可转化一元线性回归的模型 倒幂函数曲线y=a+b⋅1xy=a+b⋅1xy=a+b \cdot \dfrac{1}{x}型 令...
  • 最小二乘法matlab代码一元非线性 **教程,示例,集合以及所有其他类别的内容:模式分类,机器学习和数据挖掘。** 栏目 此流程图的[]。 机器学习和模式分类简介 [] 预测建模,监督式机器学习和模式分类-大图[] 入口点...
  • Matlab(多元)线性回归、非线性回归、多项式拟合、(自定义函数)曲线拟合-代码示例
  • 基于spss的一元线性回归与多元线性回归案例,个人整理出的,包含了部分案例、实验报告、题目,及部分题目答案,适合作为spss、MATLAB等软件数据分析题目联系
  • 非线性回归分析及其Matlab实现

    万次阅读 多人点赞 2020-02-23 15:14:22
    回归分析简介 ...如果自变量与因变量之间的函数关系是线性函数,则称之为线性回归分析,否则称之为非线性回归分析。 线性回归的函数表达式一般表示为: 对于非线性回归分析,需要根据实际情况来确定函...
  • matlab多元非线性回归_推荐matlab 回归(拟合)总结前言1、学三条命令polyfit(x,y,n)拟合成一元幂函数(一元多次)regress(y,x)可以多元,nlinfit(x,y,’fun’,beta0) (可用于任何类型的函数,任意多元函数,应用范围最...
  • 可用fminsearch命令或非线性最小二乘命令lsqnonlin()函数。不过楼主的问题可以直接在EVIEWS中用非线性最小二乘估计,我算了一下,效果并不好。楼主的方程有点象Logistic回归,但也不是,我在EVIEWS中估计的结果如下...
  • 最小二乘法matlab代码一元非线性 **教程,示例,集合以及所有其他类别的内容:模式分类,机器学习和数据挖掘。** 栏目 此流程图的[]。 机器学习和模式分类简介 [] 预测建模,监督式机器学习和模式分类-大图[] 入口点...
  • 1. 一元线性回归分析效果预览 2. matlab完整实现代码 %读取数据,绘制散点图** HeadData = xlsread('examp08_02.xls'); %从Excel文件读取数据 x = HeadData(:, 4); % 提取HeadData矩阵的第4列数据,即年龄数据 y ...
  • 在回归分析中,如果有两个或两个以上的自变量,就...看到regress函数的例子,突然想到它居然可以用来做一些简单的多元非线性回归分析,例如,我们用它对一个多项式进行拟合,将要拟合的多项式进行展开,得到的其实...
  • MATLAB非线性回归拟合nlintool非线性回归非线性回归可用命令nlinfit,nlintool,nlparci,nlpredci来实现。进行非线性回归时可使用nlinfit指令,其语法如下:beta = nlinfit(X,y,fun,beta0)[beta,r,J] = nlinfit(X,y,...
  • 第29卷第2期2009年3月云南师范大学学报JournalofYunnanNormalUniversityV01.29No.2Mar.2009基于MATLAB的多元非线性回归模型‘董大校(临沧师范高等...
  • MATLAB-非线性回归

    千次阅读 2019-08-16 16:07:05
    非线性回归 非线性回归可由命令nlinfit来实现,调用格式为 ...其中,输人数据x,y分别为n×m矩阵和n维列向量,对一元非线性回归,x为n维列向量model是事先用m-文件定义的非线性函数,beta0是回归系数的初值,bet...
  • 非线性回归非线性回归可用命令nlinfit,nlintool,nlparci,nlpredci来实现。进行非线性回归时可使用nlinfit指令,其语法如下:beta = nlinfit(X,y,fun,beta0)[beta,r,J] = nlinfit(X,y,fun,beta0)[...] = nlinfit(X, y...
  • 回归分析(Regression Analysis)是研究一个变量Y与其他若干变量X之间相互关系的一种数学工具。...(摘自:王正林等《精通MATLAB科学计算》)我个人理解,在使用中,感觉跟拟合比较相近,但并不一样...
  • 回归拟合自己的总结 20100728 1学三条命令 polyfit(x,y,n)拟合成一元幂函数一元多次 regress(y,x)可以多元 nlinfit(x,y,fun ,beta0) (可用于任何类型的函数任意多元函数应 用范围最主最万能的 ) 2同一个问题 可能这...
  • MATLAB 线性回归

    2021-04-21 01:27:11
    一、一元线性回归1.1.命令polyfit最小二乘多项式拟合[p,S]=polyfit(x,y,m)多项式y=a1xm+a2xm-1+…+amx+am+1其中x=(x1,x2,…,xm)x1…xm为(n*1)的矩阵;y为(n*1)的矩阵;p=(a1,a2,…,am+1)是多项式y=a1xm+a2...
  • 多元线性回归-matlab实现

    千次阅读 2020-12-21 17:10:27
    多元线性回归regress[b,bint,r,rint,stats] = regress(y,x, alpha)b——拟合线性函数的系数bint——系数b的置信区间r——残值向量rint——残值的置信区间stats——用于检验回归模型的统计量,有三个数值:相关系数R2...
  • 此示例说明神经网络如何基于多个身体测量值来估计体脂率,实现函数逼近和非线性回归。 问题:估计体脂率 在此示例中,尝试构建一个神经网络,该网络可以通过下面的 13 个身体属性来估计一个人的体脂率: 这是输入...
  • 线性回归分析及其Matlab实现

    千次阅读 2020-01-12 16:42:02
    回归分析简介 回归(regression)一词最早由英国科学家弗朗西斯·高尔顿(Francis Galton)提出。高尔顿发现:“子辈的平均身高是其父辈平均身高以及他们所处族群平均...按照自变量的多少,可分为一元回归分析和多元...
  • 在回归分析中,如果有两个或两个以上的自变量,就...看到regress函数的例子,突然想到它居然可以用来做一些简单的多元非线性回归分析,例如,我们用它对一个多项式进行拟合,将要拟合的多项式进行展开,得到的其实...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 883
精华内容 353
关键字:

matlab一元非线性回归

matlab 订阅