How to| 获取拟合模型的结果
将数据拟合入一个模型中时,有一点往往比较重要,即获取额外的结果以对数据与拟合函数进行比较. 您可能会希望对参数的有效性进行检查,对模型的假设、数据点的影响以及拟合优度进行评估. 在 Wolfram 语言中,您可以从FittedModel 对象直接获取这些结果,该对象由 LinearModelFit、NonlinearModelFit 以及 GeneralizedLinearModelFit 等模型拟合函数返回.
data1 = {{1.2, 3.4}, {1.7, 4.2}, {2.8, 6.5}, {4.3, 11.2}, {4.8, 13.8}, {5.9, 19.9}, {7.4, 30.}, {7.7, 31.5}, {8.9, 41.9}, {10.2, 54.3}};使用 LinearModelFit 可以拟合一个简单的线性回归模型:
lm = LinearModelFit[data1, x, x]输出的是一个包含拟合及原始数据信息的 FittedModel 对象. 您可以直接从该对象得到结果并进行诊断.
使用 Normal 得到拟合模型的函数形式:
Normal[lm]lm[z]lm[2.5]由于 FittedModel 对象的计算方式与函数相同,您可以直接使用 Plot 对其进行绘图:
p1 = Plot[lm[x], {x, 1, 10}]您可以将数据点在拟合函数上进行可视化,方法是使用 Show 将数据点的 ListPlot 与上图合并:
Show[ListPlot[data1], p1]FittedModel 对象还包含与所表示的模型类型(在此例中是一个线性模型)相关的许多结果和诊断量. 您可以通过 "Properties" 计算 FittedModel 以得到该模型可用性质的一个完整列表.
这里,Length 用于给出该模型已知性质的数目:
lm["Properties"]//Length参数估计是否从统计学观点来说是有效的,即参数值是否显著不同于0,这个问题往往是非常重要的. 例如,对于一个线性模型,您或许会观察与该参数相关的
统计量的
值.
值是观察到一个
统计量至少比实际所得到的量距离零点远的概率.
对 FittedModel 使用 "ParameterTable",将显示一个表格,对参数估计、
统计量及
值进行总结:
lm["ParameterTable"]您可使用其它属性单独获取
统计量 和
值. 如果想要基于这些性质计算其它结果,这样做尤其重要. 对 FittedModel 使用 "ParameterPValues" 仅对
值进行观察:
lm["ParameterPValues"]同时观察多个性质可以通过输入一个性质列表完成. 同时观察
统计量 及
值:
lm[{"ParameterTStatistics", "ParameterPValues"}]lm["ParameterConfidenceIntervals"]缺省返回的置信区间是 95%. 通过 ConfidenceLevel 选项您可以得到其它水平的置信区间.
lm["ParameterConfidenceIntervals", ConfidenceLevel -> .99]resids = lm["FitResiduals"]使用 ListPlot 作出残差的视图:
ListPlot[resids]尽管非线性和广义线性模型的可用性质有所不同,它们的结果和诊断量可用同种方式获得. 这些类型的模型拟合可用 NonlinearModelFit、GeneralizedLinearModelFit、LogitModelFit 或 ProbitModelFit 完成.
data2 = {{3.9, 75.3}, {1.5, 6.8}, {3.5, 37.9}, {3.9, 48.8}, {2.2, 9.7}, {1.6, 6.1}, {1., 3.4}, {0.6, 2.2}, {2.1, 11.4}, {2.1, 8.1}};用 NonlinearModelFit 将数据拟合为一个指数模型:
nlm = NonlinearModelFit[data2, a Exp[b x], {a, b}, x]与线性模型的情形相同,使用 Show 将数据点与模型的图形合并:
Show[ListPlot[data2], Plot[nlm[x], {x, 0, 4}]]您也可以观察个别点处估计的列表式结果. 对FittedModel 使用 "SinglePredictionConfidenceIntervalTable" 以观察这样一个表格,表格中列出了预测值及其误差估计和置信区间:
nlm["SinglePredictionConfidenceIntervalTable"]首先,定义拟合函数在 80%、90%、95% 以及 99% 预测带上的函数:
{bands80[x_], bands90[x_], bands95[x_], bands99[x_]} = Table[nlm["SinglePredictionBands", ConfidenceLevel -> cl], {cl, {.8, .9, .95, .99}}];对这些预测带界定的区域以及拟合函数制作视图,Filling 的使用使每个置信水平的区域更易于观察:
Plot[{nlm[x], bands80[x], bands90[x], bands95[x], bands99[x]}, {x, 0, 4}, Filling -> {2 -> {1}, 3 -> {2}, 4 -> {3}, 5 -> {4}}]