主要内容

以编程方式比较适合度

这个例子展示了如何使用曲线拟合工具箱™来拟合和比较六阶多项式,拟合一些人口普查数据。它还展示了如何拟合一个单项指数方程,并将其与多项式模型进行比较。

下面的步骤展示了如何:

  • 使用不同的库模型加载数据并创建适合的对象。

  • 通过比较图形拟合结果和比较数值拟合结果(包括拟合系数和拟合优度统计量)来寻找最佳拟合。

加载和绘制数据

本例的数据是文件census.mat。

负载人口普查

工作区包含两个新变量:

  • Cdate是一个列向量,包含1790年到1990年的10年增量。

  • pop是一个列向量,表示与cdate年对应的美国人口数字。

cdate流行情节(cdate、流行,“o”
名称大小字节类属性cdate 21x1 168 double pop 21x1 168 double

创建并绘制一个二次曲线

使用拟合函数来拟合一个多项式到数据。使用'poly2'指定二次多项式或二次多项式。第一个来自拟合的输出是多项式,第二个输出gof包含您将在后面的步骤中检查的拟合统计的优度。

[population2,gof] = fit(cdate,pop,)“poly2”);

要绘制适合度,请使用绘图方法。

情节(population2、cdate、流行);将图例移动到左上角。传奇(“位置”“西北”);

创建并绘制一组多项式

要拟合不同程度的多项式,改变拟合类型,例如,对于三次或三次多项式使用'poly3'。输入的比例cdate相当大,因此可以通过对数据进行定心和缩放来获得更好的结果。要做到这一点,使用“Normalize”选项。

Population3 = fit(cdate,pop,“poly3”“正常化”“上”);Population4 = fit(cdate,pop,“poly4”“正常化”“上”);Population5 = fit(cdate,pop,“poly5”“正常化”“上”);Population6 = fit(cdate,pop,“poly6”“正常化”“上”);

一个简单的人口增长模型告诉我们,指数方程应该很好地符合人口普查数据。要拟合单个项指数模型,使用“exp1”作为拟合类型。

populationExp = fit(cdate,pop,“exp1”);

同时绘制所有适合的情节,并在情节的左上角添加一个有意义的传说。

持有情节(population3“b”);情节(population4‘g’);情节(population5“米”);情节(population6“b——”);情节(populationExp“r——”);持有传奇('cdate v pop'“poly2”“poly3”“poly4”“poly5”“poly6”“exp1”...“位置”“西北”);

绘制残差来评估拟合

要绘制残差,请在plot方法中将“残差”指定为绘图类型。

情节(population2 cdate、流行、“残差”);

多项式方程的拟合和残差都很相似,很难选择最佳的多项式方程。如果残差显示一个系统的模式,这是一个明显的迹象,表明模型拟合数据差。

情节(populationExp cdate、流行、“残差”);

单项指数方程的拟合和残差表明其总体拟合较差。因此,这是一个糟糕的选择,您可以从最佳适合的候选人中删除指数适合。

检查超出数据范围的拟合度

研究一下到2050年之前fit的行为。拟合人口普查数据的目标是推断出最佳拟合来预测未来的人口值。默认情况下,拟合是在数据范围内绘制的。若要绘制不同范围内的拟合,请在绘制拟合之前设置坐标轴的x极限。例如,要查看从拟合推断出的值,请将x上限设置为2050。

情节(cdate、流行,“o”);xlim((1900、2050));持有情节(population6);持有

审视剧情。六次多项式拟合超出数据范围的行为使它成为一个糟糕的外推选择,您可以拒绝这种拟合。

剧情预测间隔

要绘制预测间隔,使用'predobs'或'predfun'作为情节类型。例如,要查看到2050年的一个新观测的五次多项式的预测边界:

情节(cdate、流行,“o”);Xlim([1900, 2050])持有情节(population5“predobs”);持有

绘制到2050年的三次多项式预测区间。

情节(cdate、流行,“o”);Xlim([1900, 2050])持有情节(population3“predobs”)举行

检查拟合优度统计

