主要内容

线性回归

准备数据

要开始拟合回归,请将数据放入拟合函数所期望的形式中。所有回归技术都从数组中的输入数据开始X响应数据在一个单独的向量中y,或在表或数据集数组中输入数据资源描述和响应数据作为列资源描述.每一行输入数据代表一个观察结果。每一列代表一个预测器(变量)。

用于表或数据集数组资源描述表示响应变量“ResponseVar”名称-值对:

mdl = fitlm(资源描述,“ResponseVar”,“血压”);

默认情况下,响应变量是最后一列。

你可以使用数字分类预测因子。分类预测器是从一组固定的可能性中提取值。

  • 对于数字数组X,指示类别预测符使用“分类”名称-值对。例如,指示预测器2而且3.其中六项是绝对的:

    mdl = fitlm (X, y,“分类”[2、3]);%或等价mdl = fitlm (X, y,“分类”,逻辑([0 1 1 0 0 0]));
  • 用于表或数据集数组资源描述,拟合函数假设这些数据类型是分类的:

    • 逻辑向量

    • 分类向量

    • 字符数组

    • 字符串数组

    如果您想表明数字预测器是绝对的,请使用“分类”名称-值对。

将丢失的数字数据表示为.若要表示其他数据类型的缺失数据,请参见失踪组值

输入和响应数据集数组

从Excel中创建数据集数组®电子表格:

ds =数据集(“XLSFile”,“hospital.xls”,...“ReadObsNames”,真正的);

从工作空间变量创建一个数据集数组:

负载carsmallds =数据集(MPG、重量);ds。年=分类(Model_Year);

输入和响应数据表

从Excel电子表格中创建表格:

台= readtable (“hospital.xls”,...“ReadRowNames”,真正的);

用工作空间变量创建一个表:

负载carsmall台=表(MPG、重量);资源描述。年=分类(Model_Year);

输入数据为数值矩阵,响应数据为数值向量

例如,要从工作空间变量创建数字数组:

负载carsmallX =[重量马力汽缸型号_年];y = MPG;

从Excel电子表格创建数字数组:

[X, Xnames] = xlsread(“hospital.xls”);y = X (:, 4);%响应y为收缩压X (:, 4) = [];%从X矩阵中移除y

注意,非数字条目,例如,不出现在X

选择合适的方法

有三种方法使模型适合数据:

最小二乘匹配

使用fitlm建立模型与数据的最小二乘拟合。当你对模型的形式有合理的确定,主要需要找到它的参数时,这种方法是最好的。当您想要研究几个模型时,此方法也很有用。该方法要求您手动检查数据以丢弃异常值,尽管有一些技术可以提供帮助(参见检查质量,调整模型)。

健壮的配合

使用fitlmRobustOpts名称-值对来创建一个受异常值影响很小的模型。健壮的拟合省去了手动丢弃异常值的麻烦。然而,一步不能与健壮的拟合工作。这意味着当你使用鲁棒拟合时,你不能逐步搜索一个好的模型。

逐步适应

使用stepwiselm找到一个模型,并拟合参数的模型。stepwiselm从一个模型开始,比如一个常数,每次加或减一个项,每次都以贪婪的方式选择一个最优项,直到不能进一步改进为止。使用逐步拟合找到一个好的模型,这是一个只有相关项的模型。

结果取决于启动模型。通常,从常数模型开始会得到一个小模型。从更多的项开始可以得到一个更复杂的模型,但它具有更低的均方误差。看到比较大的和小的逐步模型

您不能使用稳健选项和逐步拟合。因此,在逐步拟合之后,检查你的模型是否有异常值(参见检查质量,调整模型)。

选择一个模型或一系列模型

有几种方法可以指定线性回归的模型。用你认为最方便的。

fitlm你给出的模型规格是合适的模型。如果没有给出模型规范,则默认为“线性”

stepwiselm,您给出的模型规范是初始模型,逐步过程试图改进该模型。如果您没有给出模型规范,默认的起始模型是“不变”,默认上边界模型为“互动”.方法更改上边界模型名称-值对。

请注意

还有其他选择模型的方法,例如使用套索,lassoglm,sequentialfs,或plsregress

简短的名字

