Biostar Beta. Not for public use.
Polygenic Risk Scores: Odds ratio or Beta-coefficient?
2
Entering edit mode
20 months ago
Volka • 50

Hi all, I have recently started a project on modelling a polygenic risk score model to evaluate its utilitiy in predicting a certain disease. After doing some reading, I have come across various models for unweighted and weighted Genetic Risk Score models.

I am wondering about the use of odds ratio (OR) versus the Beta-coefficient of each SNP variant in a risk score model. For instance, here they used the Beta-coefficient in their model, while here they used the odds ratio. Is there any difference in using the odds ratio versus the Beta-coefficient in a risk score model? Also, I noticed that some papers use log(OR) rather than ln(OR), is there a major difference between both?

Thanks!

3
Entering edit mode
15 months ago
Republic of Ireland

Hey dude / dudette,

The odds ratio (OR) is the exponent of the beta coefficient. The beta coefficient itself is the unit increase in the exposure. A practical example will explain it better:

# create random data with a condition A + B ('outcome') and gene1 ('exposure')

modeling <- data.frame(
condition=factor(c(rep("A",100), rep("B",100)), levels=c("A", "B")),
gene1=c(runif(100), runif(100)))
condition     gene1
1         A 0.3607443
2         A 0.3268301
3         A 0.4237005
4         A 0.7621534
5         A 0.1456797
6         A 0.3201094


Note that we have set A as the reference level.

# create a binomial logistic regression model, with gene1's expression 'predicting' the outcome

model <- glm(condition ~ gene1, data=modeling, family=binomial(link='logit'))
summary(model)

Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.03767    0.30014  -0.126    0.900
gene1        0.07294    0.51258   0.142    0.887


Here, the beta coefficient for gene1 in relation to condition B versus A is 0.07294. So, gene1 increases in expression in condition B (if it decreased, the beta coefficient would be negative). This is not a statistically significant finding, though, with p=0.887.

We can also test the gene1 via the Wald test on the beta coefficient:

require(aod)
wald.test(b=coef(model), Sigma=vcov(model), Terms=2)
Wald test:
----------
Chi-squared test:
X2 = 0.02, df = 1, P(> X2) = 0.89


# obtain the odds ratio and upper / lower confidence intervals (CIs):

exp(cbind(OR=coef(model), confint(model, level = 0.95)))
OR     2.5 %   97.5 %
(Intercept) 0.9630288 0.5333548 1.737047
gene1       1.0756700 0.3930383 2.949061


So, odds ratio is just 1.1, which, as you can tell, is not huge and only reflects a slight increase.

# log OR

The log OR is just the natural logarithm of the OR. With regard to why we may even want to use log OR over OR, well, there are probably many reasons. One is that we can calculate the Z score from the log OR:

OR <- 1.0756700
lowerCI <- 0.3930383
upperCI <- 2.949061

logOR <- log(OR)
logORlowerCI <- log(lowerCI)
logORSE <- (logOR - logORlowerCI) / 1.96


Then calculate Z:

logOR / logORSE
[1] 0.1420052


Kevin