Preprint Initial findings from the DecodeME genome-wide association study of myalgic encephalomyelitis/chronic fatigue syndrome, 2025, DecodeMe Collaboration

With the help of @forestglip, I've finally managed to run linkage disequilibrium score regression (LDSC) on the DecodeME results. The original package is written in the outdated Python 2 which caused all sorts of errors. So I've used the Python package GWASlab which provides a wrapper function to run the code.
LDSC in gwaslab - GWASLab

As reference for LD structure we used the European LD scores from 1000 Genomes which can be downloaded here:

The output looks like this:
h2_obsh2_seLambda_gcMean_chi2InterceptIntercept_seRatioRatio_seCatagories
0.040580380.002916921.099476051.141692790.914159330.00766967Ratio < 0NANA

The LDSC paper from 2015 suggests that for binary traits (having ME/CFS or not) h^2 is on the observed scale.
... This relationship holds for meta-analyses, and also for ascertained studies of binary phenotypes, in which case h2 is on the observed scale.
LD Score regression distinguishes confounding from polygenicity in genome-wide association studies - PubMed

So to transform it to the liability scale as reported in the DecodeME paper we have to use this formula.
1756628336877.png
Heritability 201: Types of heritability and how we estimate it — Neale lab

Where K is the population prevalence and P is the prevalence of the trait in your GWAS. In R this becomes:
observed_to_liability <- function(h2_obs, K, P) {
# h2_obs: observed-scale heritability
# K: population prevalence
# P: proportion of cases in GWAS sample

# Calculate threshold corresponding to prevalence
t <- qnorm(1 - K)

# Height of standard normal distribution at that threshold
z <- dnorm(t)

conversion_factor <- (K * (1 - K))^2 / (P * (1 - P) * z^2)

h2_liability <- h2_obs * conversion_factor

return(h2_liability)
}
h2_liab <- observed_to_liability(h2_obs = 0.0405, K = 0.0065, P = 15579/(259909+15579))

In The DecodeME paper they report a h^2 of 0.095. The ME/CFS prevalence that would convert our observed h^2 of 0.0405 to this number would be 0.65%. In other words, it seems like the DecodeME paper assumed a prevalence of 0.65% in calculating the heritability.

Also tried to calculate the LDSC using only SNP that had a MAF > 0.05 and using LD data from the UK biobank but the results were similar (h^2 = 0.0402 and 0.0405 respectively on the observed scale ). If you upload the DecodeME data to BigaGWAS it also gives the same result of h^2 = 0.0405.
 
Last edited:
The intercept of LDSC is often used as a measure of stratification effects or confounding bias. It should be close to 1. If it is substantially higher, it would suggest that population differences between group are inflating the p-values. The good news is that this isn't the case in DecodeME!

The LDSC intercept, however was 0.914, which is substantially smaller than 1. I'm not sure what this means. Perhaps it's because only half of measured SNPs could be used for imputation so that the LD in the sample was underestimated? Or perhaps it indicates that the principal components took away more than just population differences but also some real effects of the illness?

Would be interested in hearing if these figures are correct and if so what the the low intercept might mean @Chris Ponting
 
Back
Top Bottom