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

Scott Tagliaferri @cott@t@g||@|err| @end|ng |rom gm@||@com
Fri May 10 03:27:26 CEST 2024


Hi James,

Thank you for the response. I just wanted to check a couple of things, and
apologies for being a bit of a noob here.

1) Just to confirm, based on your example, are you suggesting that the
SMD^2 is equal to the log odds? Would you have any other
references/examples for this?
2) Do you know of any methods to calculate the variance of this log odds?
3) If not, would simulating the data (as per the code example but rather
across multiple simulations/bootstraps) using the mean, sd, N, min and max
of the data and running simple logistic regression, be a potential option
to acquire an approximate odds ratio and confidence interval?

Also, thank you for noting the issue about different scalings for X. We
have been aware of this, but it is also a good reminder to double check!

Kind regards,

*Scott Tagliaferri*
Ph: +61 417 444 309 E: scott.tagliaferri using gmail.com


On Thu, May 9, 2024 at 12:26 AM James Pustejovsky <jepusto using gmail.com> wrote:

> 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