[R-meta] Inverse weighting after estimation of VCOV

pedros@c m@iii@g oii st@ii@u@i-m@rburg@de pedros@c m@iii@g oii st@ii@u@i-m@rburg@de
Mon May 27 15:54:08 CEST 2024


Hi James,

apologies, my question was not  seasoned enough.

I have a dataframe with 16 studies, all of which provide some odds 
ratios for hospitalisation. 8 studies are from the same publication but 
on different countries. To me there is still reason to believe they 
“share more variance” than the rest. Besides, I want to weigh the total 
number  of subjects from each of the studies. To make it a bit more 
complex, we have digged out the miner of hospital beds and long term 
beds for every country, both of which we consider potential moderators. 
I ran the random effects model

res_metaRE <- rma(yi, vi,
  random = ~ 1 | number, mods = ~ hospitalbeds +
ltcbeds, verbose=TRUE, data=df_complete)

to which weights(res_metaRE) provides accurate results. If I try to 
estimate the VCOV matrix, the results show correct diagonal values, that 
is identical to df_conplete$vi. But sticking the resulting V_mat

V_mat <- vcalc(vi=vi, cluster=shared_variance, data=df_complete, rho=.7)

to rma.mv provides results that are too high but especially the studies 
with lower number of subjects are higher weighted. I am assuming that 
it’s just somehow inverted but I cannot understand if I’m missing 
something or if there is some other mistake in the way I’m estimating 
the VCOV. Number is just the study id.

I’m not entirely sure I understand your point with the subsection of the 
matrix.

Thanks for your help!
Best,
David

P.S.: Here are the relevant parts of df_complete

structure(list(number = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
12, 13, 14, 15), author = c("Aamodt", "Ceylan", "Krause", "Kumar",
"Moens, Belgium", "Moens, France"Moens, Italy", "Moens, Canada",
"Moens, Mexiko", "Moens, New Zeeland", "Moens, Spain", "Moens, South 
Corea",
"Moens, Czech Rep.", "Moens, Hungary", "Moens, USA"), year = c(2023,
2022, 2021, 2021, 2015, 2015, 2015, 2015, 2015, 2015, 2015, 2015,
2015, 2015, 2015), n_ges = c(53279, 27, 40, 346141, 837, 4599,
4034, 1381, 1062, 202, 352, 1565, 92, 241, 20065), OR = c(1.06,
1.43, 8.25, 1.454, 2.3, 1.5, 1.4, 1.7, 0.95, 1.97, 1.09, 0.95,
0.97, 1.44, 1.4), hospitalbeds = c(2.77, 3.02, 7.76, 2.77, 5.47,
5.65, 3.12, 2.58, 1, 2.57, 2.96, 12.77, 6.66, 6.79, 2.77), ltcbeds = 
c(32.3,
9.5, 54.2, 53.9, 66.8, 47.4, 21.3, 46.7, 0, 50.4, 43.4, 25, 34.9,
42.6, 28.9), p_values = c(0.106809128205467, 0.706331045003814,
0.0281267337718951, 0, 2.43772276381116e-05, 2.76746355676653e-22,
1.01260208850919e-05, 1.19251123951374e-10, 0.772759462747246,
0.0741077696800058, 0.74088983860122, 0.68164335922065, 1, 
0.183303852299051,
3.20176730771634e-26), shared_variance = c(0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1), yi = structure(c(0.0582689081239758,
0.357674444271816, 2.11021320034659, 0.374318379111328, 0.832909122935104,
0.405465108108164, 0.336472236621213, 0.53062825106217, 
-0.0512932943875506,
0.678033542749897, 0.0861776962410524, -0.0512932943875506, 
-0.0304592074847086,
0.364643113587909, 0.336472236621213), ni = c(53279, 27, 40,
346141, 837, 4599, 4034, 1381, 1062, 202, 352, 1565, 92, 241,
20065), measure = "GEN"), vi = c(0.000835840725678602, 0.638632983584221,
0.604067037193667, 0.000435509388232691, 0.0467214213223696,
0.00468347897652763, 0.00538603813506437, 0.0132951153208062,
0.0214123920152818, 0.142112789690683, 0.0489441998392354, 
0.0138688993962097,
0.186242249276727, 0.0702159732616764, 0.00133268716433697)), row.names 
= c(NA,
-15L), class = c("escalc", "data.frame"), yi.names = "yi", vi.names = 
"vi", digits = c(est = 4,
se = 4, test = 4, pval = 4, ci = 4, var = 4, sevar = 4, fit = 4,
het = 4))

