-----Original Message-----
From: R-sig-meta-analysis [mailto:r-sig-meta-analysis-bounces at r-project.org] On
Behalf Of James Pustejovsky via R-sig-meta-analysis
Sent: Sunday, 05 February, 2023 22:19
To: R Special Interest Group for Meta-Analysis
Cc: James Pustejovsky
Subject: Re: [R-meta] A potential addition to metafor random-effect structures
Interesting question, Reza. I've also wondered about using factor-analytic
vcov structures like this. I think they could be potentially quite useful.
As Reza noted, one application could be for multivariate meta-analysis
(multivariate in the strict sense
<https://www.jepusto.com/what-does-multivariate-mean/>), where each study
could in principle measure effect sizes on a set of p outcomes, but in
practice not every study reports all outcomes. With complete reporting for
a large number of studies, using unstructured random effects variances
works, but with missingness and/or a limited number of studies, struct =
"UN" can be hard to fit. In my experience, the solutions end up returning
correlations at the boundaries of the parameter space (e.g., r = 0.999 or r
= -0.999 for a bivariate random effects model, which is equivalent to a
one-factor model). For a p-dimensional structure, a d-dimensional factor
model has sum(p + 1 - 1:d) parameters. So these structures might be useful
just as an atheoretical model-building tool, which bridges between the
low-dimensional structures like CS (2 parameters) or HCS (p + 1 parameters)
and the totally unconstrained UN structure (p x (p + 1) / 2 parameters).
I could also see applications where such models have a meaningful
theoretical interpretation. For example, perhaps there are p outcomes,
which vary in their degree of sensitivity to intervention. Studies might
vary along a single latent factor of intervention potency, so strong
interventions have relatively large effect sizes for all outcomes, weak
interventions have relatively small effects for all outcomes. The random
effect for outcome j in study i might then be described by u_ij = L_j X
f_i, where f_i is the latent factor of intervention potency and L_j is the
sensitivity to intervention of outcome j. I could also imagine extending
this further to two or more factors---maybe intervention potency and
population risk level, with u_ij = L_1j X f_1j + L_2j x f_2j?
James
On Sun, Feb 5, 2023 at 2:31 PM Reza Norouzian via R-sig-meta-analysis <
r-sig-meta-analysis at r-project.org> wrote:
Hi Wolfgang,
Thank you for your interest. Yes, potentially we can lower G's rank but it
may no longer be invertible.
I haven't looked at the guts of glmmTMB but obviously they use TMB in the
back end for higher speed for larger models.
The other thing about rr() in glmmTMB is that my quick search didn't return
any simulation studies testing how approximate this approximation can be,
especially given that in practice *d* is pretty much determined by
consulting the information-criteria-type model fit indices.
But overall, there is some potential for this modification to help users
test multivariate-multilevel models currently difficult or nearly
impossible to fit.
I've not been lucky enough to come across a large number of such datasets,
but in the few cases where this was the case, I had to drop a few of the
assumptions I had in mind which eventually led me to finding about the
rank-reduced structure recently added to the glmmTMB package.
I may also be looking to see if I can have such models actually fit using
glmmTMB, if it allows flexibility in its `dispformula=` and `control=`
arguments.
Kind regards,
Reza
On Sun, Feb 5, 2023, 7:29 AM Viechtbauer, Wolfgang (NP) via
R-sig-meta-analysis <r-sig-meta-analysis at r-project.org> wrote:
I have been doing a bit more thinking about this (can't help myself).
One might consider using one of the various decompositions (e.g., SVD) to
accomplish this. In fact:
https://en.wikipedia.org/wiki/Low-rank_approximation
Something even simpler might be to use the Cholesky decomposition, that
is, if G is a p*p symmetric positive-definite var-cov matrix, then
t(chol(G)) %*% chol(G) == G. So, we could use t(chol(G[1:r,])) %*%
chol(G[1:r,]) as a lower rank approximation to G, with r < p. In fact,
struct="UN", rma.mv() uses the Cholesky decomposition anyway for
that G is positive-definite. So it might be possible to implement this
without too much difficulty. Problems might creep in though since
t(chol(G[1:r,])) %*% chol(G[1:r,]) is no longer invertible (since it is
construction no longer of full rank), so one might need to use a
generalized inverse, but whether this is actually an issue or not depends
on whether one needs that inverse.
Best,
Wolfgang