除非您先掌握了矩阵代数,否则将无法理解非线性回归的数学细节。但其基本原理却很容易理解。每种非线性回归方法都遵循以下步骤:
1. 首先为方程中的每个参数设定初始值。
2. 根据初始值生成一条曲线。计算平方和——即各数据点到曲线的垂直距离的平方之和。(若包含加权因子,则计算加权平方和。)
3. 调整参数,使曲线更贴近数据点——从而减小平方和。关于参数调整,有几种算法,如下所述。
4. 再次调整参数,使曲线更贴近数据点。重复此过程。
5. 当调整对平方和几乎不再产生影响时,停止计算。
6. 报告最佳拟合结果。您获得的精确数值在一定程度上依赖于步骤1中选择的初始值以及步骤5中的停止标准。这意味着对同一数据进行重复分析时,结果并不总是完全相同。
步骤3是唯一较难的一步。Prism(以及大多数其他非线性回归程序)采用Marquardt和Levenberg方法,该方法融合了线性下降法和高斯-牛顿法这两种方法。理解这些方法的最佳方式是通过一个示例。 以下是一组用于拟合典型结合曲线(直角双曲线)的数据。

您需要拟合一条结合曲线,以通过以下方程确定 Bmax 和 Kd:

如何找到最能拟合数据的 Bmax 和 Kd 值?您可以通过改变 Bmax 和 Kd 的数值生成无限多的曲线。对于生成的每条曲线,都可以计算其平方和,以评估该曲线拟合数据的优劣。下图说明了这种情况。

X 轴和 Y 轴分别对应非线性回归中待拟合的两个参数(本示例中为 Bmax 和 Kd)。 Z 轴代表平方和。曲面上的每个点对应一条可能的曲线。非线性回归的目标是找到使平方和尽可能小的 Bmax 和 Kd 值(即找到谷底)。
线性下降法遵循一个非常简单的策略:从初始值开始,尝试将每个参数值微量增加。如果平方和下降,则继续;如果平方和上升,则回退并反向减小该参数的值。至此,您已在曲面上向下迈出了一步。重复此过程多次。 通常每一步都会使平方和减小。如果平方和反而增加,说明步长过大,导致您越过了谷底,又爬上了另一侧的山坡。如果发生这种情况,请回退并采取更小的步长。重复这些步骤多次后,您将到达谷底。
高斯-牛顿法稍难理解一些。与线性下降法类似,首先计算当您对每个参数的值进行微小调整时,平方和的变化量。这将告诉您,在由初始值定义的点处,平方和曲面的斜率是多少。 如果方程确实是线性的,这些信息就足以确定整个平方和曲面的形状,从而一步算出 Bmax 和 Kd 的控制数据。 对于线性方程,只要知道某一点处的斜率,就掌握了关于该曲面的所有必要信息,从而可以一步求得极小值。对于非线性方程,高斯-牛顿法虽然无法一步求得控制数据,但该步骤通常能改善拟合优度。 经过多次迭代后,便会达到最底点。
这种线性下降法在早期迭代中往往效果良好,但当接近控制数据(且曲面几乎平坦)时,运行速度会变慢。相比之下,高斯-牛顿法在早期迭代中往往效果不佳,但在后期迭代中表现非常出色。 马夸特法(也称为莱文伯格-马夸特法)融合了这两种方法。它在早期迭代中采用线性下降法,随后逐渐过渡到高斯-牛顿法。
Prism 与大多数程序一样,采用马夸特法进行非线性回归。该方法相当标准,唯一的变量在于 lambda 的取值(它决定了步长)以及如何随着迭代次数的增加调整 lambda。 我们遵循《数值诀窍》(Numerical Recipes)的建议。λ初始化为0.001。成功迭代后将其减小10倍,失败迭代后将其增大10倍。
参考文献
《C语言数值诀窍》(第二版)第15章,WH Press 等,剑桥大学出版社,1992年
SA Glantz 和 BK Slinker 合著的《应用回归与方差分析入门》第 10 章,McGraw-Hill 出版社,1990 年。