的名字 模型类型
“不变” 模型只包含一个常数(截距)项。
“线性” 模型包含每个预测器的截距和线性项。
“互动” 模型包含一个截距、线性项和对不同预测项的所有乘积(没有平方项)。2022世界杯八强谁会赢?
“purequadratic” 模型包含截距、线性项和平方项。
“二次” 模型包含截距、线性项、相互作用和平方项。
“聚ijk 模型是一个多项式,所有项都在一定程度上第一个预测因子是度j在第二个预测器中,等等。使用数字0通过9.例如,“poly2111”有一个常数加上所有的线性项和乘积项,也包含预测项1的平方。

例如,指定使用的交互模型fitlm矩阵预测:

mdl = fitlm (X, y,“互动”);

指定使用的模型stepwiselm和一个表或数据集数组资源描述对于预测器,假设你想从一个常数开始,并有一个线性模型的上限。假设响应变量为资源描述在第三列。

mdl2 = stepwiselm(资源描述,“不变”,...“上”,“线性”,“ResponseVar”3);

计算矩阵

一个条件矩阵T是一个t————(p+ 1)矩阵指定模型中的项,其中t是项的个数,p为预测变量个数,+1为响应变量。的价值T (i, j)是变量的指数吗j在术语

例如,假设一个输入包含三个预测变量x1,x2,x3响应变量y的顺序x1,x2,x3,y.每一行的T代表一个术语:

  • [0 0 0 0]-常数项或截距

  • [0 1 0 0]- - - - - -x2;同样,X1 ^0 * x2^1 * x3^0

  • [10 0 10 0]- - - - - -x1 * x3

  • [2 0 0 0]- - - - - -x1 ^ 2

  • [0 1 2 0]- - - - - -x2 * (x3 ^ 2)

0每一项的末尾代表响应变量。通常,项矩阵中的零列向量表示响应变量的位置。如果在矩阵和列向量中有预测器和响应变量,则必须包含0对于每一行最后一列中的响应变量。

公式

模型规范的公式是该形式的字符向量或字符串标量

y条款,

  • y是响应名称。

  • 条款包含

    • 变量名

    • +来包含下一个变量

    • -排除下一个变量

    • 定义一个交互,一个术语的乘积

    • 定义交互和所有低阶项

    • 把预测因子提高到一次方,就像重复,所以也包括低阶项

    • ()组条件

提示

公式默认包含一个常数(截距)项。要从模型中排除常数项,包括-1的公式。

例子:

'y ~ x1 + x2 + x3'是一个具有截距的三变量线性模型。
'y ~ x1 + x2 + x3 - 1'为无截距的三变量线性模型。
'y ~ x1 + x2 + x3 + x2^2'是一个三变量模型,有截距和x2 ^ 2术语。
'y ~ x1 + x2^2 + x3'是否与前面的例子相同,sincex2 ^ 2包括一个x2术语。
'y ~ x1 + x2 + x3 + x1:x2'包括一个x1 * x2术语。
'y ~ x1*x2 + x3'是否与前面的例子相同,sinceX1 *x2 = X1 + x2 + X1:x2
'y ~ x1*x2*x3 - x1:x2:x3'所有的相互作用x1,x2,x3,除了三方相互作用。
'y ~ x1*(x2 + x3 + x4)'所有的线性项,加上的乘积2022世界杯八强谁会赢?x1对其他每个变量。

例如,指定使用的交互模型fitlm矩阵预测:

mdl = fitlm (X, y,'y ~ x1*x2*x3 - x1:x2:x3');

指定使用的模型stepwiselm和一个表或数据集数组资源描述对于预测器,假设你想从一个常数开始,并有一个线性模型的上限。假设响应变量为资源描述被命名为“y”,并命名预测变量x1的,“x2”,“x3”

mdl2 = stepwiselm(资源描述,“y ~ 1”,“上”,'y ~ x1 + x2 + x3');

模型与数据的拟合

