Computation of R-Square for a Non-Linear Model
/****************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: NLINRSQ */
/* TITLE: Computation of R-Square for a Non-Linear Model */
/* PRODUCT: STAT */
/* SYSTEM: ALL */
/* KEYS: nonlinear models, */
/* PROCS: NLIN MEANS */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* **************************************************************/
/* -------------------------------------------------------------*/
/* MISC: Analogous to the linear case, R-square is computed */
/* here as RSQ = */
/* 1 - VARIANCE(FULL MODEL)/VARIANCE(MEAN MODEL) = */
/* 1 - SSE/CSS, where */
/* SSE = error sum of squares obtained from nlin, */
/* CSS = corrected total sum of squares for the */
/* dependent variable. */
/* Note that the mean model is not nested within */
/* the general non-linear model, so the quanity RSQ */
/* may be negative. */
/****************************************************************/
TITLE1 '--------------- NLINRSQ ----------------';
TITLE2 '--- R-Square for a Non-Linear Model ----';
data uspop;
input pop :6.3 @@;
retain year 1780;
year=year+10;
yearsq=year*year;
datalines;
3929 5308 7239 9638 12866 17069 23191 31443 39818 50155
62947 75994 91972 105710 122775 131669 151325 179323 203211
226542 248710
;
proc print data=uspop;
proc nlin data=uspop;
parms c0=3.9 c1=.022;
model pop=c0*exp(c1*(year-1790));
output out=b1 sse=sse;
run;
proc means data=uspop noprint css;
var pop;
output out=b2 css=css;
run;
data _nuLL_;
set b1(obs=1); set b2(obs=1);
rsq = 1 - sse/css;
file print;
put // +10 'R-square for the non-linear model is defined' /
+10 'as 1 - SSE/CSS, where sse is the variance of' /
+10 'of the full model, CSS is the variance of ' /
+10 'the mean model. ' //
+10 'R-square =' +5 rsq 8.6;
run;