[R-meta] Covariance-variance matrix when studies share multiple treatment x control comparison
James Pustejovsky
jepu@to @end|ng |rom gm@||@com
Wed Oct 16 16:28:51 CEST 2019
Forgot to add:
I think it's also reasonable to still include the contour-enhanced options
that depict significance levels, even with the modified measure of
precision. The reason is that these contours actually *do* correspond to
the significance levels for the test of (unstandardized) mean differences,
which is exactly the test that would be reported in a primary study and
might be used as the basis for judging whether a study/result should be
published.
On Wed, Oct 16, 2019 at 9:25 AM James Pustejovsky <jepusto using gmail.com> wrote:
> Ju,
>
> Yes, I agree that it would be best to create a funnel plot of Hedges' d
> estimates versus the modified measure of precision. You can do this using
> the basic funnel plot function where you feed in the vector of effect sizes
> and vector of modified precisions:
> funnel(x = MHF$hedged, sei = precision.2, <...additional formatting
> options...>)
>
> James
>
> On Mon, Oct 14, 2019 at 5:48 PM Ju Lee <juhyung2 using stanford.edu> wrote:
>
>> Dear Wolfgang, James,
>>
>> Thank you for all your helpful suggestions and feedback.
>> Following up on previous posts, I am wondering what would be the best way
>> to visualize the funnel plot when I am using modified egger test suggested
>> by Pustejovsky and Rodgers (2018).
>>
>> Based on our previous conversation, I am wondering if I should plot
>> modified precision sqrt(1 / n1+ 1 / n2) against Hedges' d (x axis),
>> instead of SE or inverse SE against residuals....
>>
>> Is there a way to do this through funnel() or funnel.rma() function?
>> Below is my current code with egger.full being the model being run with
>> Hedges' d and "sqrt(1 / n1+ 1 / n2)" as modified precision.
>>
>> Would specifying yaxis as "yaxis="sqrtninv" equivalent to this approach?
>> or maybe I need an alternative approach here?
>>
>> Thank you very much,
>> Best
>> JU
>>
>> prec.<-function(CN,TN){
>> pr<-sqrt((1 / CN) + (1/TN))
>> return(pr)
>> }
>> precision.2<-prec.(MHF$n.t, MHF$n.c)
>> head(precision.2)
>> egger.full<-rma.mv(hedged~precision.2, CV, data=MHF, random = list(~ 1 |
>> Study, ~1|Id))
>> egger.full
>>
>> funnel(egger.full, level=c(90, 95, 99),
>> shade=c("white", "gray", "gray40"),back="white",
>> yaxis=" ", xlab="", ylab="",
>> digits=c(2,2))
>>
>>
>> ------------------------------
>> *From:* Viechtbauer, Wolfgang (SP) <
>> wolfgang.viechtbauer using maastrichtuniversity.nl>
>> *Sent:* Friday, September 27, 2019 8:27 AM
>> *To:* Ju Lee <juhyung2 using stanford.edu>; James Pustejovsky <
>> jepusto using gmail.com>
>> *Cc:* r-sig-meta-analysis using r-project.org <
>> r-sig-meta-analysis using r-project.org>
>> *Subject:* RE: Covariance-variance matrix when studies share multiple
>> treatment x control comparison
>>
>> You are still using 'residuals' as the outcome. Don't do that. Just use
>> the Hedges' g values as the outcome. Also, you should specify the correct V
>> matrix (I think you called it VCV in an earlier post). So, for example:
>>
>> rma.mv(hedged ~ precision.2, VCV, data=MHF, random = list(~ 1 | Study,
>> ~1 | Id), subset=(Spatial.scale.2=="Fragmentation scale"))
>>
>> I haven't looked at your other post in detail, but 'random = ~ factor(x)
>> | Study/Id' doesn't actually work (at least not in the way you think it
>> does). Please update your metafor installation to get an error that will
>> inform you of this. Instead, random = list(~factor(x)|Study, ~factor(x)|Id)
>> is indeed the correct way to specify two '~ inner | outer' terms.
>>
>> Best,
>> Wolfgang
>>
>> -----Original Message-----
>> From: Ju Lee [mailto:juhyung2 using stanford.edu <juhyung2 using stanford.edu>]
>> Sent: Friday, 27 September, 2019 16:46
>> To: James Pustejovsky
>> Cc: Viechtbauer, Wolfgang (SP); r-sig-meta-analysis using r-project.org
>> Subject: Re: Covariance-variance matrix when studies share multiple
>> treatment x control comparison
>>
>> Dear James, Wolfgang,
>>
>> Thank you very much for this information.
>> I have one question extending from this is: While I run my main mixed
>> modes always using var-covar. matrix (to account for shared study groups
>> within each study),
>> it is acceptable that my egger-like regression does not incorporate this
>> structure, but rather just use sqrt(1 / n1 + 1 / n2) as precision (instead
>> of sqrt(diag(v.c.matrix)) like Wolfgang suggested as one possibility) and
>> use p-value for precision term (precision.2 which is p=0.2382) to determine
>> the asymmetry?
>>
>> prec.<-function(CN,TN){
>> pr<-sqrt((1 / CN) + (1/TN))
>> return(pr)
>> }
>> precision.2<-prec.(MHF$n.t, MHF$n.c)
>> > egger.pr2.frag<-rma.mv(residuals~precision.2,var,data=MHF,random
>> =list( ~ 1 | Study, ~1|Id), subset=(Spatial.scale.2=="Fragmentation
>> scale"))
>> > egger.pr2.frag
>>
>> Multivariate Meta-Analysis Model (k = 285; method: REML)
>> Variance Components:
>> estim sqrt nlvls fixed factor
>> sigma^2.1 0.4255 0.6523 73 no Study
>> sigma^2.2 0.3130 0.5595 285 no Id
>> Test for Residual Heterogeneity:
>> QE(df = 283) = 1041.1007, p-val < .0001
>> Test of Moderators (coefficient(s) 2):
>> QM(df = 1) = 1.3909, p-val = 0.2382
>>
>> Model Results:
>> estimate se zval pval ci.lb ci.ub
>> intrcpt 0.0529 0.1617 0.3274 0.7433 -0.2640 0.3699
>> precision.2 -0.0668 0.0567 -1.1794 0.2382 -0.1779 0.0442
>> ---
>> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
>>
>>
>> Thank you very much, both of you.
>> Best,
>> JU
>>
>> p.s. Wolfgang, I think I figured out what went wrong with how I specified
>> my random effects in my previous e-mail. Specifying it
>> as random=list(~factor(x)|Study, ~factor(x)|Id) instead of random=
>> ~factor(x)|Study/Id generates results that makes sense to me now. Please
>> let me know if this is correct way I should be coding.
>>
>
[[alternative HTML version deleted]]
More information about the R-sig-meta-analysis
mailing list