高度非线性函数的拟合策略


12

为了分析生物物理学实验的数据,我目前正在尝试使用高度非线性的模型进行曲线拟合。模型函数基本上看起来像:

y=ax+bx1/2

在这里,尤其是的值引起了极大的兴趣。b

此函数的图解:

功能图

(请注意,模型函数是基于对系统的全面数学描述,并且看起来效果很好---只是自动拟合很棘手)。

当然,模型函数是有问题的:到目前为止,我尝试过的拟合策略因处的渐近渐近线而失败,尤其是对于嘈杂的数据。x=0

我对这里问题的理解是,简单的最小二乘拟合(我在MATLAB中同时进行了线性和非线性回归;主要是Levenberg-Marquardt)对垂直渐近线非常敏感,因为x中的小误差被极大地放大了。

谁能指出我可以解决此问题的合适策略?

我有一些统计方面的基本知识,但是仍然很有限。我很想学习,如果我只知道从哪里开始的话:)

非常感谢您的建议!

编辑求您原谅忘记提及错误。唯一的显着噪声是,它是可加的。x

编辑2有关此问题背景的一些其他信息。上图对聚合物的拉伸行为进行了建模。正如@whuber在评论中指出的那样,您需要来获得如上的图形。b200a

关于人们到目前为止如何拟合该曲线:似乎人们通常会切断垂直渐近线,直到找到合适的拟合为止。但是,截止选择仍然是任意的,这使拟合过程不可靠且不可重现。

编辑3&4固定图。


3
错误是出现在或还是两者都出现?您希望噪声以什么形式进入(乘法,加法等)?ÿxy
概率

2
@onnodb:我的担心是,这可能不是从根本上质疑您的模型本身的健壮性吗?无论什么装修使用的策略不会保持高度敏感?您能对这种估计有很高的信心吗?bbb
curious_cat

1
不幸的是,那仍然行不通。根本不可能存在和组合,甚至不能定性地复制您绘制的图形。(显然是负的。 必须小于在曲线图中的至少斜率,但正的,这使之成为一个窄间隔。但是,当是在该时间间隔,它根本不是足够大以克服巨大负尖峰在项引入的原点。)您画了什么?数据?还有其他功能吗?b b 一个一个b X 1 / 2abbaabx1/2
ub

1
谢谢,但这仍然是错误的。从延伸的切线该曲线图向后任何点,其中,就会在拦截y轴。由于在处的向下尖峰表示为负,因此该y截距也必须为负。但是在您的图中,非常清楚的是,大多数此类截距都是正的,最高可达。因此,数学上不可能像这样的方程式描述您的曲线甚至不能近似地描述曲线至少您需要拟合。X > 0 0 3 b /2 X 1 / 20 b 15.5(x,ax+bx1/2)x>0(0,3b/(2x1/2))0b15.5y=ax+bx1/2 Ŷ = 一个X + b X 1 / 2 + C ^y=ax+bx1/2+c
ub

1
在对此进行任何工作之前,我想确定问题的陈述:这就是为什么正确使用功能很重要的原因。我现在还没有时间给出完整的答案,但是我想指出“其他人”可能是错误的,但是,这取决于更多细节。如果您的误差确实是可加的,在我看来,它仍然必须是高度异方差的,否则,如果值很小,则其方差确实很小。关于该错误,您可以定量地告诉我们什么?Xxx
ub

Answers:


10

我们将手动使用的方法(即探索性数据分析)可以很好地处理此类数据。

我希望稍微重新参数化模型,以使其参数为正:

y=axb/x.

对于给定的,让我们假设存在一个满足该方程的唯一实数;调用此或为简化起见,时被理解。x f y ; a b f y a b yxf(y;a,b)f(y)(a,b)

我们观察到有序对的集合,其中通过零均值的独立随机变量与偏离。在本讨论中,我将假定它们都有一个共同的方差,但是这些结果的扩展(使用加权最小二乘)是可能的,显而易见的并且易于实现。这是这种值的集合的模拟示例,其中,和公共方差。(xi,yi)xif(yi;a,b)100a=0.0001b=0.1σ2=4

数据图

这是一个(故意的)强硬示例,可以通过非物理(负)值及其异常扩展(通常为水平单位,但在轴上范围最多为或)来理解。如果我们能够对这些数据进行合理的拟合,从而接近估计所使用的,和,那么我们的确会做得很好。x±2 56xabσ2

探索性拟合是迭代的。 每个阶段包括两个步骤:估计(基于数据和以前的估计和的和,从该前一预测值可以为所获得的),然后估算。因为误差在x中,所以拟合从估计,而不是相反。首先对中的误差进行排序,当足够大时,aa^b^abx^ixibxi(yi)xx

