Questions tagged «nls»

2
nls中具有正确起始值的奇异梯度误差
我正在尝试将线+指数曲线拟合到一些数据。首先,我尝试对一些人工数据执行此操作。该函数为: 它实际上是具有线性截面的指数曲线,以及附加的水平移位参数(m)。但是,当我使用R 函数时,即使使用的参数与最初生成数据时使用的参数相同,也会出现可怕的“ 初始参数估计时的奇异梯度矩阵 ”错误。 我尝试了不同的算法,不同的起始值并尝试使用y=a+b⋅r(x−m)+c⋅xy=a+b⋅r(x−m)+c⋅xy=a+b\cdot r^{(x-m)}+c\cdot xnls()optim最小化剩余平方和,无济于事。我已经读到,可能的原因可能是公式的参数设置过高,但我不认为是(是吗?) 有人对此问题有建议吗?还是这只是一个尴尬的模型? 一个简短的例子: #parameters used to generate the data reala=-3 realb=5 realc=0.5 realr=0.7 realm=1 x=1:11 #x values - I have 11 timepoint data #linear+exponential function y=reala + realb*realr^(x-realm) + realc*x #add a bit of noise to avoid zero-residual data jitter_y = jitter(y,amount=0.2) testdat=data.frame(x,jitter_y) …

2
使用R的nls()进行变更点分析
我正在尝试实现“变化点”分析或nls()在R中使用的多阶段回归。 这是我制作的一些虚假数据。我想用来拟合数据的公式是: ÿ= β0+ β1个x + β2最大(0 ,X - δ)ÿ=β0+β1个X+β2最大值(0,X-δ)y = \beta_0 + \beta_1x + \beta_2\max(0,x-\delta) 这应该做的是使数据具有特定的截距和斜率(β0β0\beta_0和β1个β1个\beta_1),直到特定点,然后在某个x值(δδ\delta)之后,将斜率增加β2β2\beta_2。这就是整个最大事情。在δδ\delta点之前,它等于0,并且β2β2\beta_2将被清零。 因此,这是我的功能: changePoint <- function(x, b0, slope1, slope2, delta){ b0 + (x*slope1) + (max(0, x-delta) * slope2) } 我尝试以这种方式拟合模型 nls(y ~ changePoint(x, b0, slope1, slope2, delta), data = data, start = c(b0 = 50, …

2
如何使用非线性模型测试分组变量的效果?
我有一个关于在非线性模型中使用分组变量的问题。由于nls()函数不允许使用因子变量,因此我一直在努力确定是否可以测试因子对模型拟合的影响。我在下面提供了一个示例,在该示例中,我希望将“季节性von Bertalanffy”生长模型拟合到不同的生长处理方法(最常用于鱼类生长)。我想测试鱼生长的湖以及所给食物的效果(仅是一个人工例子)。我对这个问题的解决方法很熟悉-应用F检验比较模型对汇总数据的拟合与Chen等人概述的单独拟合。(1992)(ARSS-“残差平方和的分析”)。换句话说,对于以下示例, 我想有一种使用nlme()在R中执行此操作的简单方法,但是我遇到了问题。首先,通过使用分组变量,自由度高于我对单独模型的拟合所获得的自由度。其次,我无法嵌套分组变量-我看不出问题出在哪里。非常感谢使用nlme或其他方法的任何帮助。以下是我的人工示例的代码: ###seasonalized von Bertalanffy growth model soVBGF <- function(S.inf, k, age, age.0, age.s, c){ S.inf * (1-exp(-k*((age-age.0)+(c*sin(2*pi*(age-age.s))/2*pi)-(c*sin(2*pi*(age.0-age.s))/2*pi)))) } ###Make artificial data food <- c("corn", "corn", "wheat", "wheat") lake <- c("king", "queen", "king", "queen") #cornking, cornqueen, wheatking, wheatqueen S.inf <- c(140, 140, 130, 130) k <- c(0.5, 0.6, 0.8, …
15 r  mixed-model  nls 

1
如何最小化指数拟合的平方的剩余平方和?
我有以下数据,并希望对其采用负指数增长模型: Days <- c( 1,5,12,16,22,27,36,43) Emissions <- c( 936.76, 1458.68, 1787.23, 1840.04, 1928.97, 1963.63, 1965.37, 1985.71) plot(Days, Emissions) fit <- nls(Emissions ~ a* (1-exp(-b*Days)), start = list(a = 2000, b = 0.55)) curve((y = 1882 * (1 - exp(-0.5108*x))), from = 0, to =45, add = T, col = "green", …

4
在R中为nls模型获取正确的起始值
我试图将一个简单的幂定律模型拟合到如下数据集: mydf: rev weeks 17906.4 1 5303.72 2 2700.58 3 1696.77 4 947.53 5 362.03 6 目标是使电源线通过并使用它来预测rev未来几周的赞誉。大量的研究使我找到了该nls功能,我按如下方式实现了该功能。 newMod <- nls(rev ~ a*weeks^b, data=modeldf, start = list(a=1,b=1)) predict(newMod, newdata = data.frame(weeks=c(1,2,3,4,5,6,7,8,9,10))) 虽然这适用于lm模型,但会出现singular gradient错误,我理解这与我的初始值a和有关b。我尝试了不同的值,甚至可以在Excel中进行绘制,传递一个孤行,获取一个方程式,然后使用该方程式中的值,但仍然遇到错误。我看着一堆像答案的这一个,并试图在第二个答案(看不惯第一),但都没有结果。 我真的可以在这里找到有关如何找到正确的起始值的帮助。或者,我可以使用什么其他功能代替nls。 如果您想mydf轻松地重新创建: mydf <- data.frame(rev=c(17906.4, 5303.72, 2700.58 ,1696.77 ,947.53 ,362.03), weeks=c(1,2,3,4,5,6))
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.