0

我以前看过其中一些非常简单的功能,但是我试图适应的功能基本上是 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中的操纵图,我认为我对数据的拟合度相对较好,这是一个图表我也在尝试拟合的数据(抱歉无法上传,没有足够的声誉)

http://imgur.com/GtzIzSr

但是我遇到了同样的问题,这与我的适合度还是低距离的大量可变性有关?

4

1 回答 1

2

你是对的,这通常是关于蝙蝠的起始值,这就是你的情况(部分)。查看您的数据和您的猜测,很明显有些地方是错误的。但在进入之前,请注意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))

你会找到合适的。这可能是因为随着参数数量的增加,非线性函数变得越来越难以拟合,特别是当它们之间存在协方差时。更少的参数更容易拟合。但是,您必须决定是否只能使用 aand 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

现在由您来检查您的数据是否确实发生了变化,以及您是否可以简化该功能。

于 2015-04-14T01:52:20.433 回答