[R-meta] Converting between SMDs and ORs for meta-analysis of prognostic fators

James Pustejovsky jepu@to @end|ng |rom gm@||@com
Wed May 8 16:26:47 CEST 2024


I don't think the Hasselblad & Hedges (1995) correction is what you need
here. Their conversion is motivated by a situation where you have latent
continuous scores from two groups, and you want to calculate the odds ratio
comparing the two groups on the probability that the latent score exceeds a
fixed threshold. But is sounds like what you are trying to find is the odds
ratio measuring the change in the probability of being in one group versus
the other per unit change in a continuous predictor.

Say that you have a variable X that is normally distributed within each of
two groups, where E(X | group = A) = 0 and E(X | group = B) = Delta and
Var(X | group = A) = Var(X | group = B) = Sigma. Then

logit(Pr(group = B | X = x)) = x * Delta / Sigma^2 - Delta^2 / (2 Sigma^2)

or

logit(Pr(group = B | X = x)) = x * delta / Sigma - delta^2 / 2

where delta = Delta / Sigma, the standardized mean difference between
groups. In your example, Delta is about 6 and Sigma is about 15. If you had
normally distributed variates, that would lead to a log-odds of 6 / 15^2 =
0.0267, which is pretty close to what you have. Your variates are not
exactly normal (due to truncation) so the conversion won't be exact.

One other thing to be cautious about. If most of your studies report odds
ratios from the logistic regression of Pr(group = B | X = x), then those
coefficients will be sensitive to the scaling of the predictor X. If
different studies measure X in different units, then the odds ratios will
not be directly comparable.

James

On Wed, May 8, 2024 at 2:45 AM Scott Tagliaferri via R-sig-meta-analysis <
r-sig-meta-analysis using r-project.org> wrote:

> Dear R-Meta,
>
> I am conducting a systematic review and meta-analysis on prognostic factors
> for identifying the recurrence of depression.
>
> Most studies report a ratio measure (eg odds ratio) of the predictor (eg
> sleep) on the outcome (recurrence of depression - yes/no). However, some
> older studies report means and standard deviations of predictors across the
> groups with and without recurrence of depression. I understand this can be
> converted into an unadjusted log odds ratio after calculating the SMD
> between groups (multiply by approx 1.81).
>
> As an example of my question, I have simulated the data from one study with
> R code using the number, mean, standard deviation, and approx min/max of
> the data for one study included in the review:
> 1) Using the smd2or function the OR is ~2.0
> 2) Running a simple logistic regression on this data the OR is ~1.04
>
> I am having issues with interpretability, and am also wondering, since
> scaling is removed via the SMD, whether you can combine these in analysis
> with other odds ratios and/or they need to be interpreted in a different
> way?
>
> Thank you for the help!
>
>
> ___________SIMULATION R CODE FOR DEMONSTRATION__________________
>
> if (!require("WRS2")) {
>   install.packages("WRS2")
> }
> library(WRS2)
>
> if (!require("effectsize")) {
>   install.packages("effectsize")
> }
> library(effectsize)
>
> if (!require("truncnorm")) {
>   install.packages("truncnorm")
> }
> library(truncnorm)
>
> if (!require("meta")) {
>   install.packages("meta")
> }
> library(meta)
>
> ######EMSLIE 2001 - sleep latency
> set.seed(0)  # please run this line with the next to ensure reproducibility
> emslieA <- rtruncnorm(36, a=1, b=50, mean=22.7, sd=16.1)
> set.seed(0)  # please run this line with the next to ensure reproducibility
> emslieB <- rtruncnorm(66, a=1, b=50, mean=16.4, sd=15.0)
>
> ######################################
> #now lets check if calculated from the SMD
> ######################################
> cohen <- cohens_d(emslieA,emslieB)
> cohen
>
> #now calculate odds ratio
> smd2or(
>   smd=cohen$Cohens_d,
>   se.smd=(cohen$CI_high - cohen$CI_low)/3.92,
>   backtransf = TRUE)
>
> ######################################
> #now lets check if calculated as an OR from simple logistic regression
> ######################################
> emslieA2 <- as.data.frame(emslieA)
> emslieB2 <- as.data.frame(emslieB)
>
> colnames(emslieA2) <- c("sleeplatency")
> colnames(emslieB2) <- c("sleeplatency")
>
> emslieA2$group <- 2
> emslieB2$group <- 1
>
> #combine the frame
> emslie <- rbind(emslieA2,emslieB2)
>
> emslie$group <- factor(emslie$group,
>                                   levels = c(1,2),
>                                   labels = c("No Recurrence",
> "Recurrence"))
>
> #pull out the OR
> logitemslie <- glm(group ~ sleeplatency, data = emslie, family =
> "binomial") #specify binomial for logit.
> summary(logitemslie)
> exp(cbind(Odds_Ratio = coef(logitemslie), confint(logitemslie)))
>
>
>
>
>
>
> Kind regards,
>
> *Scott Tagliaferri*
> Ph: +61 417 444 309 E: scott.tagliaferri using gmail.com
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> 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
>

	[[alternative HTML version deleted]]



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