Am 24.05.2024 um 19:06 schrieb James Pustejovsky:
> Hi David,
>
> I don't entirely understand the models that you're looking at, so 
> clarifying the following would help in getting good feedback:
> * What is the variable `shared_variance` used in the vcalc call?
> * What is the variable `number` used in the random effects argument of 
> rma.mv <http://rma.mv>?
> * How are these variables related?
>
> Additionally, it would be good to check that the vcov matrix created 
> by vcalc() is as you intend it to be. Could you pull out the blocks of 
> this matrix for a few studies and just verify that they give you 
> covariance matrices with a correlation of 0.7? I mean something like:
> vcov_study_k <- V_mat[i:j, i:j]
> cov2cor(vcov_study_k)
> where the indices i:j are the rows in your data corresponding to a 
> given study k.
>
> James
>
> On Fri, May 24, 2024 at 10:00 AM David Pedrosa via R-sig-meta-analysis 
> <r-sig-meta-analysis using r-project.org> wrote:
>
>     Dear all,
>
>     I have a basic question about the output of my (gu)estimation of the
>     variance-covariance matrix. I have extracted results from very
>     heterogeneous studies with OR as effect size (sample sizes between 20
>     and 300,000). Since some of the results come from the same study, I
>     decided to try to use the VCOV as an input and estimated values
>     according to the following formula
>
>     V_mat  <- vcalc(vi=vi, cluster=shared_variance, data=df_complete,
>     rho=.7)
>     res_meta     <- rma.mv <http://rma.mv>(yi, vi, V=V_mat,
>                              random = ~ 1 | number, mods = ~
>     hospitalbeds +
>     ltcbeds, verbose=TRUE, data=df_complete)
>
>
>     Interestingly, in this case the weighting is reversed, so that
>     most of
>     the weight is given to studies with the smallest sample size;
>     something
>     that does not happen when using this formula:
>
>     res_meta     <- rma(yi, vi,
>                              random = ~ 1 | number, mods = ~
>     hospitalbeds +
>     ltcbeds, verbose=TRUE, data=df_complete)
>
>     I have tried to understand what is going on, but I am at kind of
>     lost.
>     Could someone please give me some advice?
>
>     Thanks in advance,
>
>     David
>
>     _______________________________________________
>     R-sig-meta-analysis mailing list @ R-sig-meta-analysis using r-project.org
>     To manage your subscription to this mailing list, go to:
>     https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
>
-- 
Uni Marburg Siegel 
<https://www.uni-marburg.de/de/fb20/bereiche/kopfz/neurologie/forschung/agbun> 
	
	
	
	
Prof. Dr. David Pedrosa
Leitender Oberarzt der Klinik für Neurologie,
Leiter der Sektion Bewegungsstörungen und Neuromodulation, 
Universitätsklinikum Gießen und Marburg
Tel. (+49) 6421-58 65299 Fax. (+49) 6421-58 67055
Address. Baldingerstr., 35043 Marburg
Web. https://www.ukgm.de/ugm_2/deu/umr_neu/index.html
Web. 
https://www.uni-marburg.de/de/fb20/bereiche/kopfz/neurologie/forschung/agbun 



	[[alternative HTML version deleted]]



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