[R-meta] R^2 in nonlinear model

Viechtbauer Wolfgang (SP) wolfgang.viechtbauer at maastrichtuniversity.nl
Thu Mar 1 18:23:19 CET 2018


If you want an R^2-type value, you could use the same approach that is typically used in regular meta-regression:

Fit the model with p2 constrained to 0; save the estimate of tau^2. Call this tau^2_RE.
Fit the model with p2 left free to estimate; save the estimate of tau^2. Call this tau^2_ME.

Then R^2 = (tau^2_RE - tau^2_ME) / tau^2_RE.

It's the proportional reduction in the amount of heterogeneity when 'x' is added as a predictor. Or in other words, it indicates how much of the total amount of heterogeneity is accounted for by 'x'.

I wouldn't think of this as indicating 'goodness of fit' though. 

Best,
Wolfgang

>-----Original Message-----
>From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces at r-
>project.org] On Behalf Of Cesar Terrer Moreno
>Sent: Thursday, 01 March, 2018 17:15
>To: r-sig-meta-analysis at r-project.org
>Subject: [R-meta] R^2 in nonlinear model
>
>Dear all,
>
>I am using a nonlinear meta-regression of the form y ~ p1 * exp(-p2*A):
>
>nlfun <- function(x, p1, p2)
>  p1 * exp(-p2*x)
>
># optimization function
>llfun <- function(par, yi, vi, x, random=TRUE) {
>  p1 <- par[1]
>  p2 <- par[2]
>  if (random) {
>    tau2 <- exp(par[3])
>  } else {
>    tau2 <- 0
>  }
>  mu <- nlfun(x, p1, p2)
>  -sum(dnorm(yi, mean=mu, sd=sqrt(vi + tau2), log=TRUE))
>}
>
># optimize
>res <- optim(par=c(8,0.4,log(.01)), llfun, yi=am.df$es, vi=am.df$var,
>x=am.df$CNr, hessian=TRUE)
>
>My question is: how can I compute something equivalent to R^2 that I can
>report to have an idea of the goodness of the fit?
>Thanks



More information about the R-sig-meta-analysis mailing list