How to| 拟合具有测量误差的模型
特别是在物理科学中,用测量误差作为权重将测量到的变化纳入到拟合中是很常见的. 权重对参数估计具有相对影响,但在加权回归中仍需要对误差方差进行估计,这将影响结果的误差估计. 在权重来自测量误差时,LinearModelFit 和 NonlinearModelFit 的选项 VarianceEstimatorFunction 和 Weights 可用于得到理想结果.
定义一个数据集,其中每一点的前两个元素是预测值,第三个元素是测量值:
data = {{0.9, 6.1, 9.5}, {3.9, 6., 9.7}, {0.3, 2.8, 6.6}, {1., 2.2, 5.9}, {1.8, 2.4, 7.2}, {9., 1.7, 7.}, {7.9, 8., 10.4}, {4.9, 3.9, 9.}, {2.3, 2.6, 7.4}, {4.7, 8.4, 10.}};errors = {.4, .4, .2, .4, .1, .3, .1, .2, .2, .2};可用 NonlinearModelFit 将数据拟合为预测值的对数函数. Weights 是基于测量误差正态分布的可变性,该选项的使用可以纳入拟合之中. 每个数据点的权重为
,其中
是该数据点的测量误差.
单独使用 Weights 时,方差尺度用缺省方法估计. 误差估计将既取决于权重也取决于方差尺度的估计. 然而,如果权重来自测量误差,您将希望误差估计仅取决于权重.
拟合非线性模型,并将误差包括在权重中,并使用缺省方法估计方差尺度:
nlm = NonlinearModelFit[data, a Log[b x + c y], {a, b, c}, {x, y}, Weights -> 1 / errors ^ 2]对于拟合结果,您可以查询 FittedModel 输出对象 nlm.
使用 "BestFit" 和 "ParameterTable" 获得最佳拟合函数以及 nlm 的参数值表格:
nlm[{"BestFit", "ParameterTable"}]对于这样一个加权拟合,需要估计误差方差的尺度以获得参数估计的标准误差. 线性及非线性估计所用的缺省典型估计涉及平方的加权和.
权重并不会改变拟合或误差估计,认识到这一点很重要. 例如,将所有权重乘以一个常数将增大估计方差,但并不改变参数估计或标准误差.
nlm100 = NonlinearModelFit[data, a Log[b x + c y], {a, b, c}, {x, y}, Weights -> 100 / errors ^ 2]nlm100[{"BestFit", "ParameterTable"}]对每个结果使用 "EstimatedVariance",比较方差估计. 这里表明估计值也同样乘上了一个100的因子:
{nlm["EstimatedVariance"], nlm100["EstimatedVariance"]}上例中的权重仅是权重. 它们对拟合有相对的影响,但不影响估计和结果.
要将权重像从测量误差计算得到的结果一样对待,可以将 VarianceEstimatorFunction 与 Weights 一起使用. VarianceEstimatorFunction 显式定义所用的方差尺度估计量. 对于测量误差,您希望标准误差仅由权重计算得到,因此方差估计应该为定值1:
nlmvar1 = NonlinearModelFit[data, a Log[b x + c y], {a, b, c}, {x, y}, Weights -> 1 / errors ^ 2, VarianceEstimatorFunction -> (1&)]nlmvar1[{"BestFit", "ParameterTable"}]将这个表格与 nlm 的表格进行比较,结果表明参数估计是相当的,但标准误差及相关结果发生了改变:
{nlm["ParameterTable"], nlmvar1["ParameterTable"]}nlmvar1 的全部结果都纳入的权重和方差估计与来自测量误差的权重一致. 尽管权重对参数估计有影响,方差估计本身并不会. 将拟合时定义的方差估计进行覆盖从而得到 nlm 的测量误差结果是可能的.
nlm["ParameterTable", VarianceEstimatorFunction -> (1&)]