[R-meta] Vairance-Covariance Matrix with Shared Control Group
Absolutely amazing, Wolfgang. Thanks! One quick question: if I were to meta-analyze log odds ratios (instead of logRRs), should I calculate the weights with output from "escalc(measure=?PLO?,?)?, instead of ?PLN? as you did? Arthur M. Albuquerque Medical student Universidade Federal do Rio de Janeiro, Brazil
On Mar 3, 2022, 5:43 AM -0300, Viechtbauer, Wolfgang (SP) <wolfgang.viechtbauer at maastrichtuniversity.nl>, wrote:
Hi Arthur, 1) Yes, when you specify w1 and w2, then these will be used to compute a more accurate value of the correlation that is induced by the shared control group/condition. 2) Yes, using the size of the two groups/conditions is pretty good. The most accurate thing to do is to use the weights corresponding to the arm-based outcomes. Let me illustrate this. ############################################################ # say you have these data; this is the same data as used here: # https://www.metafor-project.org/doku.php/analyses:gleser2009#dichotomous_response_variable dat <- data.frame(study=c(1,1,2,3,3,3), trt=c(1,2,1,1,2,3), ctrl=0, ai=c( 40, 40, 10,150,150,150), n1i=c(1000,1000,200,2000,2000,2000), ci=c(100,150, 15, 40, 80, 50), n2i=c(4000,4000,400,1000,1000,1000)) dat$pti <- with(dat, ci / n2i) dat$pci <- with(dat, ai / n1i) dat <- escalc(measure="RR", ai=ai, ci=ci, n1i=n1i, n2i=n2i, data=dat) dat # note: ai and n1i are the data for the control group, ci and n2i for the treatment groups # as discussed by Gleser & Olkin (2009), we can construct the var-cov matrix of the log # risk ratios as follows calc.v <- function(x) { v <- matrix((1-x$pci[1])/(x$n1i[1]*x$pci[1]), nrow=nrow(x), ncol=nrow(x)) diag(v) <- x$vi v } V <- bldiag(lapply(split(dat, dat$study), calc.v)) cov2cor(V) # examing the correlation matrix # now let's use vcalc() for this V <- vcalc(vi, cluster=study, grp1=ctrl, grp2=trt, data=dat) cov2cor(V) # not quite right since we get 0.5 for the correlations # now let's use the group sizes as weights V <- vcalc(vi, cluster=study, grp1=ctrl, grp2=trt, w1=n1i, w2=n2i, data=dat) cov2cor(V) # closer (and good enough I would say) # compute the log proportions for the control and treatment groups dat <- escalc(measure="PLN", xi=ai, ni=n1i, data=dat, var.names=c("yc","vc")) dat <- escalc(measure="PLN", xi=ci, ni=n2i, data=dat, var.names=c("yt","vt")) dat # use the weights (inverse sampling variances) of these arm-based outcomes V <- vcalc(vi, cluster=study, grp1=ctrl, grp2=trt, w1=1/vc, w2=1/vt, data=dat) cov2cor(V) # exactly the same as what we with calc.v() above ############################################################ Using the group sizes is probably good enough in most cases, I would say. As for 'rho' - this has nothing to do with the shared groups. The rho in that last example (dat.knapp2017) is specified for studies where the same groups were examined under varying conditions. I hope this answers your questions. Best, Wolfgang
-----Original Message----- From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces at r-project.org] On Behalf Of Arthur Albuquerque Sent: Thursday, 03 March, 2022 4:14 To: r-sig-meta-analysis at r-project.org Subject: [R-meta] Vairance-Covariance Matrix with Shared Control Group Hi all, I have a couple of questions about using metafor::vcalc() to create a variance- covariance matrix when many effect sizes reflect the difference between two conditions and there is a shared control group. ?According to its documentation (https://wviechtb.github.io/metafor/reference/vcalc.html), in "Details", topic 5, "The degree of correlation between two contrast-type effect sizes that is induced by the use of a shared condition is a function of the size of the groups involved in the computation of the two effect sizes... By default, the group sizes (weights) are assumed to be identical across conditions, which implies a correlation of 0.5. If the group sizes (weights) are known, they can be specified via arguments w1 and w2.". ?I would like to confirm: ?1 - Is the actual correlation automatically calculated when arguments 'w1' and 'w2' are specified? ?2 - Can one use the number of subjects in each condition for 'w1' and 'w2'? While looking for these answers, I saw the last example in the documentation with metadat::dat.knapp2017. If I understood correctly, the correlation is pre- specified through 'rho' and, at the same time, 'w1' and 'w2' are also specified: ?V <- vcalc(vi, cluster=study, grp1=group1, grp2=group2, w1=n_sz, w2=n_hc, ?obs=task.diff, rho=R, data=dat) 'n_sz' and 'n_hc' correspond to the numbers of patients in each group, which means that the answer to my second question above would be a "Yes". Is that it? About my first question, if the answer is also "Yes", why were 'w1', 'w2', and 'rho? specified at the same time? Instead, if the answer is "No", what am I missing here? Thank you in advance! Arthur M. Albuquerque Medical student Universidade Federal do Rio de Janeiro, Brazil