结构体gof显示了'poly2'适合的优度统计数据。当您在前面的步骤中使用fit函数创建'poly2'适合时,您指定了gof输出参数。

gof
Gof = struct with fields: sse: 159.0293 rsquare: 0.9987 dfe: 18 adjrsquare: 0.9986 rmse: 2.9724

检查误差平方和(SSE)和调整后的r方统计值,以帮助确定最佳拟合。SSE统计量是拟合的最小二乘误差,接近于零的值表示较好的拟合。当向模型中添加额外系数时,调整后的r平方统计量通常是拟合质量的最佳指标。

'exp1'的较大SSE表示它是一个较差的拟合,这是通过检查拟合和残差已经确定的。最低的SSE值与'poly6'相关。但是,这种适合超出数据范围的行为使它成为一个糟糕的外推选择,因此通过检查具有新的轴限制的图,您已经拒绝了这种适合。

次优SSE值与五次多项式拟合有关,“poly5”,这表明它可能是最佳拟合。然而,对于其余多项式拟合的SSE和调整后的r方值都非常接近。你应该选择哪一个?

比较系数和置信范围以确定最佳拟合

通过检查剩余拟合的系数和置信界限来解决最佳拟合问题:五次多项式和二次多项式。

通过显示模型、拟合系数和拟合系数的置信界限来检验population2和population5:

population2 population5
population2 =线性模型Poly2: population2(x) = 0.006541 (0.006124, 0.006958) p2 = -23.51 (-25.09, -21.93) p3 = 2.113e+04 (1.964e+04, 2.262e+04) population5 =线性模型Poly5: population5(x) = p1*x^5 + p2*x^4 + p3*x^3 + p4*x^2 + p5*x + p6其中x由平均值1890和std 62.05系数归一化(95%置信边界):P1 = 0.5877 (-2.305, 3.48) p2 = 0.7047 (-1.684, 3.094) p3 = -0.9193 (-10.19, 8.356) p4 = 23.47 (17.42, 29.52) p5 = 74.97 (68.37, 81.57) p6 = 62.23 (59.51, 64.95)

你也可以通过使用限制来得到置信区间。

Ci = confint(population5)
Ci = -2.3046 -1.6841 -10.1943 17.4213 68.3655 59.5102 3.4801 3.0936 8.3558 29.5199 81.5696 64.9469

系数的置信界限决定了它们的准确性。检验拟合方程(例如f(x)=p1*x+p2*x…)可以看到每个系数的模型项。注意,p2指的是'poly2'中的p2*x项和'poly5'中的p2*x^4项。不要直接比较归一化系数和非归一化系数。

五次多项式的p1 p2 p3系数的边界越过零。这意味着你不能确定这些系数不等于零。如果高阶模型项的系数可能为零,则它们对拟合没有帮助,这表明该模型过度拟合了人口普查数据。

对于每个归一化多项式方程,与常数项、线性项和二次项相关的拟合系数几乎相同。然而,随着多项式次的增加,与更高次项相关的系数界限越过零,这表明过拟合。

然而,二次拟合的小置信界限在p1、p2和p3上没有越过零,这表明拟合系数是相当准确的。

因此,在检验了图形拟合和数值拟合结果后,应选择二次种群2作为人口普查数据外推的最佳拟合。

评估新查询点的最佳拟合

现在您已经选择了最佳适合度population2,用于推断人口普查数据,然后评估一些新的查询点的适合度。

cdateFuture = (2000:10:2020).';popFuture = population2(cdateFuture)
popFuture = 274.6221 301.8240 330.3341

要计算未来总体预测的95%置信界限,使用predint方法:

ci = predint(population2,cdateFuture,0.95,“观察”
Ci = 266.9185 282.3257 293.5673 310.0807 321.3979 339.2702

根据拟合和数据,绘制预测的未来人口图,具有置信区间。

情节(cdate、流行,“o”);Xlim([1900, 2040])持有plot(population2) h = errorbar(cdateFuture,popFuture,popFuture-ci(:,1),ci(:,2)-popFuture,'.');持有传奇('cdate v pop'“poly2”“预测”“位置”“西北”

Baidu
map