非线性回归误差(单梯度矩阵)

Non Linear Regression Error (Single Gradient Matrix)

我以前见过其中一些非常简单的函数,但是我要拟合的函数基本上是 3 个函数的混合

高斯分布(在 x=0 处占优势) 指数(接管 post 高斯) 和一个将值

舍入的常量

从我读到的这个错误的其他例子来看,问题似乎是由错误的初始猜测引起的,但我不知道如何纠正这个问题,或者考虑到我的大小,这是否是实际问题功能。

这是我的代码和我正在查看的数据示例之一。:

Value<-c(163301.080,269704.110,334570.550,409536.530,433021.260,418962.060,349554.460,253987.570,124461.710,140750.480,52612.790,54286.427,26150.025,14631.210,15780.244,8053.618,4402.581,2251.137,2743.511,1707.508,1246.894)
Height<-c(400,300,200,0,-200,-400,-600,-800,-1000,-1000,-1200,-1220,-1300,-1400,-1400,-1500,-1600,-1700,-1700,-1800,-1900)

Framed<-data.frame(Value,Height)
i<-nls(Value~a*exp(-Height^2/(2*b^2))+ c*exp(-d*abs(Height)) + e,
                 data=Framed,start = list(a=410000,b=5,c=10000,d=5,e=1200))
plot(Value~Height)
summary(i)

感谢您的帮助,现在我又遇到了同样的问题,我在下面使用了您的技术(R noob)之前在 mathematica 中使用了操纵图,我认为我已经相对较好地适应了数据,这是我也在尝试拟合的数据图表(抱歉无法上传,信誉不足)

http://imgur.com/GtzIzSr

但是我遇到了同样的问题,这是与我的健康有关还是与近距离的大量可变性有关?

你是对的,这通常是关于蝙蝠起始值的,这就是你的(部分)情况。查看您的数据和您的猜测,很明显出了问题。但在此之前,请注意 Framed 的创建顺序不正确。应该是X Y,或者:

Framed <- data.frame(Height, Value)

考虑到这一点,请尝试以下操作:

Vals2 <- 410000*exp(-Height^2/(2*5^2)) - 10000*exp(-5*abs(Height)) + 1200
plot(Framed) 
lines(Height, Vals2) 

你应该得到

这表明你的猜测有多糟糕。玩弄你的功能,很容易看出 b 离得很远。将其更改为 500,然后:

好多了,但还是放不下。如果您更改其他参数(cde),您会发现它们似乎不会对数据产生太大影响,或者根本不会影响数据。这可能是因为 a 大得多,而您在第一个学期中有 Height^2。如果你简化你的函数,并且 运行:

i<-nls(Value~a*exp(-Height^2/(2*b^2)), start = list(a=410000,b=500))

你会找到合适的。这可能是因为随着参数数量的增加,非线性函数变得更难拟合,特别是如果它们之间存在协方差。更少的参数更容易安装。但是,您必须决定是否只能使用 ab.

但如果你绘制它,它看起来仍然不太好。很明显,您的 ValueHeight = 0 处没有最大值,就像您的描述和模拟曲线中应该的那样。您的数据似乎有误,因为如果您尝试 Height <- Height+200 以及上述更改,您将得到

> summary(i)

Formula: Value ~ a * exp(-Height^2/(2 * b^2))

Parameters:
   Estimate Std. Error t value Pr(>|t|)    
a 449820.71   10236.43   43.94   <2e-16 ***
b    496.60      12.54   39.59   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 17790 on 19 degrees of freedom

Number of iterations to convergence: 4 
Achieved convergence tolerance: 2.164e-06

现在由您来检查您的数据是否确实发生了偏移,以及您是否可以简化函数。