最常见的拟合可选参数:

  • 的稳健回归fitlm,设置“RobustOpts”名称-值对“上”

  • 中指定适当的上限模型stepwiselm,如集“上”“线性”

  • 方法指示哪些变量是分类的“CategoricalVars”名称-值对。提供具有列编号的向量,例如(1 - 6)来指定那个预测器1而且6是绝对的。或者,给出与数据列相同长度的逻辑向量1表明该变量是分类变量的条目。如果有七个预测因子,那么1而且6分类,指定逻辑([1,0,0,0,0,1,0])

  • 方法指定响应变量“ResponseVar”名称-值对。默认值是数组中的最后一列。

例如,

mdl = fitlm (X, y,“线性”,...“RobustOpts”,“上”,“CategoricalVars”3);mdl2 = stepwiselm(资源描述,“不变”,...“ResponseVar”,“英里”,“上”,“二次”);

检查质量,调整模型

拟合模型后,检查结果并进行调整。

模型显示

当您输入它的名称或输入时,线性回归模型会显示几个诊断disp (mdl).此显示提供了一些基本信息,以检查拟合模型是否充分表示数据。

例如,拟合线性模型的数据构造,其中五个预测因子中有两个不存在,且没有拦截项:

X = randn (100 5);y = X*[1;0;3;0;-1] + randn(100,1);mdl = fitlm (X, y)
mdl =线性回归模型:y ~ 1 + x1 + x2 + x3 + x4 + x5估计系数:估计SE tStat pValue _________ ________ ________ __________ (Intercept) 0.038164 0.099458 0.38372 0.70205 x1 0.92794 0.087307 10.628 8.5494e-18 x2 -0.075593 0.10044 -0.75264 0.45355 x3 2.8965 0.099879 29 1.1117e-48 x4 0.045311 0.10832 0.41831 0.67667 x5 -0.99708 0.11799 -8.4504 3.593e-13观察数:100,误差自由度:94均方根误差:0.972 r平方:0.93,调整后的r平方:0.926 f统计量vs常数模型:248,p值= 1.5e-52

注意:

  • 中每个系数的估计值估计列。这些值相当接近真实值[0, 1, 0; 3, 0, 1]

  • 系数估计有一个标准误差列。

  • 的报道pValue的词源t统计数据(tStat)在正常误差的假设下),对于预测因子1、3和5是非常小的。这是用于创建响应数据的三个预测器y

  • pValue(拦截),x2而且x4远远大于0.01。这三个预测器没有用于创建响应数据y

  • 显示包含 R 2 调整后 R 2 ,F统计数据。

方差分析

要检验拟合模型的质量,请参考方差分析表。例如,使用方差分析在具有五个预测因子的线性模型上:

台=方差分析(mdl)
台=6×5表SumSq DF MeanSq F pValue _________ _______ _______ __________ x1 106.62 1 106.62 112.96 8.5494e-18 x2 0.53464 1 0.53464 0.56646 0.45355 x3 793.74 1 793.74 840.98 1.1117e-48 x4 0.16515 1 0.16515 0.17498 0.67667 x5 67.398 1 67.398 71.41 3.593e-13错误88.719 94 0.94382

这个表给出的结果与模型显示的结果有些不同。表格清楚地显示了……的影响x2而且x4并不重要。根据你的目标,考虑删除x2而且x4从模型。

诊断的情节

诊断图帮助您识别异常值,并查看模型或拟合中的其他问题。例如,加载carsmall数据,并做了一个模型英里/加仑作为气缸(分类),重量

负载carsmall台=表(重量,英里/加仑,缸);资源描述。气缸=分类(tbl.Cylinders);mdl = fitlm(资源描述,MPG ~气缸*重量+重量^2);

制作数据和模型的杠杆图。

plotDiagnostics (mdl)

图中包含一个axes对象。带有标题Case order plot的axis对象包含两个类型为line的对象。这些对象代表杠杆,参考线。

杠杆率高的有几个点。但这幅图并没有揭示高杠杆点是否是异常点。

寻找库克距离大的点。

