Hi All, Page 13 of *THIS ARTICLE <https://cran.r-project.org/web/packages/robumeta/vignettes/robumetaVignette.pdf>* (*top of the page*) recommends that if a *continuous moderator *varies both within and across studies in a meta-analysis, a strategy is to break that moderator down into two moderators by: *(a)* taking the mean of each study (between-cluster effect), *(b)* centering the predictor within each study (within-cluster effect). BUT what if my original moderator that varies both within and across studies is a *"categorical" *moderator? I appreciate an R demonstration of the strategy recommended. Thanks, Simon
[R-meta] "Categorical" moderator varying within and between studies
5 messages · Simon Harmel, James Pustejovsky, Gerta Ruecker
Hi Simon,
The same strategy can be followed by using dummy variables for each unique
level of a categorical moderator. The idea would be to 1) create dummy
variables for each category, 2) calculate the study-level means of the
dummy variables (between-cluster predictors), and 3) calculate the
group-mean centered dummy variables (within-cluster predictors). Just like
if you're working with regular categorical predictors, you'll have to pick
one reference level to omit when using these sets of predictors.
Here is an example of how to carry out such calculations in R, using the
fastDummies package along with a bit of dplyr:
library(dplyr)
library(fastDummies)
library(robumeta)
data("oswald2013")
oswald_centered <-
oswald2013 %>%
# make dummy variables
mutate(
Scoring = recode(Scoring, "Difference Score" = "Difference", "Relative
Rating" = "Relative")
) %>%
dummy_columns(select_columns = "Scoring") %>%
# centering by study
group_by(Study) %>%
mutate_at(vars(starts_with("Scoring_")),
list(wthn = ~ . - mean(.), btw = ~ mean(.))) %>%
# calculate Fisher Z and variance
mutate(
Z = atanh(R),
V = 1 / (N - 3)
)
# Use the predictors in a meta-regression model
# with Scoring = Absolute as the omitted category
robu(Z ~ Scoring_Difference_wthn + Scoring_Relative_wthn +
Scoring_Difference_btw + Scoring_Relative_btw, data = oswald_centered,
studynum = Study, var.eff.size = V)
Kind Regards,
James
On Tue, Jun 2, 2020 at 6:49 PM Simon Harmel <sim.harmel at gmail.com> wrote:
Hi All, Page 13 of *THIS ARTICLE < https://cran.r-project.org/web/packages/robumeta/vignettes/robumetaVignette.pdf
*
(*top of the page*) recommends that if a *continuous moderator *varies
both within and across studies in a meta-analysis, a strategy is to break
that moderator down into two moderators by:
*(a)* taking the mean of each study (between-cluster effect),
*(b)* centering the predictor within each study (within-cluster effect).
BUT what if my original moderator that varies both within and across
studies is a *"categorical" *moderator?
I appreciate an R demonstration of the strategy recommended.
Thanks,
Simon
[[alternative HTML version deleted]]
_______________________________________________ R-sig-meta-analysis mailing list R-sig-meta-analysis at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
Many thanks, James! I keep getting the following error when I run your code: Error: unexpected symbol in: "Rating" = "Relative") oswald_centered"
On Tue, Jun 2, 2020 at 10:00 PM James Pustejovsky <jepusto at gmail.com> wrote:
Hi Simon,
The same strategy can be followed by using dummy variables for each unique
level of a categorical moderator. The idea would be to 1) create dummy
variables for each category, 2) calculate the study-level means of the
dummy variables (between-cluster predictors), and 3) calculate the
group-mean centered dummy variables (within-cluster predictors). Just like
if you're working with regular categorical predictors, you'll have to pick
one reference level to omit when using these sets of predictors.
Here is an example of how to carry out such calculations in R, using the
fastDummies package along with a bit of dplyr:
library(dplyr)
library(fastDummies)
library(robumeta)
data("oswald2013")
oswald_centered <-
oswald2013 %>%
# make dummy variables
mutate(
Scoring = recode(Scoring, "Difference Score" = "Difference", "Relative
Rating" = "Relative")
) %>%
dummy_columns(select_columns = "Scoring") %>%
# centering by study
group_by(Study) %>%
mutate_at(vars(starts_with("Scoring_")),
list(wthn = ~ . - mean(.), btw = ~ mean(.))) %>%
# calculate Fisher Z and variance
mutate(
Z = atanh(R),
V = 1 / (N - 3)
)
# Use the predictors in a meta-regression model
# with Scoring = Absolute as the omitted category
robu(Z ~ Scoring_Difference_wthn + Scoring_Relative_wthn +
Scoring_Difference_btw + Scoring_Relative_btw, data = oswald_centered,
studynum = Study, var.eff.size = V)
Kind Regards,
James
On Tue, Jun 2, 2020 at 6:49 PM Simon Harmel <sim.harmel at gmail.com> wrote:
Hi All, Page 13 of *THIS ARTICLE < https://cran.r-project.org/web/packages/robumeta/vignettes/robumetaVignette.pdf
*
(*top of the page*) recommends that if a *continuous moderator *varies
both within and across studies in a meta-analysis, a strategy is to break
that moderator down into two moderators by:
*(a)* taking the mean of each study (between-cluster effect),
*(b)* centering the predictor within each study (within-cluster effect).
BUT what if my original moderator that varies both within and across
studies is a *"categorical" *moderator?
I appreciate an R demonstration of the strategy recommended.
Thanks,
Simon
[[alternative HTML version deleted]]
_______________________________________________ R-sig-meta-analysis mailing list R-sig-meta-analysis at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
I'm not sure what produced that error and I cannot reproduce it. It may
have to do something with the version of dplyr. Here's an alternative way
to recode the Scoring variable, which might be less prone to versioning
differences:
library(dplyr)
library(fastDummies)
library(robumeta)
data("oswald2013")
oswald_centered <-
oswald2013 %>%
# make dummy variables
mutate(
Scoring = factor(Scoring,
levels = c("Absolute", "Difference Score", "Relative
Rating"),
labels = c("Absolute", "Difference", "Relative"))
) %>%
dummy_columns(select_columns = "Scoring") %>%
# centering by study
group_by(Study) %>%
mutate_at(vars(starts_with("Scoring_")),
list(wthn = ~ . - mean(.), btw = ~ mean(.))) %>%
# calculate Fisher Z and variance
mutate(
Z = atanh(R),
V = 1 / (N - 3)
)
# Use the predictors in a meta-regression model
# with Scoring = Absolute as the omitted category
robu(Z ~ Scoring_Difference_wthn + Scoring_Relative_wthn +
Scoring_Difference_btw + Scoring_Relative_btw,
data = oswald_centered, studynum = Study, var.eff.size = V)
On Tue, Jun 2, 2020 at 10:20 PM Simon Harmel <sim.harmel at gmail.com> wrote:
Many thanks, James! I keep getting the following error when I run your code: Error: unexpected symbol in: "Rating" = "Relative") oswald_centered" On Tue, Jun 2, 2020 at 10:00 PM James Pustejovsky <jepusto at gmail.com> wrote:
Hi Simon,
The same strategy can be followed by using dummy variables for each
unique level of a categorical moderator. The idea would be to 1) create
dummy variables for each category, 2) calculate the study-level means of
the dummy variables (between-cluster predictors), and 3) calculate the
group-mean centered dummy variables (within-cluster predictors). Just like
if you're working with regular categorical predictors, you'll have to pick
one reference level to omit when using these sets of predictors.
Here is an example of how to carry out such calculations in R, using the
fastDummies package along with a bit of dplyr:
library(dplyr)
library(fastDummies)
library(robumeta)
data("oswald2013")
oswald_centered <-
oswald2013 %>%
# make dummy variables
mutate(
Scoring = recode(Scoring, "Difference Score" = "Difference",
"Relative Rating" = "Relative")
) %>%
dummy_columns(select_columns = "Scoring") %>%
# centering by study
group_by(Study) %>%
mutate_at(vars(starts_with("Scoring_")),
list(wthn = ~ . - mean(.), btw = ~ mean(.))) %>%
# calculate Fisher Z and variance
mutate(
Z = atanh(R),
V = 1 / (N - 3)
)
# Use the predictors in a meta-regression model
# with Scoring = Absolute as the omitted category
robu(Z ~ Scoring_Difference_wthn + Scoring_Relative_wthn +
Scoring_Difference_btw + Scoring_Relative_btw, data = oswald_centered,
studynum = Study, var.eff.size = V)
Kind Regards,
James
On Tue, Jun 2, 2020 at 6:49 PM Simon Harmel <sim.harmel at gmail.com> wrote:
Hi All, Page 13 of *THIS ARTICLE < https://cran.r-project.org/web/packages/robumeta/vignettes/robumetaVignette.pdf
*
(*top of the page*) recommends that if a *continuous moderator *varies
both within and across studies in a meta-analysis, a strategy is to break
that moderator down into two moderators by:
*(a)* taking the mean of each study (between-cluster effect),
*(b)* centering the predictor within each study (within-cluster effect).
BUT what if my original moderator that varies both within and across
studies is a *"categorical" *moderator?
I appreciate an R demonstration of the strategy recommended.
Thanks,
Simon
[[alternative HTML version deleted]]
_______________________________________________ R-sig-meta-analysis mailing list R-sig-meta-analysis at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
Simon Maybe there should not be a line break between "Relative and Rating"? For characters, for example if they are used as legends, line breaks sometimes matter. Best, Gerta Am 03.06.2020 um 15:32 schrieb James Pustejovsky:
I'm not sure what produced that error and I cannot reproduce it. It may
have to do something with the version of dplyr. Here's an alternative way
to recode the Scoring variable, which might be less prone to versioning
differences:
library(dplyr)
library(fastDummies)
library(robumeta)
data("oswald2013")
oswald_centered <-
oswald2013 %>%
# make dummy variables
mutate(
Scoring = factor(Scoring,
levels = c("Absolute", "Difference Score", "Relative
Rating"),
labels = c("Absolute", "Difference", "Relative"))
) %>%
dummy_columns(select_columns = "Scoring") %>%
# centering by study
group_by(Study) %>%
mutate_at(vars(starts_with("Scoring_")),
list(wthn = ~ . - mean(.), btw = ~ mean(.))) %>%
# calculate Fisher Z and variance
mutate(
Z = atanh(R),
V = 1 / (N - 3)
)
# Use the predictors in a meta-regression model
# with Scoring = Absolute as the omitted category
robu(Z ~ Scoring_Difference_wthn + Scoring_Relative_wthn +
Scoring_Difference_btw + Scoring_Relative_btw,
data = oswald_centered, studynum = Study, var.eff.size = V)
On Tue, Jun 2, 2020 at 10:20 PM Simon Harmel <sim.harmel at gmail.com> wrote:
Many thanks, James! I keep getting the following error when I run your code: Error: unexpected symbol in: "Rating" = "Relative") oswald_centered" On Tue, Jun 2, 2020 at 10:00 PM James Pustejovsky <jepusto at gmail.com> wrote:
Hi Simon,
The same strategy can be followed by using dummy variables for each
unique level of a categorical moderator. The idea would be to 1) create
dummy variables for each category, 2) calculate the study-level means of
the dummy variables (between-cluster predictors), and 3) calculate the
group-mean centered dummy variables (within-cluster predictors). Just like
if you're working with regular categorical predictors, you'll have to pick
one reference level to omit when using these sets of predictors.
Here is an example of how to carry out such calculations in R, using the
fastDummies package along with a bit of dplyr:
library(dplyr)
library(fastDummies)
library(robumeta)
data("oswald2013")
oswald_centered <-
oswald2013 %>%
# make dummy variables
mutate(
Scoring = recode(Scoring, "Difference Score" = "Difference",
"Relative Rating" = "Relative")
) %>%
dummy_columns(select_columns = "Scoring") %>%
# centering by study
group_by(Study) %>%
mutate_at(vars(starts_with("Scoring_")),
list(wthn = ~ . - mean(.), btw = ~ mean(.))) %>%
# calculate Fisher Z and variance
mutate(
Z = atanh(R),
V = 1 / (N - 3)
)
# Use the predictors in a meta-regression model
# with Scoring = Absolute as the omitted category
robu(Z ~ Scoring_Difference_wthn + Scoring_Relative_wthn +
Scoring_Difference_btw + Scoring_Relative_btw, data = oswald_centered,
studynum = Study, var.eff.size = V)
Kind Regards,
James
On Tue, Jun 2, 2020 at 6:49 PM Simon Harmel <sim.harmel at gmail.com> wrote:
Hi All, Page 13 of *THIS ARTICLE < https://cran.r-project.org/web/packages/robumeta/vignettes/robumetaVignette.pdf
*
(*top of the page*) recommends that if a *continuous moderator *varies
both within and across studies in a meta-analysis, a strategy is to break
that moderator down into two moderators by:
*(a)* taking the mean of each study (between-cluster effect),
*(b)* centering the predictor within each study (within-cluster effect).
BUT what if my original moderator that varies both within and across
studies is a *"categorical" *moderator?
I appreciate an R demonstration of the strategy recommended.
Thanks,
Simon
[[alternative HTML version deleted]]
_______________________________________________ R-sig-meta-analysis mailing list R-sig-meta-analysis at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
[[alternative HTML version deleted]]
_______________________________________________ R-sig-meta-analysis mailing list R-sig-meta-analysis at r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-meta-analysis
Dr. rer. nat. Gerta R?cker, Dipl.-Math. Institute of Medical Biometry and Statistics, Faculty of Medicine and Medical Center - University of Freiburg Stefan-Meier-Str. 26, D-79104 Freiburg, Germany Phone: +49/761/203-6673 Fax: +49/761/203-6680 Mail: ruecker at imbi.uni-freiburg.de Homepage: https://www.uniklinik-freiburg.de/imbi.html