主要内容

线性回归

准备数据

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

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

MDL = fitlm(tbl,“ResponseVar”“血压”);

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

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

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

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

    • 逻辑向量

    • 分类向量

    • 字符数组

    • 字符串数组

    如果要指示数字预测器是分类的,请使用“分类”名称-值对。

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

输入和响应数据的数据集数组

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

Ds = dataset(“XLSFile”“hospital.xls”...“ReadObsNames”,真正的);

使用工作区变量创建数据集数组:

负载carsmallds = dataset(MPG,Weight);ds。Year = categorical(Model_Year);

输入和响应数据表

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

可读的(“hospital.xls”...“ReadRowNames”,真正的);

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

负载carsmalltbl = table(MPG,Weight);资源描述。Year = categorical(Model_Year);

数字矩阵为输入数据,数字矢量为响应

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

负载carsmallX =[重量马力气缸型号_year];y = MPG;

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

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

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

选择合适的方法

将模型与数据拟合有三种方法:

最小二乘匹配

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

健壮的配合

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

逐步适应

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

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

你不能在逐步拟合的同时使用健壮的选项。因此,在逐步拟合之后,检查您的模型中的异常值(参见检验质量,调整拟合模型).

选择一个模型或模型范围

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

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

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

请注意

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

简短的名字

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

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

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

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

Mdl2 = stepwism (tbl,“不变”...“上”“线性”“ResponseVar”3);

计算矩阵

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

例如,假设一个输入包含三个预测变量x1x2,x3以及响应变量y按顺序x1x2x3,y.每行T表示一项:

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

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

  • [1 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'与前面的例子相同,因为x2 ^ 2包括一个x2术语。
'y ~ x1 + x2 + x3 + x1:x2'包括一个x1 * x2术语。
'y ~ x1*x2 + x3'与前面的例子相同,因为X1 *x2 = X1 + x2 + X1:x2
'y ~ x1*x2*x3 - x1:x2:x3'所有的相互作用x1x2,x3,除了三方互动。
'y ~ x1*(x2 + x3 + x4)'都是线性项,加上的积下载188bet金宝搏x1每个变量。

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

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

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

Mdl2 = stepwism (tbl,'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 = stepwism (tbl,“不变”...“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 _________ ________ ________ __________(截距)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统计数据。

方差分析

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

TBL =方差(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 Error 88.719 94 0.94382

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

诊断的情节

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

负载carsmalltbl = table(重量,MPG,气缸);资源描述。圆柱=分类(tb .Cylinders);MDL = fitlm(tbl,'MPG ~气缸*重量+重量^2');

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

plotDiagnostics (mdl)

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

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

寻找Cook距离大的点。

plotDiagnostics (mdl“cookd”

图中包含一个轴对象。Cook’s distance Case order plot的坐标轴对象包含2个类型为line的对象。这些物体代表库克的距离,参考线。

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

[~,larg] = max(mdl.Diagnostics.CooksDistance);Mdl2 = fitlm(tbl,'MPG ~气缸*重量+重量^2'“排除”, larg);

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

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

检查残差:

plotResiduals (mdl)

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

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

plotResiduals (mdl“概率”

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

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

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

outl = find(mll .残差。12)
outl =2×190 97

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

Mdl3 = fitlm(tbl,'MPG ~气缸*重量+重量^2'“排除”, outl);

检验mdl2的残差图:

plotResiduals (mdl3)

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

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

plotResiduals (mdl3“落后”

图中包含一个轴对象。带有残差与滞后残差图标题的坐标轴对象包含3个类型线的对象。

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

另一个潜在的问题是,当大观测值的残差很大时。查看当前型号是否有此问题。

plotResiduals (mdl3“安装”

图中包含一个轴对象。标题为残差与拟合值的Plot的坐标轴对象包含2个类型为直线的对象。

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

理解预测因子效应的图表

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

检查反应的切片图。这分别显示了每个预测器的效果。

plotSlice (mdl)

图预测切片图包含2轴对象和uimenu、uicontrol类型的其他对象。Axes对象1包含5个line类型的对象。坐标轴对象2包含5个line类型的对象。

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

使用影响图来显示预测因素对响应的影响的另一个视图。

plotEffects (mdl)

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

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

当另一个预测器发生变化时,与其查看平均预测器的效果,不如在相互作用图中检查联合相互作用。

plotInteraction (mdl“重量”“气缸”

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

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

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

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

图中包含一个轴对象。标题为Interaction of Cylinders and Weight的axis对象包含4个类型为line的对象。这些物体分别代表圆柱体、4、6、8。

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

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

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

理解术语效果的图表

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

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

plotAdded (mdl“体重^ 2”

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

这个图显示了两者的拟合结果体重^ 2而且英里/加仑其他的条款体重^ 2.使用的原因plotAdded就是理解你在模型中添加了什么额外的改进体重^ 2.与这些点拟合的直线的系数为的系数体重^ 2在完整的模型中。的体重^ 2Predictor刚过显著性的边缘(pValue< 0.05),你可以在系数表中看到。你也可以在图中看到。置信边界看起来不可能包含一条水平线(常数y),因此零斜率模型与数据不一致。

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

plotAdded (mdl)

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

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

变化模型

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

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

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

负载carbigtbl = table(加速度,排量,马力,重量,MPG);MDL = fitlm(tbl,“线性”“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统计量vs常量模型: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统计量vs常数模型: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统计量vs常数模型:381,p值= 3e-115

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

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

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

预测

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

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

负载carbigX =[加速度,排水量,马力,重量];mdl = fitlm(X,MPG);

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

Xnew = [min(X);mean(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数据集并创建默认的响应线性模型英里/加仑对于预测者加速度位移马力,重量

负载carbigtbl = table(加速度,排量,马力,重量,MPG);MDL = fitlm(tbl,“线性”“ResponseVar”“英里”);

预测预测因子的平均值的模型响应。

NewMPG = feval(mdl,mean(加速度,“omitnan”),意味着(位移,“omitnan”),意味着(马力,“omitnan”),意思是(重量,“omitnan”))
NewMPG = 23.4078

随机

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

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

负载carbigX =[加速度,排水量,马力,重量];mdl = fitlm(X,MPG);

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

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

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

rng (“默认”再现率%NewMPG = random(mdl,Xnew)
NewMPG =3×136.4178 31.1958 -4.8176

因为一个负的英里/加仑似乎不太明智,试着再预测两次。

NewMPG = random(mdl,Xnew)
NewMPG =3×137.7959 24.7615 -0.7783
NewMPG = random(mdl,Xnew)
NewMPG =3×132.2931 24.8628 19.9715

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

分享合适的模型

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

负载carbigtbl = table(加速度,排量,马力,重量,MPG);MDL = fitlm(tbl,“线性”“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统计量vs常量模型: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

另请参阅

|||||||

相关的话题