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()
for (i in 1:length(resultList))
+ {
+ 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
Hello,
I'm using the following for loop to find regression curves using a list of
functions (formList), a list of
.. long non-reproducible code removed
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
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