[R-meta] R-sig-meta-analysis Digest, Vol 89, Issue 13
Dear Wolfgang, Many thanks for your advice and sorry about the delay. I added my answers below! Most things are sorted and clear! However, I did not follow your reply about the back-transformation of the directly estimated co/variance for fixed effects, i.e. from the rZ to the r the level, using the deltamethod. I can see how you derive the SE for the fixed effects at the back-transformed level with deltamethod, but not the variance and covariance. Could you please help here? Many thanks, Beate Beate St Pourcain, PhD Senior Investigator & Group Leader Room A207 Max Planck Institute for Psycholinguistics | Wundtlaan 1 | 6525 XD Nijmegen | The Netherlands @bstpourcain Tel:?+31 24 3521964 Fax:?+31 24 3521213 ORCID: https://orcid.org/0000-0002-4680-3517 Web: https://www.mpi.nl/departments/language-and-genetics/projects/population-variation-and-human-communication/ Further affiliations with: MRC Integrative Epidemiology Unit | University of Bristol | UK Donders Institute for Brain, Cognition and Behaviour | Radboud University | The Netherlands My working hours may not be your working hours. Please do not feel obligated to reply outside of your normal working schedule. -----Original Message----- From: Viechtbauer, Wolfgang (NP) <wolfgang.viechtbauer at maastrichtuniversity.nl> Sent: Monday, November 11, 2024 4:13 PM To: St Pourcain, Beate <Beate.StPourcain at mpi.nl>; R Special Interest Group for Meta-Analysis <r-sig-meta-analysis at r-project.org> Subject: RE: R-sig-meta-analysis Digest, Vol 89, Issue 13 Dear Beate, Some brief comments from my side to your questions below. Best, Wolfgang
-----Original Message----- From: St Pourcain, Beate <Beate.StPourcain at mpi.nl> Sent: Tuesday, November 5, 2024 19:16 To: Viechtbauer, Wolfgang (NP) <wolfgang.viechtbauer at maastrichtuniversity.nl>; R Special Interest Group for Meta-Analysis <r-sig-meta-analysis at r-project.org> Subject: RE: R-sig-meta-analysis Digest, Vol 89, Issue 13 Dear Wolfgang, We have taken the project a few steps further now following vanhouwelingen2002. Thanks for all your advice! However, bivariate models have of course a slightly different structure compared to nested models that we usually use and we have transformations and multiple random effects. Thus, we had a few questions. We have a model like this: Study_ID: Unique ID for each independent cohort ESID_code: Unique ID for study-specific assessment coded as nested within each study (following Austerberry) MZDZ: MZ coded 1, DZ coded 0 zi and vzi: Z transformed correlations and their variance model0r.mlcon <- rma.mv( zi, vzi, random = list(~ MZDZ_factor | Study_ID, ~ MZDZ_factor | ESID_code), struct="UN", data = data, mods = ~ 0 + MZDZ_factor, method = "ML", tdist = TRUE, cvvc="varcov", control=list(nearpd=TRUE)) 1) We changed now from REML to ML to allow for model building with fixed effects. Is there any major drawback?
Unless your sample sizes are small, the difference between ML and REML should be negligible. For model selection including fixed effects, ML is the sensible choice. R: Perfect. Thank you!
2) What would be the best way to estimate I2 for each MZ and DZ group using Z and the raw correlations? (We have an idea how to do this with nested models but not for bivariate models).
Maybe this is useful: https://www.metafor-project.org/doku.php/tips:i2_multilevel_multivariate#multivariate_models R: Very helpful, thank you!
Also does it make sense to estimate heterogeneity in rZ as: tau_het<-round(model0r.mlcon$tau2[1] + model0r.mlcon$tau2[2] - 2*model0r.mlcon$rho*sqrt(model0r.mlcon$tau2[1]*model0r.mlcon$tau2[2]), 3) gamma_het<-round(model0r.mlcon$gamma2[1] + model0r.mlcon$gamma2[2] - 2*model0r.mlcon$phi*sqrt(model0r.mlcon$gamma2[1]*model0r.ml$gamma2[2]) , 3) res_het<-tau_study + gamma_type
I can't answer that because you would first have to define what you mean by 'residual heterogeneity'. R: We aimed to estimate the heterogeneity in rZ-scores, analogous to the bivariate example approach (but now with two random effects) https://www.metafor-project.org/doku.php/analyses:vanhouwelingen2002
3) We can estimate the SE for the raw scores rDZse<- deltamethod(~ (exp(2*x1) - 1) / (exp(2*x1) + 1), coef(model0r.mlcon), vcov(model0r.mlcon)) rMZse<- deltamethod(~ (exp(2*x2) - 1) / (exp(2*x2) + 1), coef(model0r.mlcon), vcov(model0r.mlcon)) Is there an option to backtransform vcov(model0r.mlcon) from the modelled rZ to raw r scores? Especially we are interested in the covariance for raw r to derive a correlation between raw rMZ and rDZ, including SE.
The deltamethod() function from metafor can give you the full back-transformed var-cov matrix. R: Sorry for being slow here, I do not know how to proceed. The variance covariance matrix is directly estimated and there is not transformation involved. Could you please advise
4) For adding further covariates as fixed effects, we were wondering how to
best predict manually rMZ and rDZ for different levels of the
covariate e.g. age
model.age.r.mlcon <- rma.mv(
zi,
vzi,
random = list(~ MZDZ_factor | Study_ID, ~ MZDZ_factor | ESID_code),
struct="UN",
data = data,
mods = ~ 0 + MZDZ_factor + MZDZ_factor:I(Age -24), #age centered at 24 years
method = "ML",
tdist = TRUE)
model.age.r.mlcon snippet
estimate se tval df pval
MZDZ_factor0 0.7264 0.1201 7.7141 78 <.0001
MZDZ_factor1 1.3193 0.2464 6.1661 78 <.0001
MZDZ_factor0:I(Age - 24) 0.0160 0.0040 4.0432 78 0.0001
MZDZ_factor1:I(Age - 24) 0.0276 0.0038 7.2905 78 <.0001
We could now predict the twin correlations at different ages using the
predict function (and did this). However, this does not help with the
deltamethod. Is there a more elegant way to estimate the SE?
e.g.
age.20 <- -4
rDZ_20 <-(exp(2*(model.age.r.mlcon$b[1] +
model.age.r.mlcon$b[3]*age.20)) - 1) / (exp(2*(model.age.r.mlcon$b[1]
+ model.age.r.mlcon$b[3]*age.20)) + 1)
rMZ_20 <-(exp(2*(model.age.r.mlcon$b[2] +
model.age.r.mlcon$b[4]*age.20)) - 1) / (exp(2*(model.age.r.mlcon$b[2]
+ model.age.r.mlcon$b[4]*age.20)) + 1)
rDZ_20.se <-deltamethod(~(exp(2*(x1 + x3*age.20)) - 1) / (exp(2*(x1 +
x3*age.20)) + 1), coef(model.age.r.mlcon), vcov(model.age.r.mlcon))
rMZ_20.se <-deltamethod(~(exp(2*(x2 + x4*age.20)) - 1) / (exp(2*(x2 +
x4*age.20)) + 1), coef(model.age.r.mlcon), vcov(model.age.r.mlcon))
I don't understand the question. What do you mean by 'more elegant'? R: No worries, we will sort this out. I just meant a "shorter" way, but this is not a problem.
Many thanks again for all your help, Beate Beate St Pourcain, PhD Senior Investigator & Group Leader Room A207 Max Planck Institute for Psycholinguistics | Wundtlaan 1 | 6525 XD Nijmegen | The Netherlands @bstpourcain Tel: +31 24 3521964 Fax: +31 24 3521213 ORCID: https://orcid.org/0000-0002-4680-3517 Web: https://www.mpi.nl/departments/language-and-genetics/projects/populati on- variation-and-human-communication/ Further affiliations with: MRC Integrative Epidemiology Unit | University of Bristol | UK Donders Institute for Brain, Cognition and Behaviour | Radboud University | The Netherlands My working hours may not be your working hours. Please do not feel obligated to reply outside of your normal working schedule. -----Original Message----- From: Viechtbauer, Wolfgang (NP) <wolfgang.viechtbauer at maastrichtuniversity.nl> Sent: Thursday, October 31, 2024 1:22 PM To: R Special Interest Group for Meta-Analysis <r-sig-meta-analysis at r- project.org> Cc: St Pourcain, Beate <Beate.StPourcain at mpi.nl> Subject: RE: R-sig-meta-analysis Digest, Vol 89, Issue 13 Hi Beate, The simulations I mentioned are not published, but Fisher (1925) directly states this as well, so you can stick to that reference. By the way, I just added a deltamethod() function to the development version of the metafor package. So, coming back to this model: model <- rma.mv( zi, vzi, random = list(~ MZDZ_factor | Study_ID, ~ MZDZ_factor | ESID), struct="UN", data = data, mods = ~ 0 + MZDZ_factor, method = "REML", tdist = TRUE) you can now just do: deltamethod(model, fun=function(b1,b2) 2*(transf.ztor(b2) - transf.ztor(b1))) and you will directly get the estimate of h^2 and the corresponding SE and CI. Best, Wolfgang
-----Original Message-----
From: R-sig-meta-analysis
<r-sig-meta-analysis-bounces at r-project.org>
On Behalf Of St Pourcain, Beate via R-sig-meta-analysis
Sent: Sunday, October 20, 2024 21:25
To: r-sig-meta-analysis at r-project.org
Cc: St Pourcain, Beate <Beate.StPourcain at mpi.nl>
Subject: Re: [R-meta] R-sig-meta-analysis Digest, Vol 89, Issue 13
Hi Michael,
Thanks for pointing this out! The Fisher reference will certainly do.
I had hoped to get the reference for "simulation studies I have done
confirm this", but that's an added bonus.
Have a nice evening,
Beate
Date: Sat, 19 Oct 2024 15:16:22 +0100
From: Michael Dewey <lists at dewey.myzen.co.uk>
To: R Special Interest Group for Meta-Analysis
<r-sig-meta-analysis at r-project.org>, "Viechtbauer, Wolfgang (NP)"
<wolfgang.viechtbauer at maastrichtuniversity.nl>
Cc: "St Pourcain, Beate" <Beate.StPourcain at mpi.nl>
Subject: Re: [R-meta] Meta-analysis of intra class correlation
coefficients
Dear Beate
Somewhere buried in this thread Wolfgang said
==========================
This goes back to Fisher (1925; Statistical methods for research workers).
In your application (where you dealing with pairs), n is the number
of pairs and m is 2. In that case, you can treat ICC(1) values like
regular correlations. However, if you do apply the r-to-z
transformation, then Fisher suggests to use 1/(n-3/2) as the
variance (instead of 1/(n-3) as we typically use for r-to-z
transformed Pearson product-moment correlation coefficients) and
simulation studies I have done
confirm this.
====================== Michael On 18/10/2024 19:43, St Pourcain, Beate via R-sig-meta-analysis wrote:
Dear Wolfgang, No worries, I am aware of the difference and fully agree with your comments. I
was just surprised by the similarity in estimates and had hoped for an approximation that might provide a quick workaround in the current situation. Thanks again for all your help, we will take it from here.
In case you would have (at some point) a reference for the variance of Z
scores for ICCs as
1/( n-3/2) that would be great, no rush! Enjoy your weekend, Beate