我以前看到过一些非常简单的功能,但是我尝试使用的功能基本上是3个功能的混合
一个高斯(在x = 0处占优势),一个指数(接替后高斯)和一个将值四舍五入的常数
从我读过的该错误的其他示例来看,该问题似乎是由较差的初始猜测引起的,但我不知道如何纠正此问题,或者即使考虑到我的函数的大小,这甚至不是实际的问题。
这是我的代码和我正在查看的数据的一个示例:
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中使用了操作图,我认为我的数据相对合适,这是一个图形我也在尝试拟合的数据(抱歉,无法上传,信誉不足)
但是我遇到了同样的问题,这与我的健康状况还是低距离的大量可变性有关?
您通常是关于蝙蝠起始值的,这是对的,这就是您的情况(的一部分)。查看您的数据和您的猜测,很明显出了点问题。但是在进行此操作之前,请注意,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
,然后:
那好多了,但仍然不合适。而且,如果您更改其他参数(c
,d
和e
),您会发现它们似乎并不会对数据产生太大的影响,甚至根本不会影响数据。那可能是因为a
更大,而您Height^2
在第一学期就拥有。如果简化功能,然后运行:
i<-nls(Value~a*exp(-Height^2/(2*b^2)), start = list(a=410000,b=500))
您会找到合适的。这可能是因为非线性函数随着参数数量的增加而变得更难拟合,尤其是在它们之间存在协方差的情况下。较少的参数更容易拟合。但是,您必须决定是否可以仅使用a
和b
。
但是,如果将其绘制出来,它仍然看起来并不好。显然,您Value
没有在处有最大值Height = 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
现在由您决定是否确实转移了数据,以及是否可以简化功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句