[R-meta] Calculating conditional and marginal r-squared values for rma.mv models in metafor

Michael Dewey lists at dewey.myzen.co.uk
Tue Oct 3 12:46:54 CEST 2017


Dear Danielle

I think your interpretation of the values of sigma i correct, most of 
the variation is between levels of ACC rather than between id within ACC

On 02/10/2017 20:37, Danielle Claar wrote:
> Dear Wolfgang,
> 
> Thank you very much for your reply! I apologize for my delay in responding, I have been ill this past week.
> 
> Thanks for pointing out the common mistake in three-level models. Adding in random=~1|ACC/id definitely makes sense, and I have gone ahead and done this for all of my models. Can you confirm that when I include this term in my models that sigma^2.1 (factor=ACC) demonstrates between-study variance, and that sigma^2.2 (factor=ACC/id) demonstrates within-study variance? So if I get this result:
> Variance Components:
>              estim    sqrt  nlvls  fixed  factor
> sigma^2.1  2.2596  1.5032     29     no     ACC
> sigma^2.2  0.1508  0.3883    192     no  ACC/id
> That means that more variance is explained by differences among papers (between-study variance) than within individual papers (within-study variance)? This result would make sense, I just want to make sure I am understanding/reporting the results correctly.
> 
> The calculation of a pseudo-R^2 seems reasonable as well. If I'm understanding correctly, it doesn't give you an 'absolute' quantification of model fit, but it does tell you how much better your full model is, once the chosen moderators are included (i.e. how much variance your moderators explain).
> 
> Thanks again, and all the best,
> Danielle
> 
> 
> -----Original Message-----
> From: Viechtbauer Wolfgang (SP) [mailto:wolfgang.viechtbauer at maastrichtuniversity.nl]
> Sent: Wednesday, September 27, 2017 1:54 PM
> To: Danielle Claar <danielle.claar at gmail.com>; r-sig-meta-analysis at r-project.org
> Subject: RE: [R-meta] Calculating conditional and marginal r-squared values for rma.mv models in metafor
> 
> Dear Danielle,
> 
> First of all, I think you should use:
> 
> cover.hedges$id <- 1:nrow(cover.hedges)
> cover.rma <- rma.mv(yi, vi, random=~1|ACC/id, method="REML", data=cover.hedges)
> 
> See also: http://www.metafor-project.org/doku.php/analyses:konstantopoulos2011#a_common_mistake_in_the_three-level_model
> 
> I also don't understand what you mean by "We report the fsn for the model without coefficients, as well as the AICc for the top models with coefficients (within 2AICc units of the best model)." What do you mean by "fsn" here?
> 
> As for a pseudo-R^2, one can easily extend the way of computing R^2 for 'standard' mixed-effects meta-regression models to this type of model. That is, let 'res0' be the model without coefficients and 'res1' the model with (both fitted as shown above). Then:
> 
> (res0$sigma2 - res1$sigma2) / res0$sigma2
> 
> gives the proportional reduction in each variance component, so R^2 for the study level and the estimate level. A 'total' R^2 would be:
> 
> (sum(res0$sigma2) - sum(res1$sigma2)) / sum(res0$sigma2)
> 
> Best,
> Wolfgang
> 
> -----Original Message-----
> From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces at r-project.org] On Behalf Of Danielle Claar
> Sent: Sunday, 24 September, 2017 20:28
> To: r-sig-meta-analysis at r-project.org
> Subject: [R-meta] Calculating conditional and marginal r-squared values for rma.mv models in metafor
> 
> Hello,
> 
> Thanks to Wolfgang for pointing me in the direction of this list-serve!
> 
> I am currently revising a manuscript that uses metafor to investigate how sea surface temperature stress affects coral bleaching and mortality during El Ni o events. We are using linear mixed effects models to take into account within-study variance, with study (ACC) as a random factor in our model. To do this, we are using rma.mv. In our simplest model, this looks like this:
> 
>> cover.rma <- rma.mv(yi, vi, random=~1|ACC, method="REML",
> data=cover.hedges)
>> cover.rma
> 
> Multivariate Meta-Analysis Model (k = 192; method: REML)
> 
> Variance Components:
> 
>              estim    sqrt  nlvls  fixed    factor
> sigma^2    2.3650  1.5378     29     no        ACC
> 
> Test for Heterogeneity:
> Q(df = 191) = 1355.9701, p-val < .0001
> 
> Model Results:
> 
> estimate       se     zval     pval    ci.lb    ci.ub
>   -1.5225   0.2946  -5.1682   <.0001  -2.1000  -0.9451      ***
> 
> ---
> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
> 
> We have also used glmulti (as explained here http://www.metafor-project.org/doku.php/tips:model_selection_with_glmulti),
> to conduct coefficient selection, which looks like this (output truncated for brevity).
> 
>> cov <- glmulti(yi~DHWtodate+Timelagtodate+tmean+tvar,
> random=list("~1|ACC"), # First try the full model with all 4 potential moderators
> 
> +                 data=cover.hedges, fitfunction = rma.glmulti, level=2,
> crit="aicc") # Level 2 looks at the interactions between all moderators.
> AICc allows for correction of a small N
> 
> Initialization...
> 
> TASK: Exhaustive screening of candidate set.
> 
> Fitting...
> 
> After 50 models:
> 
> Best model: yi~1+tmean:DHWtodate+tvar:tmean Crit= 780.334181647103 Mean crit= 806.821778458654 .
> 
> After 1050 models:
> 
> Best model: yi~1+DHWtodate+tmean+Timelagtodate:DHWtodate+tmean:DHWtodate
> 
> Crit= 773.219300469166
> 
> Mean crit= 776.66700421609
> 
> Completed.
> 
>> print(cov) # View summary of cov model
> 
> glmulti.analysis
> 
> Method: h / Fitting: rma.glmulti / IC used: aicc
> 
> Level: 2 / Marginality: FALSE
> 
>>From 100 models:
> 
> Best IC: 773.219300469166
> 
> Best model:
> 
> [1] "yi ~ 1 + DHWtodate + tmean + Timelagtodate:DHWtodate + tmean:DHWtodate"
> 
> Evidence weight: 0.0488927941262297
> 
> Worst IC: 777.81840821166
> 
> 8 models within 2 IC units.
> 
> 90 models to reach 95% of evidence weight.
> 
>> tmp <- weightable(cov) # Save tmp weightable for cov2 tmp <-
> 
>> tmp[tmp$aicc <= min(tmp$aicc) + 10000,] tmp # print AICc and weights
>> for
> all models
> 
>    model         aicc     weights
> 
> 1 yi ~ 1 + DHWtodate + tmean + Timelagtodate:DHWtodate + tmean:DHWtodate
> 773.2193 0.048892794
> 
> 2 yi ~ 1 + DHWtodate + tmean + tmean:DHWtodate + tvar:DHWtodate +
> tvar:Timelagtodate         773.9826 0.033380831
> 
> 3 yi ~ 1 + DHWtodate + tvar + tmean:DHWtodate + tvar:tmean
> 774.2527 0.029163932
> 
> 4 yi ~ 1 + DHWtodate + tvar + tmean:DHWtodate
> 774.8099 0.022072363
> 
> 5 yi ~ 1 + DHWtodate + tmean + tvar + Timelagtodate:DHWtodate +
> tmean:DHWtodate                        774.9541 0.020537024
> 
> 6 yi ~ 1 + DHWtodate + tmean + Timelagtodate:DHWtodate + tmean:DHWtodate +
> tvar:tmean               775.0963 0.019127989
> 
> 7 yi ~ 1 + DHWtodate + tmean + Timelagtodate:DHWtodate + tmean:DHWtodate +
> tvar:DHWtodate               775.1307 0.018801511
> 
> 8 yi ~ 1 + DHWtodate + tmean + Timelagtodate:DHWtodate + tmean:DHWtodate +
> tvar:Timelagtodate               775.1505 0.018616442
> 
>> cov.summ <- summary(cov at objects[[1]]) # create summary object for data
> 
>> cov.summ
> 
> Multivariate Meta-Analysis Model (k = 192; method: ML)
> 
>     logLik   Deviance        AIC        BIC      AICc
> -380.3826   588.5923   772.7652   792.3102 773.2193
> 
> Variance Components:
> 
>              estim    sqrt  nlvls  fixed            factor
> sigma^2    2.2116  1.4872     29     no        ACC
> 
> Test for Residual Heterogeneity:
> QE(df = 187) = 1117.8900, p-val < .0001
> 
> Test of Moderators (coefficient(s) 2,3,4,5):
> QM(df = 4) = 82.9952, p-val < .0001
> 
> Model Results:
> 
>                           estimate      se intrcpt                   14.4108
> 3.0184 DHWtodate                 -0.6322  0.2191 tmean
> -0.5737  0.1103 DHWtodate:Timelagtodate   -0.0001  0.0000 DHWtodate:tmean
> 0.0228  0.0086
>                              zval    pval intrcpt                   4.7743
> <.0001 DHWtodate                -2.8858  0.0039 tmean
> -5.2030  <.0001 DHWtodate:Timelagtodate  -2.1840  0.0290 DHWtodate:tmean
> 2.6613  0.0078
> 
>                             ci.lb    ci.ub intrcpt                   8.4948
> 20.3268  *** DHWtodate                -1.0617  -0.2028   ** tmean
> -0.7898  -0.3576  *** DHWtodate:Timelagtodate  -0.0001  -0.0000    *
> DHWtodate:tmean           0.0060   0.0395   **
> 
> ---
> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
> 
> We report the fsn for the model without coefficients, as well as the AICc for the top models with coefficients (within 2AICc units of the best model).
> 
> Our reviewer has asked for a measure of model performance:
> 
> "I don't see a clear measure of model performance beyond AICc. This is concerning as most readers will be looking for an R2, deviance explained or something similar, particularly from linear models. Were the fits poor?
> Either way you need to report these values, otherwise it's hard for the reader to judge how much we should be interpreting the models."
> 
> I understand that it is not possible to calculate standard R2 values from linear mixed effects models, and that pseudo-r2s are potentially questionable (see Robert Long's paragraph here https://stats.stackexchange.com/questions/111150/calculating-r2-in-mixed-mod
> els-using-nakagawa-schielzeths-2013-r2glmm-me), but that conditional-r2 and
> marginal-r2 (Nakagawa & Schielzeth 2012) are potential candidates for demonstrating model fit. I see that these metrics are implemented in MuMIn (https://ecologyforacrowdedplanet.wordpress.com/2013/08/27/r-squared-in-mixe
> d-models-the-easy-way/, r.squaredGLMM(x)
> https://cran.r-project.org/web/packages/MuMIn/MuMIn.pdf) and in piecewiseSEM (sem.model.fits https://jonlefcheck.net/2013/03/13/r2-for-linear-mixed-effects-models/),
> however neither of  these packages/functions can utilize a rma (or rma.mv) object. I have also looked at the original equations from Nakagawa and Schielzeth, but am having trouble understanding how they and the output of our models fit together, given that only one metric of variance is supplied in the output (sigma^2).
> 
> Can anyone point me in the right direction of either a) why it isn't possible to calculate conditional & marginal-r2 for an rma.mv object, b) how to calculate conditional & marginal-r2 for our model, or c) if there is a better metric to demonstrate model fit in this situation?
> 
> Please let me know if I have misunderstood anything, or if I can provide any additional information that would assist with discussing my question.
> 
> Thanks in advance!
> 
> All the best,
> 
> Danielle
> 
> --
> Danielle Claar
> PhD Candidate - University of Victoria
> PO Box 1700 STN CSC
> Victoria, BC, V8W 2Y2 Canada
> dclaar at uvic.ca
> danielleclaar.weebly.com
> 
> _______________________________________________
> R-sig-meta-analysis mailing list
> R-sig-meta-analysis at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
> 
> ---
> This email has been checked for viruses by AVG.
> http://www.avg.com
> 
> 

-- 
Michael
http://www.dewey.myzen.co.uk/home.html



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