[R] How to coerce a parameter in nls?
Sarah Goslee
sarah.goslee at gmail.com
Sat Sep 19 11:10:02 CEST 2015
You need to read the help more closely. start should be a list, as you've
done, but upper and lower should be vectors instead. Which is exactly what
your error message is telling you.
lower, upper
vectors of lower and upper bounds, replicated to be as long as start. If
unspecified, all parameters are assumed to be unconstrained. Bounds can
only be used with the "port" algorithm. They are ignored, with a warning,
if given for other algorithms.
Sarah
On Saturday, September 19, 2015, Jianling Fan <fanjianling at gmail.com> wrote:
> Hello, everyone,
>
> I am using a nls regression with 6 groups data. I am trying to coerce
> a parameter to 1 by using a upper and lower statement. but I always
> get an error like below:
>
> Error in ifelse(internalPars < upper, 1, -1) :
> (list) object cannot be coerced to type 'double'
>
> does anyone know how to fix it?
>
> thanks in advance!
>
> My code is below:
>
>
>
> > dproot
> depth den ref
> 1 20 0.5730000 1
> 2 40 0.7800000 1
> 3 60 0.9470000 1
> 4 80 0.9900000 1
> 5 100 1.0000000 1
> 6 10 0.6000000 2
> 7 20 0.8200000 2
> 8 30 0.9300000 2
> 9 40 1.0000000 2
> 10 20 0.4800000 3
> 11 40 0.7340000 3
> 12 60 0.9610000 3
> 13 80 0.9980000 3
> 14 100 1.0000000 3
> 15 20 3.2083491 4
> 16 40 4.9683383 4
> 17 60 6.2381133 4
> 18 80 6.5322348 4
> 19 100 6.5780660 4
> 20 120 6.6032064 4
> 21 20 0.6140000 5
> 22 40 0.8270000 5
> 23 60 0.9500000 5
> 24 80 0.9950000 5
> 25 100 1.0000000 5
> 26 20 0.4345774 6
> 27 40 0.6654726 6
> 28 60 0.8480684 6
> 29 80 0.9268951 6
> 30 100 0.9723207 6
> 31 120 0.9939966 6
> 32 140 0.9992400 6
>
> > fitdp<-nls(den~Rm[ref]/(1+(depth/d50)^c),data=dproot,
> + start = list(Rm=c(1.01, 1.01, 1.01, 6.65,1.01,1), d50=20, c=-1))
> > summary(fitdp)
>
> Formula: den ~ Rm[ref]/(1 + (depth/d50)^c)
>
> Parameters:
> Estimate Std. Error t value Pr(>|t|)
> Rm1 1.12560 0.07156 15.73 3.84e-14 ***
> Rm2 1.57643 0.11722 13.45 1.14e-12 ***
> Rm3 1.10697 0.07130 15.53 5.11e-14 ***
> Rm4 7.23925 0.20788 34.83 < 2e-16 ***
> Rm5 1.14516 0.07184 15.94 2.87e-14 ***
> Rm6 1.03658 0.05664 18.30 1.33e-15 ***
> d50 22.69426 1.03855 21.85 < 2e-16 ***
> c -1.59796 0.15589 -10.25 3.02e-10 ***
> ---
> Signif. codes: 0 ?**?0.001 ?*?0.01 ??0.05 ??0.1 ??1
>
> Residual standard error: 0.1094 on 24 degrees of freedom
>
> Number of iterations to convergence: 8
> Achieved convergence tolerance: 9.374e-06
>
> > fitdp1<-nls(den~Rm[ref]/(1+(depth/d50)^c),data=dproot, algorithm="port",
> + start = list(Rm=c(1.01, 1.01, 1.01, 6.65, 1.01, 1), d50=20, c=-1),
> + lower = list(Rm=c(1.01, 1.01, 1.01, 6.65, 1.01, 1), d50=20, c=-1),
> + upper = list(Rm=c(2.1, 2.2, 2.12, 12.5, 2.3, 1), d50=50, c=1))
>
> Error in ifelse(internalPars < upper, 1, -1) :
> (list) object cannot be coerced to type 'double'
>
> ______________________________________________
> R-help at r-project.org <javascript:;> mailing list -- To UNSUBSCRIBE and
> more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Sarah Goslee
http://www.stringpage.com
http://www.sarahgoslee.com
http://www.functionaldiversity.org
[[alternative HTML version deleted]]
More information about the R-help
mailing list