xi1a(yi+b^x^i).

因此,我们可以更新由拟合该模型与最小二乘(通知它只有一个参数-的斜率, --and没有截距)并取倒数系数作为更新估计。a^aa

接下来,当足够小时,逆二次项占主导地位,我们发现(误差再次回到一阶)x

xib212a^b^x^3/2yi2.

再次使用最小二乘(仅带有斜率项),我们通过拟合斜率的平方根获得更新的估计。bb^

为了了解为什么这样做有效,可以通过针对较小的将对于绘制出粗略的探索性近似值。更好的是,因为的测量误差且随单调变化,所以我们应该关注具有较大值。这是来自模拟数据集的示例,其中的最大一半用红色表示,最小的一半用蓝色表示,并且一条通过原点的线适合于红色点。xi1/yi2xixiyixi1/yi2yi

数字

这些点近似对齐,尽管在和的较小值处存在一些曲率。(请注意选择轴:因为是测量值,通常将其绘制在垂直轴上。)通过将拟合集中在曲率应该最小的红点上,我们应该获得的合理估计。标题中显示的值是这条线的斜率的平方根:仅比真实值小%!xyxb0.0964

此时,可以通过以下方式更新预测值

x^i=f(yi;a^,b^).

迭代直到估计值稳定(不保证)或它们在较小的值范围内循环(仍然不能保证)。

事实证明,很难估计,除非我们有一个很好的一套非常大的值,但,可呈现确定原作情节的垂直渐近线(在这个问题),是question--的焦点只要垂直渐近线内有一些数据,就可以非常精确地固定下来 在我们正在运行的示例中,迭代的确收敛为(几乎是正确值两倍)和(接近了正确值)。该图显示一次的数据,在其上叠加(一)axba^=0.0001960.0001b^=0.10730.1灰色曲线(虚线)和(b)红色估计曲线(实线):

适合

这种拟合非常好,以至于很难将真实曲线与拟合曲线区分开:它们几乎在任何地方都重叠。顺便提及,估计的误差方差非常接近的真实值。43.734

这种方法存在一些问题:

  • 估计数有偏差。当数据集较小且相对较少的值接近x轴时,偏差会变得明显。系统地拟合度有点低。

  • 估计过程需要一种方法,以从 “小”值中区分出“大” 。我可以提出探索性的方法来识别最佳定义,但实际上,您可以将它们保留为“调整”常数,并对其进行更改以检查结果的敏感性。我通过根据的值将数据分为三个相等的组并使用两个外部组来任意设置它们。ÿ yiyi

  • 该过程不适用于和所有可能组合或所有可能的数据范围。但是,只要在数据集中显示足够多的曲线以反映两个渐近线,它就应该工作良好:一端是垂直的,另一端是倾斜的。bab


以下是用Mathematica编写的。

