I built logistic models using self-starting nls logistic models using SSlogis and nls functions in the base 'stats' package in R. I had a couple questions about the biological interpretation of the parameter estimates for asym, xmid, and scal.

I can see here what the model interpretation is of those parameters.

I would like to validate that I am correct in my biological interpretation.

The model results in 3 parameter estimates: (1) asym is the top horizontal asymptote and represents the carrying capacity, (2) xmid is the time point where population density is half of asym, and represents the time to fastest growth (3) scal is inverse of the slope of growth at xmid and represents the growth rate during the exponential phase (the smaller the scal value, the faster the growth rate; Caroli et al. 2010).

1) Is the above interpretation correct, asym ~ carrying capacity, xmid ~ time to fastest growth, scal ~ inverse of growth rate?

2) If scal is the inverse of growth rate, is it then reasonable to take the inverse of scal to examine how growth rate changes based on some X variable?

I've done a good deal of searching and have only found Caroli et al. 2010.

Figure 1 below, to be helfpul in interpreting these growth parameters in a biological sense. enter image description here


1 Answer 1


Okay, so I stumbled across this because I wanted to know too. So I tried to "test" it with a data set.

test_data = data.frame(bw = c(5,6,7,10,15,20,25,27,29,30), time=1:10)
plot(bw~time, test_data)

The formula for logistic regression that makes sense to me is: Nt = K/(1+be^(-rt)) where K is carrying capacity (or maximum achieved weight), r is maximum growth rate, t is time and b = K-N0/N0 where N0 is the lower asymptote (weight or starting population size).

Next I fit a model that made sense to me using nls with r an explicit parameter.

mod1 = nls(bw~(K/(1+b*exp(-r*time))), data=test_data,
start = list(K=30, r=1, b=1)) #starting parameters estimated from graph

Model 1 Summary

mod2 = nls(bw~SSlogis(time, Asym, xmid, scal), data=test_data)

Model 2 Summary

mod2 = nls(bw~asym/(1+exp((xmid-time)/scal)), data=test_data,
start = list(asym=30, xmid=5, scal=1))

Model 3 Summary

So looking at the summary from model 2 and model 3, the estimates are the same so I think this is good evidence that the formula that produced the SSlogis() results is the same one as that produced model 3 (the y = asym/(1+e^((xmid-x)/scal)) from the image in your original post.

Next, is the scal parameter the same as 1/r? The scal parameter estimate from the last two models is 1.887 versus the r parameter estimate in model 1 is 0.52639.

1/r = 1/0.52639 = 1.899732 which is the same as the scal parameter in the last two models.

No idea if this will help you or not but it helped me!


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.