rnlmemodel-fittingsymmetry

Resolving symmetry in gnls model


I'm trying to fit a logistic growth model in R, using gnls in the nlme package.

I have previously successfully fit a model:

mod1 <- gnls(Weight ~ I(A/(1+exp(b + v0*Age + v1*Sum.T))),
                        data = df,
                        start = c(A= 13.157132, b= 3, v0= 0.16, v1= -0.0059),
                        na.action=na.omit)

However, I now wish to constrain b so that it is not fitted by the model, so have tried fitting a second model:

mod2 <- gnls(Weight ~ I(A/(1+exp(log((A/1.022)-1) + v0*Age + v1*Sum.T))),
                       data = df,
                       start = c(A= 13.157132, v0= 0.16, v1= -0.0059),
                       na.action=na.omit)

This model returned the error:

Error in gnls(Weight ~ A/(1 + exp(log((A/1.022) - 1) + v0 * Age +  : 
approximate covariance matrix for parameter estimates not of full rank

Warning messages:
1: In log((A/1.022) - 1) : NaNs produced

Searching the error suggests that the problem is caused by symmetry in the model, and solutions to specific questions involve adapting the formula with different parameters. Unfortunately, my statistical knowledge is not good enough to a) fully understand the problem or b) adapt the formula myself.

As for the warning messages (there were 15 in all, all the same) I can't see why they arise because this section of the model works alone (with example numbers).

Any help with any of these queries would be greatly appreciated.


Solution

  • It may be informative for users to know that I finally solved this with what turned out to be a simple solution (with help from a friend).

    Since exp(a+b) = exp(a)*exp(b), the equation can be rewritten:

    Weight ~ I(A/(1+((A/1.022)-1) * exp(v0*Age + v1*Sum.T))
    

    Which fits without any problems. In general, writing the equation in a different form would seem to be the answer.