【问题标题】:Non Linear Regression Error (Single Gradient Matrix)非线性回归误差(单梯度矩阵)
【发布时间】:2015-04-14 01:06:58
【问题描述】:

我以前看过其中一些非常简单的函数,但是我试图拟合的函数基本上是 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

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

【问题讨论】:

  • 如图所示只有 5 个唯一的 X 值,几乎不可能拟合 5 参数非线性模型...
  • 对不起,这是一个不同的拟合(2 参数正态分布),我现在已经修复了

标签: r statistics rscript non-linear-regression


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2016-10-23
    • 2021-06-23
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 2018-11-08
    • 1970-01-01
    相关资源
    最近更新 更多