Thanks Prof. Nash, Sorry for late reply. I am learning and trying to use your nlmrt package since I got your email. It works good to mask a parameter in regression but seems does work for my equation. I think the problem is that the parameter I want to mask is a group-specific parameter and I have a "[]" syntax in my equation. However, I don't have your 2014 book on hand and couldn't find it in our library. So I am wondering if nlxb works for group data? Thanks a lot! following is my code and I got a error form it.> fitdp1<-nlxb(den~Rm[ref]/(1+(depth/d50)^c),data=dproot,+ start =c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, Rm5=1.01, Rm6=1, d50=20, c=-1), + masked=c("Rm6")) Error in deriv.default(parse(text = resexp), names(start)) : Function '`[`' is not in the derivatives table Best regards, Jianling On 20 September 2015 at 12:56, ProfJCNash <profjcnash at gmail.com> wrote:> I posted a suggestion to use nlmrt package (function nlxb to be precise), > which has masked (fixed) parameters. Examples in my 2014 book on Nonlinear > parameter optimization with R tools. However, I'm travelling just now, or > would consider giving this a try. > > JN > > > On 15-09-20 01:19 PM, Jianling Fan wrote: >> >> no, I am doing a regression with 6 group data with 2 shared parameters >> and 1 different parameter for each group data. the parameter I want to >> coerce is for one group. I don't know how to do it. Any suggestion? >> >> Thanks! >> >> On 19 September 2015 at 13:33, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> >> wrote: >>> >>> Why not rewrite the function so that value is not a parameter? >>> >>> --------------------------------------------------------------------------- >>> Jeff Newmiller The ..... ..... Go >>> Live... >>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live >>> Go... >>> Live: OO#.. Dead: OO#.. Playing >>> Research Engineer (Solar/Batteries O.O#. #.O#. with >>> /Software/Embedded Controllers) .OO#. .OO#. >>> rocks...1k >>> >>> --------------------------------------------------------------------------- >>> Sent from my phone. Please excuse my brevity. >>> >>> On September 18, 2015 9:54:54 PM PDT, 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 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. >>> >>> >> >> >> > > ______________________________________________ > R-help at r-project.org 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.-- Jianling Fan ???
Express the formula in terms of simple operations like this: # add 0/1 columns ref.1, ref.2, ..., ref.6 dproot2 <- do.call(data.frame, transform(dproot, ref = outer(dproot$ref, seq(6), "==") + 0)) # now express the formula in terms of the new columns library(nlmrt) fitdp1<-nlxb(den ~ (Rm1 * ref.1 + Rm2 * ref.2 + Rm3 * ref.3 + Rm4 * ref.4 + Rm5 * ref.5 + Rm6 * ref.6)/(1+(depth/d50)^c), data = dproot2, start = c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, Rm5=1.01, Rm6=1, d50=20, c=-1), masked = "Rm6") where we used this input: Lines <- " 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" dproot <- read.table(text = Lines, header = TRUE) On Mon, Sep 21, 2015 at 12:22 PM, Jianling Fan <fanjianling at gmail.com> wrote:> Thanks Prof. Nash, > > Sorry for late reply. I am learning and trying to use your nlmrt > package since I got your email. It works good to mask a parameter in > regression but seems does work for my equation. I think the problem is > that the parameter I want to mask is a group-specific parameter and I > have a "[]" syntax in my equation. However, I don't have your 2014 > book on hand and couldn't find it in our library. So I am wondering if > nlxb works for group data? > Thanks a lot! > > following is my code and I got a error form it. > > > fitdp1<-nlxb(den~Rm[ref]/(1+(depth/d50)^c),data=dproot, > + start =c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, > Rm5=1.01, Rm6=1, d50=20, c=-1), > + masked=c("Rm6")) > > Error in deriv.default(parse(text = resexp), names(start)) : > Function '`[`' is not in the derivatives table > > > Best regards, > > Jianling > > > On 20 September 2015 at 12:56, ProfJCNash <profjcnash at gmail.com> wrote: > > I posted a suggestion to use nlmrt package (function nlxb to be precise), > > which has masked (fixed) parameters. Examples in my 2014 book on > Nonlinear > > parameter optimization with R tools. However, I'm travelling just now, or > > would consider giving this a try. > > > > JN > > > > > > On 15-09-20 01:19 PM, Jianling Fan wrote: > >> > >> no, I am doing a regression with 6 group data with 2 shared parameters > >> and 1 different parameter for each group data. the parameter I want to > >> coerce is for one group. I don't know how to do it. Any suggestion? > >> > >> Thanks! > >> > >> On 19 September 2015 at 13:33, Jeff Newmiller <jdnewmil at dcn.davis.ca.us > > > >> wrote: > >>> > >>> Why not rewrite the function so that value is not a parameter? > >>> > >>> > --------------------------------------------------------------------------- > >>> Jeff Newmiller The ..... ..... Go > >>> Live... > >>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live > >>> Go... > >>> Live: OO#.. Dead: OO#.. > Playing > >>> Research Engineer (Solar/Batteries O.O#. #.O#. with > >>> /Software/Embedded Controllers) .OO#. .OO#. > >>> rocks...1k > >>> > >>> > --------------------------------------------------------------------------- > >>> Sent from my phone. Please excuse my brevity. > >>> > >>> On September 18, 2015 9:54:54 PM PDT, 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 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. > >>> > >>> > >> > >> > >> > > > > ______________________________________________ > > R-help at r-project.org 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. > > > > -- > Jianling Fan > ??? > > ______________________________________________ > R-help at r-project.org 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. >-- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com [[alternative HTML version deleted]]
Thanks Gabor, That works good to rewrite the express the formula! Thanks a lot! Regards, Jianling On 21 September 2015 at 10:43, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:> Express the formula in terms of simple operations like this: > > # add 0/1 columns ref.1, ref.2, ..., ref.6 > dproot2 <- do.call(data.frame, transform(dproot, ref = outer(dproot$ref, > seq(6), "==") + 0)) > > # now express the formula in terms of the new columns > library(nlmrt) > fitdp1<-nlxb(den ~ (Rm1 * ref.1 + Rm2 * ref.2 + Rm3 * ref.3 + Rm4 * ref.4 + > Rm5 * ref.5 + Rm6 * ref.6)/(1+(depth/d50)^c), > data = dproot2, > start = c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, Rm5=1.01, Rm6=1, > d50=20, c=-1), > masked = "Rm6") > > where we used this input: > > Lines <- " 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" > > dproot <- read.table(text = Lines, header = TRUE) > > > > On Mon, Sep 21, 2015 at 12:22 PM, Jianling Fan <fanjianling at gmail.com> > wrote: >> >> Thanks Prof. Nash, >> >> Sorry for late reply. I am learning and trying to use your nlmrt >> package since I got your email. It works good to mask a parameter in >> regression but seems does work for my equation. I think the problem is >> that the parameter I want to mask is a group-specific parameter and I >> have a "[]" syntax in my equation. However, I don't have your 2014 >> book on hand and couldn't find it in our library. So I am wondering if >> nlxb works for group data? >> Thanks a lot! >> >> following is my code and I got a error form it. >> >> > fitdp1<-nlxb(den~Rm[ref]/(1+(depth/d50)^c),data=dproot, >> + start =c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, >> Rm5=1.01, Rm6=1, d50=20, c=-1), >> + masked=c("Rm6")) >> >> Error in deriv.default(parse(text = resexp), names(start)) : >> Function '`[`' is not in the derivatives table >> >> >> Best regards, >> >> Jianling >> >> >> On 20 September 2015 at 12:56, ProfJCNash <profjcnash at gmail.com> wrote: >> > I posted a suggestion to use nlmrt package (function nlxb to be >> > precise), >> > which has masked (fixed) parameters. Examples in my 2014 book on >> > Nonlinear >> > parameter optimization with R tools. However, I'm travelling just now, >> > or >> > would consider giving this a try. >> > >> > JN >> > >> > >> > On 15-09-20 01:19 PM, Jianling Fan wrote: >> >> >> >> no, I am doing a regression with 6 group data with 2 shared parameters >> >> and 1 different parameter for each group data. the parameter I want to >> >> coerce is for one group. I don't know how to do it. Any suggestion? >> >> >> >> Thanks! >> >> >> >> On 19 September 2015 at 13:33, Jeff Newmiller >> >> <jdnewmil at dcn.davis.ca.us> >> >> wrote: >> >>> >> >>> Why not rewrite the function so that value is not a parameter? >> >>> >> >>> >> >>> --------------------------------------------------------------------------- >> >>> Jeff Newmiller The ..... ..... Go >> >>> Live... >> >>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live >> >>> Go... >> >>> Live: OO#.. Dead: OO#.. >> >>> Playing >> >>> Research Engineer (Solar/Batteries O.O#. #.O#. with >> >>> /Software/Embedded Controllers) .OO#. .OO#. >> >>> rocks...1k >> >>> >> >>> >> >>> --------------------------------------------------------------------------- >> >>> Sent from my phone. Please excuse my brevity. >> >>> >> >>> On September 18, 2015 9:54:54 PM PDT, 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 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. >> >>> >> >>> >> >> >> >> >> >> >> > >> > ______________________________________________ >> > R-help at r-project.org 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. >> >> >> >> -- >> Jianling Fan >> ??? >> >> ______________________________________________ >> R-help at r-project.org 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. > > > > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com-- Jianling Fan ???
I've not used it for group data, and suspect that the code to generate derivatives cannot cope with the bracket syntax. If you can rewrite the equation without the brackets, you could get the derivatives and solve that way. This will probably mean having a "translation" routine to glue things together. JN On 15-09-21 12:22 PM, Jianling Fan wrote:> Thanks Prof. Nash, > > Sorry for late reply. I am learning and trying to use your nlmrt > package since I got your email. It works good to mask a parameter in > regression but seems does work for my equation. I think the problem is > that the parameter I want to mask is a group-specific parameter and I > have a "[]" syntax in my equation. However, I don't have your 2014 > book on hand and couldn't find it in our library. So I am wondering if > nlxb works for group data? > Thanks a lot! > > following is my code and I got a error form it. > >> fitdp1<-nlxb(den~Rm[ref]/(1+(depth/d50)^c),data=dproot, > + start =c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, > Rm5=1.01, Rm6=1, d50=20, c=-1), > + masked=c("Rm6")) > > Error in deriv.default(parse(text = resexp), names(start)) : > Function '`[`' is not in the derivatives table > > > Best regards, > > Jianling > > > On 20 September 2015 at 12:56, ProfJCNash <profjcnash at gmail.com> wrote: >> I posted a suggestion to use nlmrt package (function nlxb to be precise), >> which has masked (fixed) parameters. Examples in my 2014 book on Nonlinear >> parameter optimization with R tools. However, I'm travelling just now, or >> would consider giving this a try. >> >> JN >> >> >> On 15-09-20 01:19 PM, Jianling Fan wrote: >>> >>> no, I am doing a regression with 6 group data with 2 shared parameters >>> and 1 different parameter for each group data. the parameter I want to >>> coerce is for one group. I don't know how to do it. Any suggestion? >>> >>> Thanks! >>> >>> On 19 September 2015 at 13:33, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> >>> wrote: >>>> >>>> Why not rewrite the function so that value is not a parameter? >>>> >>>> --------------------------------------------------------------------------- >>>> Jeff Newmiller The ..... ..... Go >>>> Live... >>>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live >>>> Go... >>>> Live: OO#.. Dead: OO#.. Playing >>>> Research Engineer (Solar/Batteries O.O#. #.O#. with >>>> /Software/Embedded Controllers) .OO#. .OO#. >>>> rocks...1k >>>> >>>> --------------------------------------------------------------------------- >>>> Sent from my phone. Please excuse my brevity. >>>> >>>> On September 18, 2015 9:54:54 PM PDT, 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 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. >>>> >>>> >>> >>> >>> >> >> ______________________________________________ >> R-help at r-project.org 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. > > >
Hello, Gabor, Thanks again for your suggestion. And now I am trying to improve the code by adding a function to replace the express "Rm1 * ref.1 + Rm2 * ref.2 + Rm3 * ref.3 + Rm4 * ref.4 + Rm5 * ref.5 + Rm6 * ref.6" because I have some other dataset need to fitted to the same model but with more groups (>20). I tried to add the function as: denfun<-function(i){ for(i in 1:6){ Rm<-sum(Rm[i]*ref.i) return(Rm)} } but I got another error when I incorporate this function into my regression:>fitdp1<-nlxb(den ~ denfun(6)/(1+(depth/d50)^c),data = dproot2, start = c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, Rm5=1.01, Rm6=1, d50=20, c=-1), masked = "Rm6") Error in deriv.default(parse(text = resexp), names(start)) : Function 'denfun' is not in the derivatives table I think there must be something wrong with my function. I tried some times but am not sure how to improve it because I am quite new to R. Could anyone please give me some suggestion. Thanks a lot! Jianling On 22 September 2015 at 00:43, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:> Express the formula in terms of simple operations like this: > > # add 0/1 columns ref.1, ref.2, ..., ref.6 > dproot2 <- do.call(data.frame, transform(dproot, ref = outer(dproot$ref, > seq(6), "==") + 0)) > > # now express the formula in terms of the new columns > library(nlmrt) > fitdp1<-nlxb(den ~ (Rm1 * ref.1 + Rm2 * ref.2 + Rm3 * ref.3 + Rm4 * ref.4 + > Rm5 * ref.5 + Rm6 * ref.6)/(1+(depth/d50)^c), > data = dproot2, > start = c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, Rm5=1.01, Rm6=1, > d50=20, c=-1), > masked = "Rm6") > > where we used this input: > > Lines <- " 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" > > dproot <- read.table(text = Lines, header = TRUE) > > > > On Mon, Sep 21, 2015 at 12:22 PM, Jianling Fan <fanjianling at gmail.com> > wrote: >> >> Thanks Prof. Nash, >> >> Sorry for late reply. I am learning and trying to use your nlmrt >> package since I got your email. It works good to mask a parameter in >> regression but seems does work for my equation. I think the problem is >> that the parameter I want to mask is a group-specific parameter and I >> have a "[]" syntax in my equation. However, I don't have your 2014 >> book on hand and couldn't find it in our library. So I am wondering if >> nlxb works for group data? >> Thanks a lot! >> >> following is my code and I got a error form it. >> >> > fitdp1<-nlxb(den~Rm[ref]/(1+(depth/d50)^c),data=dproot, >> + start =c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, >> Rm5=1.01, Rm6=1, d50=20, c=-1), >> + masked=c("Rm6")) >> >> Error in deriv.default(parse(text = resexp), names(start)) : >> Function '`[`' is not in the derivatives table >> >> >> Best regards, >> >> Jianling >> >> >> On 20 September 2015 at 12:56, ProfJCNash <profjcnash at gmail.com> wrote: >> > I posted a suggestion to use nlmrt package (function nlxb to be >> > precise), >> > which has masked (fixed) parameters. Examples in my 2014 book on >> > Nonlinear >> > parameter optimization with R tools. However, I'm travelling just now, >> > or >> > would consider giving this a try. >> > >> > JN >> > >> > >> > On 15-09-20 01:19 PM, Jianling Fan wrote: >> >> >> >> no, I am doing a regression with 6 group data with 2 shared parameters >> >> and 1 different parameter for each group data. the parameter I want to >> >> coerce is for one group. I don't know how to do it. Any suggestion? >> >> >> >> Thanks! >> >> >> >> On 19 September 2015 at 13:33, Jeff Newmiller >> >> <jdnewmil at dcn.davis.ca.us> >> >> wrote: >> >>> >> >>> Why not rewrite the function so that value is not a parameter? >> >>> >> >>> >> >>> --------------------------------------------------------------------------- >> >>> Jeff Newmiller The ..... ..... Go >> >>> Live... >> >>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live >> >>> Go... >> >>> Live: OO#.. Dead: OO#.. >> >>> Playing >> >>> Research Engineer (Solar/Batteries O.O#. #.O#. with >> >>> /Software/Embedded Controllers) .OO#. .OO#. >> >>> rocks...1k >> >>> >> >>> >> >>> --------------------------------------------------------------------------- >> >>> Sent from my phone. Please excuse my brevity. >> >>> >> >>> On September 18, 2015 9:54:54 PM PDT, 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 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. >> >>> >> >>> >> >> >> >> >> >> >> > >> > ______________________________________________ >> > R-help at r-project.org 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. >> >> >> >> -- >> Jianling Fan >> ??? >> >> ______________________________________________ >> R-help at r-project.org 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. > > > > > -- > Statistics & Software Consulting > GKX Group, GKX Associates Inc. > tel: 1-877-GKX-GROUP > email: ggrothendieck at gmail.com-- Jianling Fan ???
Hello Prof. Nash, My regression works good now. But I found another problem when I using nlxb. In the output, the SE, t-stat, and p-value are not available. Furthermore, I can't extract AIC from the output. The output looks like below: Do you have any suggestion for this? Thanks a lot! Regards, nlmrt class object: x residual sumsquares = 0.29371 on 33 observations after 9 Jacobian and 10 function evaluations name coeff SE tstat pval gradient JSingval Rm1 1.1162 NA NA NA -3.059e-13 2.745 Rm2 1.56072 NA NA NA 1.417e-13 1.76 Rm3 1.09775 NA NA NA -3.179e-13 1.748 Rm4 7.18377 NA NA NA -2.941e-12 1.748 Rm5 1.13562 NA NA NA -3.305e-13 1.076 Rm6 1 M NA NA NA 0 0.603 d50 22.4803 NA NA NA 4.975e-13 0.117 c -1.64075 NA NA NA 4.12e-12 1.908e-17 On 21 September 2015 at 13:38, ProfJCNash <profjcnash at gmail.com> wrote:> I've not used it for group data, and suspect that the code to generate > derivatives cannot cope with the bracket syntax. If you can rewrite the > equation without the brackets, you could get the derivatives and solve that > way. This will probably mean having a "translation" routine to glue things > together. > > JN > > > On 15-09-21 12:22 PM, Jianling Fan wrote: >> >> Thanks Prof. Nash, >> >> Sorry for late reply. I am learning and trying to use your nlmrt >> package since I got your email. It works good to mask a parameter in >> regression but seems does work for my equation. I think the problem is >> that the parameter I want to mask is a group-specific parameter and I >> have a "[]" syntax in my equation. However, I don't have your 2014 >> book on hand and couldn't find it in our library. So I am wondering if >> nlxb works for group data? >> Thanks a lot! >> >> following is my code and I got a error form it. >> >>> fitdp1<-nlxb(den~Rm[ref]/(1+(depth/d50)^c),data=dproot, >> >> + start =c(Rm1=1.01, Rm2=1.01, Rm3=1.01, Rm4=6.65, >> Rm5=1.01, Rm6=1, d50=20, c=-1), >> + masked=c("Rm6")) >> >> Error in deriv.default(parse(text = resexp), names(start)) : >> Function '`[`' is not in the derivatives table >> >> >> Best regards, >> >> Jianling >> >> >> On 20 September 2015 at 12:56, ProfJCNash <profjcnash at gmail.com> wrote: >>> >>> I posted a suggestion to use nlmrt package (function nlxb to be precise), >>> which has masked (fixed) parameters. Examples in my 2014 book on >>> Nonlinear >>> parameter optimization with R tools. However, I'm travelling just now, or >>> would consider giving this a try. >>> >>> JN >>> >>> >>> On 15-09-20 01:19 PM, Jianling Fan wrote: >>>> >>>> >>>> no, I am doing a regression with 6 group data with 2 shared parameters >>>> and 1 different parameter for each group data. the parameter I want to >>>> coerce is for one group. I don't know how to do it. Any suggestion? >>>> >>>> Thanks! >>>> >>>> On 19 September 2015 at 13:33, Jeff Newmiller <jdnewmil at dcn.davis.ca.us> >>>> wrote: >>>>> >>>>> >>>>> Why not rewrite the function so that value is not a parameter? >>>>> >>>>> >>>>> --------------------------------------------------------------------------- >>>>> Jeff Newmiller The ..... ..... Go >>>>> Live... >>>>> DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live >>>>> Go... >>>>> Live: OO#.. Dead: OO#.. >>>>> Playing >>>>> Research Engineer (Solar/Batteries O.O#. #.O#. with >>>>> /Software/Embedded Controllers) .OO#. .OO#. >>>>> rocks...1k >>>>> >>>>> >>>>> --------------------------------------------------------------------------- >>>>> Sent from my phone. Please excuse my brevity. >>>>> >>>>> On September 18, 2015 9:54:54 PM PDT, 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 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. >>>>> >>>>> >>>>> >>>> >>>> >>>> >>> >>> ______________________________________________ >>> R-help at r-project.org 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. >> >> >> >> >-- Jianling Fan ???