estimate[{a_, b_, xHat_}, {x_, y_}] := 
  Module[{n = Length[x], k0, k1, yLarge, xLarge, xHatLarge, ySmall, 
    xSmall, xHatSmall, a1, b1, xHat1, u, fr},
   fr[y_, {a_, b_}] := Root[-b^2 + y^2 #1 - 2 a y #1^2 + a^2 #1^3 &, 1];
   k0 = Floor[1 n/3]; k1 = Ceiling[2 n/3];(* The tuning constants *)
   yLarge = y[[k1 + 1 ;;]]; xLarge = x[[k1 + 1 ;;]]; xHatLarge = xHat[[k1 + 1 ;;]];
   ySmall = y[[;; k0]]; xSmall = x[[;; k0]]; xHatSmall = xHat[[;; k0]];
   a1 = 1/
     Last[LinearModelFit[{yLarge + b/Sqrt[xHatLarge], 
          xLarge}\[Transpose], u, u]["BestFitParameters"]];
   b1 = Sqrt[
     Last[LinearModelFit[{(1 - 2 a1 b  xHatSmall^(3/2)) / ySmall^2, 
          xSmall}\[Transpose], u, u]["BestFitParameters"]]];
   xHat1 = fr[#, {a1, b1}] & /@ y;
   {a1, b1, xHat1}
   ];

将其应用于数据(由并行向量给定xy形成两列矩阵data = {x,y}),直到收敛为止,从估计值开始:a=b=0

{a, b, xHat} = NestWhile[estimate[##, data] &, {0, 0, data[[1]]}, 
                Norm[Most[#1] - Most[#2]] >= 0.001 &,  2, 100]

3
这是一个了不起的答案。我有义务!我一直在玩,结果看起来很有希望。不过,我需要更多时间才能完全理解其原因:)另外:我是否可以通过您的网站与您联系,以解决有关确认的其他(私人)问题?
onnodb 2013年

3

查看@probabilityislogic发布的重要问题

如果您仅在y中存在误差,并且它们是可加的并且您具有恒定的方差(即,您的假设符合听起来像的假设),那么如果让,则可以尝试在上的加权线性拟合,然后权重将与 ... 成正比(是的,这可能只是在解决问题,所以它可能仍然是有问题的-但您至少应该发现,通过这种问题的转换,可以更轻松地进行规范化)。y=yxyx=x3/21/x

请注意,通过这种操作,您的成为新方程的截距b

如果您的方差已经不是常数,或者您的误差不是可加的,或者您在存在误差,这将改变情况。x

-

编辑以考虑其他信息:

我们得到了以下形式的模型:y=b+ax

现在,我们知道误差在x和加法中。我们仍然不知道方差在该尺度上是否恒定。

重写为x=y/ab/a=my+c

令,其中此误差项可能是异方差的(如果原始具有恒定的扩展,则它将是异方差的,但是形式已知)。xo=x+ηx

(其中在代表“观察”)oxo

然后 ,其中看起来不错,但现在和变量具有相关的误差;因此它是一个线性的变量误差模型,具有异方差性和已知的误差依赖形式。 xo=c+my+ϵϵ=ζxy

我不确定这会改善一切!我相信有解决这类问题的方法,但这根本不是我的专长。

我在评论中提到,您可能想看一下逆回归,但是函数的特定形式可能会阻止进一步的发展。

您甚至可能会尝试以这种线性形式尝试相当可靠的x误差方法。

-

现在是一个巨大的问题:如果误差在x中,那么您如何拟合非线性模型?您是否只是在盲目地最小化的平方误差之?那很可能是你的问题。y

我想可以尝试将原始内容重写为模型,并在出现错误,并尝试优化拟合度,但是我不确定我该如何正确设置。x


谢谢!这是一个有趣的转换,没想到---即使错误在,我还是会处理它!x
onnodb 2013年

2
即使错误是在x上出现的 -”,这很重要。您可能需要检查逆回归。
Glen_b-恢复莫妮卡

3
...或者您可以直接拟合模型 :-)。x=13(2ya+21/3y2(27a4b22a3y3+3327a8b44a7b2y3)1/3+(27a4b22a3y3+3327a8b44a7b2y3)1/321/3a2)
ub

@whuber嗯。解决立方,聪明。如果我们用写原语,其中是,那么,,(再次使用),至少在名义上可以使用非线性最小二乘法完成。这样看起来就可以正确处理错误传播。如果OP要使用我正在使用的线性形式(使用一些可靠的IV和异类误差估计)来获取参数的良好初始值,然后尝试使用它,则可能实际上可行。非线性LS形式对其进行抛光。X ø X + ζ X = ħ xoxox+ζx=(thatmonster)+ϵϵ=ζ
Glen_b-恢复莫妮卡

我相信线性化函数并(具有讽刺意味的)应用非线性(加权)最小二乘法会奏效,特别是如果数据限制为相对较小值(曲线主要由确定)的话。y bx(y)yb
ub

0

经过几周的试验后,在这种特殊情况下,另一种技术似乎效果最好:Total Least Squares fit。它是通常(非线性)最小二乘拟合的一种变体,但它并没有考虑仅沿一个轴进行拟合误差的测量(这会在诸如此类的高度非线性情况下引起问题),而是将两个轴都考虑在内。

尽管非线性情况更难以捉摸,但有关该主题的文章,教程和书籍很多。甚至还有一些MATLAB代码可用。


感谢您分享。我接受它可能会在您的情况下产生漂亮的结果,但是我有两个担忧。您首先提到:一个人如何精确地将总最小二乘法/变量误差回归/正交回归/戴明回归应用于非线性拟合?第二点是这种方法似乎不适用于您的数据,其中的测量基本上没有误差。在这种情况下,您应该在变量中考虑残差,而应该产生不可靠的,有偏见的结果。ÿyy
whuber

@whuber感谢您表达关注!目前,我仍在进行仿真,以探究TLS拟合该问题的可靠性。不过,到目前为止,我看到的是TLS 对这两个变量的考虑大大有助于克服模型的高度非线性。模拟数据的拟合是可靠的,并且可以很好地收敛。不过,还需要做更多的工作,而且一旦我们有更多可用的实际数据时,我肯定要把您的方法叠加到这一方法上,并详细研究您的担忧。
onnodb 2013年

好-别忘了我对我提出的方法有类似的担忧!
whuber
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.