13

I would first like to say, that I understand that calculating an R^2 value for a non-linear regression isn't exactly correct or a valid thing to do.

However, I'm in a transition period of performing most of our work in SigmaPlot over to R and for our non-linear (concentration-response) models, colleagues are used to seeing an R^2 value associated with the model to estimate goodness-of-fit.

SigmaPlot calculates the R^2 using 1-(residual SS/total SS), but in R I can't seem to extract the total SS (residual SS are reported in summary).

Any help in getting this to work would be greatly appreciated as I try and move us into using a better estimator of goodness-of-fit.

Cheers.

smci
  • 32,567
  • 20
  • 113
  • 146
sinclairjesse
  • 1,585
  • 4
  • 17
  • 29

2 Answers2

12

Instead of extracting the total SS, I've just calculated them:

test.mdl <- nls(ctrl.adj~a/(1((conc.calc/x0)^b)),
                data=dataSet,
                start=list(a=100,b=10,x0=40), trace=T);

1 - (deviance(test.mdl)/sum((ctrl.adj-mean(ctrl.adj))^2))

I get the same R^2 as when using SigmaPlot, so all should be good.

smci
  • 32,567
  • 20
  • 113
  • 146
sinclairjesse
  • 1,585
  • 4
  • 17
  • 29
5

So the total variation in y is like (n-1)*var(y) and the proportion not explained my your model is sum(residuals(fit)^2) so do something like 1-(sum(residuals(fit)^2)/((n-1)*var(y)) )

Seth
  • 4,745
  • 23
  • 27