Please enable JavaScript to view this site.

非线性回归的基本思想

除非您先掌握了矩阵代数,否则无法理解非线性回归的数学细节。但其基本原理却很容易理解。每种非线性回归方法都遵循以下步骤:

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。 我们遵循《数值食谱》的建议。λ初始化为0.001。在成功迭代后将其减小10倍,在迭代失败后将其增大10倍。

参考文献                                                                                                

C语言数值计算教程》(第二版)第15章,WH Press 等,剑桥大学出版社,1992年

SA Glantz 和 BK Slinker 合著的《应用回归与方差分析入门》第10章,McGraw-Hill出版社,1990年。