plotDiagnostics (mdl“cookd”

图中包含一个axes对象。标题为Case order plot的axis对象包含两个类型为line的对象。这些物体代表库克距离,参考线。

有一个点的库克距离很大。识别它并从模型中删除它。您可以使用数据游标单击离群值并识别它,或以编程方式识别它:

[~, larg] = max (mdl.Diagnostics.CooksDistance);mdl2 = fitlm(资源描述,MPG ~气缸*重量+重量^2,“排除”, larg);

残差-训练数据的模型质量

有几个残留图可以帮助您发现模型或数据中的错误、异常值或相关性。最简单的残差图是默认的直方图,它显示残差及其频率的范围,以及概率图,它显示残差的分布如何与方差匹配的正态分布进行比较。

检验残差:

plotResiduals (mdl)

图中包含一个axes对象。标题为残差直方图的axes对象包含一个类型为patch的对象。

以上12个观测值是潜在的异常值。

plotResiduals (mdl“概率”

图中包含一个axes对象。标题为残差正态概率图的轴对象包含2个类型为line的对象。

在这个图中也出现了两个潜在的异常值。否则,概率图似乎相当直,这意味着合理适合正态分布残差。

你可以识别出这两个异常值,并从数据中删除它们:

outl =找到(mdl.Residuals。生> 12)
outl =2×190 97

要删除异常值,请使用排除名称-值对:

mdl3 = fitlm(资源描述,MPG ~气缸*重量+重量^2,“排除”, outl);

检查mdl2的残差图:

plotResiduals (mdl3)

图中包含一个axes对象。标题为残差直方图的axes对象包含一个类型为patch的对象。

新的残差图看起来相当对称,没有明显的问题。然而,残差之间可能存在一定的序列相关性。创建一个新的图表,看看这种效应是否存在。

plotResiduals (mdl3“落后”

图中包含一个axes对象。标题为Plot of residuals vs. lag residuals的axis对象包含3个类型为line的对象。

散点图显示,右上和左下象限的交叉要多于其他两个象限,表明残差之间存在正的序列相关性。

另一个潜在的问题是当残差对大型观测较大时。看看当前的型号是否有这个问题。

plotResiduals (mdl3“安装”

图中包含一个axes对象。标题为Plot of残差与拟合值的axis对象包含两个类型为line的对象。

较大的拟合值有较大的残差的趋势。也许模型误差与测量值成正比。

图解理解预测效应

这个例子展示了如何使用各种可用的图来理解每个预测因子对回归模型的影响。

检查回答的切片图。这将分别显示每个预测器的效果。

plotSlice (mdl)

{

您可以拖动各个预测器值,这些值由蓝色虚线表示。您还可以在同时和非同时置信界限之间进行选择,它们由红色虚线曲线表示。

使用效果图来显示预测因素对响应的影响的另一种观点。

plotEffects (mdl)

图中包含一个axes对象。axis对象包含4个line类型的对象。

这幅图显示了这种变化重量从2500降到4732英里/加仑大约30(上面蓝色圆圈的位置)。它还表明,改变气缸的数量从8到4提高英里/加仑大约10(下面的蓝色圆圈)。水平的蓝线表示这些预测的置信区间。当另一个预测因子改变时,这些预测因子的平均值就会得到。在这种情况下,两个预测器是相关的,在解释结果时要小心。

在相互作用图中检查联合相互作用,而不是在另一个被改变的预测器上观察平均值的效果。

plotInteraction (mdl“重量”,“气缸”

图中包含一个axes对象。标题为Interaction of Weight and cylinder的axis对象包含12个类型为line的对象。

交互图显示了改变一个预测因子与保持另一个不变的影响。在这种情况下,情节的信息量更大。例如,它表明,在一辆相对轻的汽车(重量= 1795)会增加行驶里程,但会降低一辆相对较重的汽车的汽缸数量(重量= 4732)导致行驶里程减少。

要更详细地了解交互作用,请查看带有预测的交互作用图。这个图固定一个预测因子,而改变另一个预测因子,并将其效果绘制成曲线。观察不同数量的圆柱体之间的相互作用。

plotInteraction (mdl“气缸”,“重量”,“预测”

图中包含一个axes对象。标题为“Interaction of cylinder and Weight”的axis对象包含4个类型为line的对象。这些对象表示柱面,4,6,8。

现在看看与不同固定重量水平的相互作用。

plotInteraction (mdl“重量”,“气缸”,“预测”

图中包含一个axes对象。标题为Interaction of Weight and cylinder的axis对象包含4个类型为line的对象。这些对象代表重量,1795,3263.5,4732。

图解理解术语效果

这个例子展示了如何使用各种可用的图来理解回归模型中每个项的影响。

创建一个添加的变量图体重^ 2作为附加变量。

plotAdded (mdl“体重^ 2”

图中包含一个axes对象。标题为Weight^2添加变量plot的axes对象包含3个类型为line的对象。这些对象表示调整后的数据,适合度:y=-5.62168e-06*x, 95% conf. bounds。

这张图显示了两者的拟合结果体重^ 2而且英里/加仑其他的条款体重^ 2.使用的原因plotAdded是了解通过添加可以在模型中获得哪些额外的改进体重^ 2.与这些点相吻合的直线的系数是的系数体重^ 2在完整模型中。的体重^ 2预测刚刚过了重要的边缘(pValue< 0.05),你可以在系数表中看到。你可以在情节中看到这一点。置信边界看起来不可能包含一条水平线(常数)y),因此零坡度模型与数据不一致。

为整个模型创建一个附加的变量图。

plotAdded (mdl)

图中包含一个axes对象。标题为Added variable plot的axis对象为整个模型包含3个类型为line的对象。这些对象表示调整后的数据,Fit: y=85.8376*x, 95% conf. bounds。

模型作为一个整体是非常重要的,所以边界不接近包含一条水平线。直线的斜率是投影到最佳拟合方向上的预测因子的拟合斜率,或者换句话说,是系数向量的范数。

变化模型

有两种方法可以改变模型:

如果您创建的模型使用stepwiselm,然后一步只有当你给出不同的上下模型时才会有效果。一步不工作时,你适合模型使用RobustOpts

例如,从里程的线性模型开始carbig数据:

负载carbig台=表(加速度、位移、马力、体重、MPG);mdl = fitlm(资源描述,“线性”,“ResponseVar”,“英里”
mdl =线性回归模型:MPG ~ 1 +加速度+位移+马力+重量估计系数:估计SE tStat pValue __________ __________ ________ __________(截距)45.251 2.456 18.424 7.0721e-55加速度-0.023148 0.1256 -0.1843 0.85388位移-0.0060009 0.0067093 -0.89441 0.37166马力-0.043608 0.016573 -2.6312 0.008849重量-0.0052805 0.00081085 -6.5123 2.3025e-10观察数:392,误差自由度:387均方根误差:4.25 r平方:0.707,调整r平方:0.704 f统计量与常数模型:233,p值= 9.63e-102

尝试使用步骤改进模型,最多10个步骤:

mdl1 =步骤(mdl,“NSteps”, 10)
1.添加位移:马力,FStat = 87.4802, pValue = 7.05273e-19
mdl1 =线性回归模型:MPG ~ 1 +加速度+重量+排量*马力估计SE tStat pValue __________ __________ _______ __________(拦截)61.285 2.8052 21.847 1.8593e-69加速度-0.34401 0.11862 -2.9 0.0039445位移-0.081198 0.010071 -8.0623 9.5014e-15马力-0.24313 0.026068 -9.3265 8.6556e-19重量-0.0014367 0.00084041 -1.7095 0.088166位移:马力0.00054236 5.7987e-05 9.3531 7.0527e-19观察数:392,误差自由度:386平均平方误差:3.84 r平方:0.761,调整r平方:0.758 f -统计量与常数模型:246,p-值= 1.32e-117

一步只做了一个改动就停止了。

要简化模型,请删除加速度而且重量mdl1

mdl2 = removeTerms (mdl1,“加速+重量”
mdl2 =线性回归模型:MPG ~ 1 +位移*马力估计系数:估计SE tStat pValue __________ _________ _______ ___________(截距)53.051 1.526 34.765 3.0201e-121位移-0.098046 0.0066817 -14.674 4.3203e-39马力-0.23434 0.019593 -11.96 2.8024e-28位移:马力0.00058278 5.193e-05 11.222 1.6816e-25观察数:392,误差自由度:388均方根误差:3.94 r -平方:0.747,调整后r -平方:0.745 f统计量与常数模型:381,p值= 3e-115

mdl2只使用位移而且马力,与数据的拟合程度几乎与mdl1调整后的平方指标。

预测或模拟对新数据的响应

一个LinearModel对象提供了三个函数来预测或模拟对新数据的响应:预测,函数宏指令,随机

预测

使用预测函数预测并获得预测的置信区间。

加载carbig数据并创建一个默认的响应线性模型英里/加仑加速度,位移,马力,重量预测因子。

负载carbigX =(加速度、位移、马力、重量);mdl = fitlm (X, MPG);

根据最小值、平均值和最大值创建一个三行预测器数组。X包含了一些值,因此指定“omitnan”选择的意思是函数。的最小值而且马克斯功能省略默认情况下计算中的值。

Xnew = [min (X);意味着(X,“omitnan”)、马克斯(X)];

找出预测的模型响应和预测的置信区间。

[NewMPG, NewMPGCI] = predict(mdl,Xnew)
NewMPG =3×134.1345 23.4078 4.7751
NewMPGCI =3×231.6115 36.6575 22.9859 23.8298 0.6134 8.9367

平均响应的置信限比最小或最大响应的置信限窄。

函数宏指令

使用函数宏指令预测响应的函数。当您从表或数据集数组创建模型时,函数宏指令往往比预测预测反应。当你有新的预测数据时,你可以把它传递给函数宏指令不需要创建表格或矩阵。然而,函数宏指令不提供置信度界限。

加载carbig并创建一个默认的响应线性模型英里/加仑的预测因素加速度,位移,马力,重量

负载carbig台=表(加速度、位移、马力、体重、MPG);mdl = fitlm(资源描述,“线性”,“ResponseVar”,“英里”);

预测预测器平均值的模型响应。

NewMPG =函数宏指令(mdl,意味着(加速度,“omitnan”),意味着(位移,“omitnan”),意味着(马力,“omitnan”),意思是(重量,“omitnan”))
NewMPG = 23.4078

随机

使用随机函数模拟响应。的随机函数模拟新的随机响应值,等于平均值预测加上一个与训练数据方差相同的随机扰动。

加载carbig数据并创建一个默认的响应线性模型英里/加仑加速度,位移,马力,重量预测因子。

负载carbigX =(加速度、位移、马力、重量);mdl = fitlm (X, MPG);

根据最小值、平均值和最大值创建一个三行预测器数组。

Xnew = [min (X);意味着(X,“omitnan”)、马克斯(X)];

生成新的预测模型响应,包括一些随机性。

rng (“默认”%的再现性Xnew NewMPG =随机(mdl)
NewMPG =3×136.4178 31.1958 -4.8176

因为一个负值英里/加仑看起来不太明智,试着再预测两次。

Xnew NewMPG =随机(mdl)
NewMPG =3×137.7959 24.7615 -0.7783
Xnew NewMPG =随机(mdl)
NewMPG =3×132.2931 24.8628 19.9715

显然,对第三行(最大)的预测Xnew是不可靠的。

共享拟合模型

假设您有一个线性回归模型,例如mdl从以下命令。

负载carbig台=表(加速度、位移、马力、体重、MPG);mdl = fitlm(资源描述,“线性”,“ResponseVar”,“英里”);

要与他人共享模型,您可以:

  • 提供模型显示。

mdl
mdl =线性回归模型:MPG ~ 1 +加速度+位移+马力+重量估计系数:估计SE tStat pValue __________ __________ ________ __________(截距)45.251 2.456 18.424 7.0721e-55加速度-0.023148 0.1256 -0.1843 0.85388位移-0.0060009 0.0067093 -0.89441 0.37166马力-0.043608 0.016573 -2.6312 0.008849重量-0.0052805 0.00081085 -6.5123 2.3025e-10观察数:392,误差自由度:387均方根误差:4.25 r平方:0.707,调整r平方:0.704 f统计量与常数模型:233,p值= 9.63e-102
  • 提供模型定义和系数。

mdl。为mula
ans = MPG ~ 1 +加速度+排水量+马力+重量
mdl。CoefficientNames
ans =1 x5单元格第1至4列{'(截距)'}{'加速度'}{'位移'}{'马力'}第5列{'重量'}
mdl.Coefficients.Estimate
ans =5×145.2511 -0.0231 -0.0060 -0.0436 -0.0053

另请参阅

|||||||

相关的话题

Baidu
map