Skip to content

summary of a list

2 messages · lauramorgana at bluewin.ch, Dieter Menne

#
Hello,
I'm using the following for loop to find regression curves using a list of functions (formList), a list of starting 
values (startList), uppervalues (upperList) and lower values (lowerList).
A sample of the list of function I use in the loop is the following:

FormList <- list(PTG.P ~ fz1(Portata, a, b), PTG.P ~ fz2(Portata, a, b), PTG.P ~ fz3(Portata,a, b, d, e),
PTG.P ~ fz4(Portata, a, b), PTG.P ~ fz5(Portata, a, b, d), PO4.P ~ fz1(Portata, a, b),
PO4.P ~ fz2(Portata, a, b), ...

And the loop I use is:
resultList <- list()
for (i in 1:length(formList))
{
    resultList[[i]] <- nls(formList[[i]], data=subset(dati, Fiume=="Laveggio"), start=startList[[i]], 
    nls.control(maxiter=1000, warnOnly=TRUE), algorithm='port', na.action=na.omit,lower=lowerList[[i]], 
    upper=upperList[[i]])
}
When the computation ends I get 5 warning messages (one of false convergence, 4 of singular convergence:
In nls(formList[[i]], data = subset(dati, Fiume == "Laveggio"),  : Convergence failure: false convergence (8)
2: In nls(formList[[i]], data = subset(dati, Fiume == "Laveggio"),  : Convergence failure: singular convergence (7)

If I want to get the summary of the first object of the resultList I do:
summary(resultList[[1]])
And I get a result with no problem:
Formula: PTG.P ~ fz1(Portata, a, b)

Parameters:
  Estimate Std. Error t value Pr(>|t|)   
a   61.158     18.591   3.290  0.00140 **
b    7.616      8.720   0.873  0.38464   
---
Signif. codes:  0 ?***? 0.001 ?**? 0.01 ?*? 0.05 ?.? 0.1 ? ? 1 

Residual standard error: 91.32 on 96 degrees of freedom

Algorithm "port", convergence message: both X-convergence and relative convergence (5)

It also works if I try to get the summary of the first 5 object of the resultList with:
summaryList<-list()
for (i in 1:5)
{
summaryList[[i]]<-summary(resultList[[i]])
}

But if I try to get the summary of all the objects of the resultList (there are 35 objects) it doesn't work...
I tried:
summaryList<-list()
+ {
+ summaryList[[i]]<-summary(resultList[[i]])
+ }
And I got the following error message:
Error in chol2inv(object$m$Rmat()) : l'elemento (3, 3) ? zero, quindi l'inversa non pu? essere calcolata
Which translated should be: Error in chol2inv(object$m$Rmat()): the element (3, 3) is zero (NULL?), that's why the 
inverse (inverse function?) can not be computed 

Does somebody have an idea on how to fix this? 

Thanks
Laura
#
lauramorgana <at> bluewin.ch <lauramorgana <at> bluewin.ch> writes:
functions (formList), a list of

.. long non-reproducible code removed
l'inversa non pu? essere calcolata
(3, 3) is zero (NULL?),
nls is rather nasty or nice in telling you when the result should not 
be trusted. Other software gives nonsense result without blinking.

In package nlme, there is a function nlsList which does directly what you
want, but there is little help besides revising the model for the cases
without convergence. 

Also try check Gabor Grothendieks package "nls2" which could help you 
finding better start values.

Dieter