[R] Error messages using nonlinear regression function (nls)

William Dunlap
Fri, 20 Oct 2017 14:54:43 -0000

The Logistic link does not work well with zero or unit proportions.  Try
pulling it away from the edges with
   wlg$Prop <- pmin( 1-1e-10, pmax( 1e-10, w1g$Prop ))




Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Thu, Oct 19, 2017 at 11:33 PM, PIKAL Petr <petr.pikal at precheza.cz>
wrote:

> Hi
>
> Keep your messages in the list, you increase your chance to get some
> answer.
>
> I changed your data to groupedData object (see below), but I did not find
> any problem in it.
>
> plot(wlg)
> gives reasonable picture and I am not such expert to see any problem with
> data. Seems to me, that something has to be wrong with nlsList function.
>
> > wheat.list <- nlsList(Prop ~ SSlogis(end,Asym, xmid, scal),
data=wlg)
> Warning message:
> 6 times caught the same error in lm.fit(x, y, offset = offset, singular.ok
> = singular.ok, ...): NA/NaN/Inf in 'x'
>
> produces empty list. So maybe others could find some problem.
>
> Cheers
> Petr
>
> > dput(wlg)
> structure(list(temp = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L,
> 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L,
> 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L,
> 5L, 5L, 5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L,
> 6L, 6L, 6L, 6L, 6L, 6L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
> 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("40", "10",
"16", "22", "28",
> "34"), class = c("ordered", "factor")),
species = structure(c(3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
> 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label =
c("mungbean",
> "rice", "wheat"), class = "factor"), start =
c(0, 1, 2, 3, 4,
> 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 0, 2, 3, 4, 5, 6, 7,
> 9, 10, 11, 12, 13, 14, 16, 17, 0, 2, 3, 4, 5, 6, 7, 9, 10, 11,
> 12, 13, 14, 16, 17, 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13,
> 14, 16, 17, 0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17,
> 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17), end = c(1,
> 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 18, 2, 3, 4,
> 5, 6, 7, 9, 10, 11, 12, 13, 14, 16, 17, 18, 2, 3, 4, 5, 6, 7,
> 9, 10, 11, 12, 13, 14, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 9, 10,
> 11, 12, 13, 14, 16, 17, 18, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12,
> 13, 14, 16, 17, 18, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14,
> 16, 17, 18), germinated = c(0L, 0L, 0L, 0L, 0L, 4L, 6L, 8L, 0L,
> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 11L, 7L, 0L, 1L, 0L, 0L,
> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 12L, 3L, 0L, 3L, 0L, 0L,
> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 8L, 0L, 8L, 3L, 0L, 0L,
> 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 5L, 11L, 1L, 1L, 0L, 0L, 0L,
> 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L,
> 2L, 0L, 0L, 0L, 0L, 0L, 0L), TotSeeds = c(20, 20, 20, 20, 20,
> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
> 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,
> 20, 20, 20, 20, 20, 20, 20, 20), TotGerminated = c(0, 0, 0, 0,
> 0, 4, 10, 18, 18, 18, 18, 18, 18, 18, 18, 18, 0, 0, 11, 18, 18,
> 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 1, 13, 16, 16, 19,
> 19, 19, 19, 19, 19, 19, 19, 19, 19, 0, 0, 0, 8, 8, 16, 19, 19,
> 19, 19, 19, 19, 19, 19, 19, 19, 0, 5, 16, 17, 18, 18, 18, 18,
> 18, 19, 19, 19, 19, 19, 19, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3,
> 3, 3, 3, 3, 3), Prop = c(0, 0, 0, 0, 0, 0.2, 0.5, 0.9, 0.9, 0.9,
> 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0, 0, 0.55, 0.9, 0.9, 0.95, 0.95,
> 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0, 0.05, 0.65,
> 0.8, 0.8, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95,
> 0.95, 0, 0, 0, 0.4, 0.4, 0.8, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95,
> 0.95, 0.95, 0.95, 0.95, 0, 0.25, 0.8, 0.85, 0.9, 0.9, 0.9, 0.9,
> 0.9, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0, 0, 0, 0, 0, 0, 0,
> 0, 0.05, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15)), .Names =
c("temp",
> "species", "start", "end",
"germinated", "TotSeeds", "TotGerminated",
> "Prop"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L,
> 11L, 12L, 13L, 14L, 15L, 16L, 25L, 26L, 27L, 28L, 29L, 30L, 31L,
> 32L, 33L, 34L, 35L, 36L, 37L, 38L, 39L, 63L, 64L, 65L, 66L, 67L,
> 68L, 69L, 70L, 71L, 72L, 73L, 74L, 75L, 76L, 77L, 95L, 96L, 97L,
> 98L, 99L, 100L, 101L, 102L, 103L, 104L, 105L, 106L, 107L, 108L,
> 109L, 110L, 127L, 128L, 129L, 130L, 131L, 132L, 133L, 134L, 135L,
> 136L, 137L, 138L, 139L, 140L, 141L, 159L, 160L, 161L, 162L, 163L,
> 164L, 165L, 166L, 167L, 168L, 169L, 170L, 171L, 172L, 173L, 174L
> ), class = c("nfnGroupedData", "nfGroupedData",
"groupedData",
> "data.frame"), formula = Prop ~ end | temp, FUN = function (x)
> max(x, na.rm = TRUE), order.groups = TRUE)
> >
>
> > sessionInfo()
> R Under development (unstable) (2017-07-31 r73003)
> Platform: x86_64-w64-mingw32/x64 (64-bit)
> Running under: Windows 10 x64 (build 14393)
>
> Matrix products: default
>
> locale:
> [1] LC_COLLATE=Czech_Czech Republic.1250  LC_CTYPE=Czech_Czech
> Republic.1250
> [3] LC_MONETARY=Czech_Czech Republic.1250 LC_NUMERIC=C
> [5] LC_TIME=Czech_Czech Republic.1250
>
> attached base packages:
> [1] stats     datasets  utils     grDevices graphics  methods   base
>
> other attached packages:
> [1] nlme_3.1-131    lattice_0.20-35 fun_0.1
>
> loaded via a namespace (and not attached):
>  [1] compiler_3.5.0   colorspace_1.3-2 scales_0.4.1     lazyeval_0.2.0
>  [5] plyr_1.8.4       tools_3.5.0      gtable_0.2.0     tibble_1.3.3
>  [9] Rcpp_0.12.12     ggplot2_2.2.1    grid_3.5.0       rlang_0.1.1
> [13] munsell_0.4.3
> >
>
> > -----Original Message-----
> > From: Wall, Wade A ERDC-RDE-CERL-IL CIV
> > [mailto:Wade.A.Wall at erdc.dren.mil]
> > Sent: Thursday, October 19, 2017 3:18 PM
> > To: PIKAL Petr <petr.pikal at precheza.cz>
> > Subject: RE: Error messages using nonlinear regression function (nls)
> >
> > "Prop" is the proportion of seeds that have germinated from
the total.
> Here is
> > the code I used to transform the germination data set. When graphed,
the
> > logistic curve provides a reasonable fit.
> >
> > data(germination)
> > germination$TotSeeds = 20
> > germination$TotGerminated = 0
> > tmpCount = 0
> >
> > for(i in 2:nrow(germination)){
> >   if((germination$temp[i]!=germination$temp[i-1]) |
> (germination$species[i] !> > germination$species[i-1])) {tmpCount =
0}
> >   if((germination$temp[i]==germination$temp[i-1]) &
> (germination$species[i]
> > == germination$species[i-1]))
> >   {tmpCount = tmpCount + germination$germinated[i];
> > germination$TotGerminated[i]=tmpCount}
> > }
> > germination$Prop = germination$TotGerminated/germination$TotSeeds
> > germination = germination[germination$end != Inf,]
> >
> > Wade
> >
> > -----Original Message-----
> > From: PIKAL Petr [mailto:petr.pikal at precheza.cz]
> > Sent: Thursday, October 19, 2017 1:21 AM
> > To: Wall, Wade A ERDC-RDE-CERL-IL CIV <Wade.A.Wall at
erdc.dren.mil>; r-
> > help at r-project.org
> > Subject: RE: Error messages using nonlinear regression function (nls)
> >
> > Hi
> >
> > Thanks for the code but where is Prop?
> >
> > It is not a variable in germination data set so we do not know how you
> did the
> > computation.
> >
> > My wild guess is, that your Prop do not follow logistic curve and
> therefore no
> > results from nlsList
> >
> > Cheers
> > Petr
> >
> >
> > > -----Original Message-----
> > > From: R-help [mailto:r-help-bounces at r-project.org] On Behalf
Of Wall,
> > > Wade A ERDC-RDE-CERL-IL CIV
> > > Sent: Wednesday, October 18, 2017 5:58 PM
> > > To: r-help at r-project.org
> > > Subject: [R] Error messages using nonlinear regression function
(nls)
> > >
> > > Hi all,
> > >
> > > I am trying to use nonlinear regression (nls) to analyze some
seed
> > > germination data, but am having problems with error codes.
> > >
> > > The data that I have closely matches the germination dataset
included
> > > in the drc package.
> > >
> > > Here is the head of the data
> > >
> > >   temp species start end germinated TotSeeds TotGerminated Prop
> > > 1   10   wheat     0   1          0       20             0  0.0
> > > 2   10   wheat     1   2          0       20             0  0.0
> > > 3   10   wheat     2   3          0       20             0  0.0
> > > 4   10   wheat     3   4          0       20             0  0.0
> > > 5   10   wheat     4   5          0       20             0  0.0
> > > 6   10   wheat     5   6          4       20             4  0.2
> > >
> > > temp is the temperature under which the seeds were germinated,
species
> > > denotes the species (wheat, mungbean, or rice) Start and end
denote
> > > the beginning and end of a period of time and germinated denotes
how
> > > many seeds germinated during that period of time. Prop represents
the
> > > proportion of seeds that have germinated.
> > >
> > > I have attempted to mimic Fox and Weisberg's appendix to
Nonlinear
> > > Regression found here.
> > >
Blockedhttps://socserv.socsci.mcmaster.ca/jfox/Books/Companion/appendi
> > > x/AppendixBlocked
> > > -Nonlinear-Regression.pdf
> > >
> > > My first step is to look at a single species, wheat, and use nls
on
> > > the individual temperatures.
> > >
> > > I have tried to use both the nlsList function and to attempt to
> > > estimate the parameters using lm(), but I receive error messages
on
> > > both. Here is the code.
> > >
> > > library(drc) ### for germination dataset
> > > data(germination)
> > >
> > > wheat = germination[germination$species == "wheat",]
### subset by
> > > wheat scatterplot(Prop ~ end|temp,data=wheat,box=FALSE,reg=FALSE)
###
> > > view the data wheat$temp = as.factor(wheat$temp) ### convert to
factor
> > >
> > > ### First, try to use nlsList
> > > wheat.list <- nlsList(Prop ~ SSlogis(end,phi1,phi2,phi3)|
> > > temp,pool=FALSE,data=wheat) ###
> > >
> > > ### next, try to use lm to estimate starting parameters.
> > > wheat.list = list()
> > >
> > > for (i in 1:length(levels(wheat$temp))){
> > >   tmpDat = wheat[wheat$temp == levels(wheat$temp)[i],]
> > >   tmp.lm <- lm(Prop ~ end,data = tmpDat)
> > >   tmp.nls <- nls(Prop ~ theta1 / (1 + exp(-(theta2 +
theta3*end))),
> > >       start = list(theta1 = .5,theta2=coef(tmp.lm)[1],theta3 >
coef(tmp.lm)[2]),
> > >       data = tmpDat,trace=TRUE)
> > >   tmp2.nls <- nls(Prop ~
SSlogis(end,phi1,phi2,phi3),data=tmpDat)
> > >   wheat.list[i] <- tmp.nls
> > > }
> > > #### End code
> > > nlsList just returns an empty list.
> > >
> > > When I try to loop through the individual temperatures, for the
first
> > > temperature, nls converges when I provide starting values, but
when I
> > > try to use SSlogis(), I get the error messsage
> > >
> > > Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok,
...)
> :
> > >   NA/NaN/Inf in 'x'
> > >
> > > For the second temperature (16), I get the following error
message
> > > when provided initial values using lm:
> > >
> > > Error in nls(Prop ~ theta1/(1 + exp(-(theta2 + theta3 * end))),
start
> > > = list(theta1 = 0.5,  :
> > >   singular gradient
> > >
> > > I have tried to read through posts, but none of them seem to
apply to
> this
> > case.
> > > The data seem relatively simply and
> > > I am not sure what I am doing wrong. Any help would be
appreciated.
> > >
> > > Wade
> > >
>
> ________________________________
> Tento e-mail a jak?koliv k n?mu p?ipojen? dokumenty jsou d?v?rn? a jsou
> ur?eny pouze jeho adres?t?m.
> Jestli?e jste obdr?el(a) tento e-mail omylem, informujte laskav?
> neprodlen? jeho odes?latele. Obsah tohoto emailu i s p??lohami a jeho kopie
> vyma?te ze sv?ho syst?mu.
> Nejste-li zam??len?m adres?tem tohoto emailu, nejste opr?vn?ni tento email
> jakkoliv u??vat, roz?i?ovat, kop?rovat ?i zve?ej?ovat.
> Odes?latel e-mailu neodpov?d? za eventu?ln? ?kodu zp?sobenou modifikacemi
> ?i zpo?d?n?m p?enosu e-mailu.
>
> V p??pad?, ?e je tento e-mail sou??st? obchodn?ho jedn?n?:
> - vyhrazuje si odes?latel pr?vo ukon?it kdykoliv jedn?n? o uzav?en?
> smlouvy, a to z jak?hokoliv d?vodu i bez uveden? d?vodu.
> - a obsahuje-li nab?dku, je adres?t opr?vn?n nab?dku bezodkladn? p?ijmout;
> Odes?latel tohoto e-mailu (nab?dky) vylu?uje p?ijet? nab?dky ze strany
> p??jemce s dodatkem ?i odchylkou.
> - trv? odes?latel na tom, ?e p??slu?n? smlouva je uzav?ena teprve
> v?slovn?m dosa?en?m shody na v?ech jej?ch n?le?itostech.
> - odes?latel tohoto emailu informuje, ?e nen? opr?vn?n uzav?rat za
> spole?nost ??dn? smlouvy s v?jimkou p??pad?, kdy k tomu byl p?semn? zmocn?n
> nebo p?semn? pov??en a takov? pov??en? nebo pln? moc byly adres?tovi tohoto
> emailu p??padn? osob?, kterou adres?t zastupuje, p?edlo?eny nebo jejich
> existence je adres?tovi ?i osob? j?m zastoupen? zn?m?.
>
> This e-mail and any documents attached to it may be confidential and are
> intended only for its intended recipients.
> If you received this e-mail by mistake, please immediately inform its
> sender. Delete the contents of this e-mail with all attachments and its
> copies from your system.
> If you are not the intended recipient of this e-mail, you are not
> authorized to use, disseminate, copy or disclose this e-mail in any manner.
> The sender of this e-mail shall not be liable for any possible damage
> caused by modifications of the e-mail or by delay with transfer of the
> email.
>
> In case that this e-mail forms part of business dealings:
> - the sender reserves the right to end negotiations about entering into a
> contract in any time, for any reason, and without stating any reasoning.
> - if the e-mail contains an offer, the recipient is entitled to
> immediately accept such offer; The sender of this e-mail (offer) excludes
> any acceptance of the offer on the part of the recipient containing any
> amendment or variation.
> - the sender insists on that the respective contract is concluded only
> upon an express mutual agreement on all its aspects.
> - the sender of this e-mail informs that he/she is not authorized to enter
> into any contracts on behalf of the company except for cases in which
> he/she is expressly authorized to do so in writing, and such authorization
> or power of attorney is submitted to the recipient or the person
> represented by the recipient, or the existence of such authorization is
> known to the recipient of the person represented by the recipient.
> ______________________________________________
> 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.

	[[alternative HTML version deleted]]