这个例子展示了如何使用曲线拟合工具箱拟合和比较六度以下的多项式,拟合一些普查数据。它还展示了如何拟合一个单项指数方程,并将其与多项式模型进行比较。
步骤显示如何:
使用不同的库模型加载数据并创建适合的版本。
通过比较图形拟合结果,以及比较数值拟合结果(包括拟合系数和拟合优度统计量)来寻找最佳拟合结果。
本示例的数据是文件census.mat。
负载人口普查
工作区包含两个新变量:
Cdate是一个列向量,以10年为增量,包含1790年到1990年。
pop是美国人口数据的列向量,对应于cdate中的年份。
谁cdate流行情节(cdate、流行,“o”)
Name Size Bytes Class Attributes cdate 21x1 168 double pop 21x1 168 double
用拟合函数拟合多项式到数据。你用字符串'poly2'指定一个二次多项式或二次多项式。拟合的第一个输出是多项式,第二个输出是gof,它包含您将在后面的步骤中检查的拟合优度统计数据。
[population2, gof] =适合(cdate、流行、“poly2”);
要绘制适合的曲线,请使用绘图法。
情节(population2、cdate、流行);%将图例移动到左上角。传奇(“位置”,“西北”);
要拟合不同程度的多项式,改变拟合类型字符串,例如,对于三次或三次多项式使用'poly3'。输入cdate的规模相当大,因此通过对数据进行定心和缩放可以获得更好的结果。要做到这一点,使用“Normalize”选项。
population3 =适合(cdate、流行、“poly3”,“正常化”,“上”);population4 =适合(cdate、流行、“poly4”,“正常化”,“上”);population5 =适合(cdate、流行、“poly5”,“正常化”,“上”);population6 =适合(cdate、流行、“poly6”,“正常化”,“上”);
一个简单的人口增长模型告诉我们,指数方程应该能很好地拟合人口普查数据。要拟合一个单项指数模型,使用“exp1”作为拟合类型。
populationExp =适合(cdate、流行、“exp1”);
一次绘制所有适合的情节,并在情节的左上角添加一个有意义的传奇。
持有在情节(population3“b”);情节(population4‘g’);情节(population5“米”);情节(population6“b——”);情节(populationExp“r——”);持有从传奇(“cdate v流行”,“poly2”,“poly3”,“poly4”,“poly5”,“poly6”,“exp1”,...“位置”,“西北”);
要绘制残差,请在plot方法中指定“残差”作为绘图类型。
情节(population2 cdate、流行、“残差”);
多项式方程的拟合和残差都是相似的,因此很难选择最好的。如果残差显示出系统模式,这是一个明确的信号,表明模型与数据的拟合很差。
情节(populationExp cdate、流行、“残差”);
单项指数方程的拟合和残差表明它是一个较差的整体拟合。因此,这是一个糟糕的选择,你可以从最佳拟合的候选中去除指数拟合。
检查到2050年的行为。拟合人口普查数据的目的是外推最佳拟合来预测未来的人口价值。默认情况下,拟合是在数据范围内绘制的。要在不同范围内绘制拟合图,在绘制拟合图之前设置坐标轴的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' fit时,您指定了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平方值都非常接近。你应该选择哪一个?
通过检验剩余拟合的系数和置信界限来解决最佳拟合问题:五次多项式和二次多项式。
通过显示模型、拟合系数和拟合系数的置信界限来检查人口2和人口5:
population2 population5
系数(95%置信限):p1 = 0.006541 (0.006124, 0.006958) p2 = -23.51 (-25.09, -21.93) p3 = 2.113e+04 (1.964e+04, 2.266 2e+04) population5 = Linear model 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)
您还可以使用confint来获得置信区间。
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的边界都是零。这意味着你不能确定这些系数不等于零。如果高阶模型项的系数可能为零,则对拟合没有帮助,这表明该模型对人口普查数据拟合过度。
与常数、线性和二次项相关的拟合系数对于每个归一化多项式方程几乎相同。然而,随着多项式次数的增加,与高次项相关的系数界限越过零,这表明过拟合。
然而,对于二次拟合来说,小的置信边界没有越过0,这表明拟合系数是相当准确的。
因此,在检查图形和数字拟合结果之后,您应该选择二次总体2作为最佳拟合来推断人口普查数据。
现在您已经选择了最适合的population2,用于推断人口普查数据,评估一些新查询点的适合度。
cdateFuture =(2000:10:2020)。';popFuture = population2 (cdateFuture)
popFuture = 274.6221 301.8240 330.3341
为了计算未来人口预测的95%置信界限,使用预测方法:
ci = predint (population2 cdateFuture, 0.95,“观察”)
Ci = 266.9185 282.3257 293.5673 310.0807 321.3979 339.2702
根据拟合和数据,用置信区间绘制预测的未来人口。
情节(cdate、流行,“o”);xlim((1900、2040))在/ / / / / / / / / / / / / / / / / / /“。”);持有从传奇(“cdate v流行”,“poly2”,“预测”,“位置”,“西北”)