8  Sensitivity analyses

8.1 European only analyses

The same Mendelian randomization analyses as in Section 6.2 were performed using European only samples (where available).

# MR analyses
mr_results <- fread(
  "./data/00_data_sensitivity_eur_mr.tsv",
  header = TRUE, data.table = FALSE, sep = "\t"
)
mr_studies <- fread(
  "./data/00_data_sensitivity_eur_mr_studies.tsv",
  header = TRUE, data.table = FALSE, sep = "\t"
)

# MR results
mr_results <- mr_studies %>%
  select(id, pmid, trait, n, n_cases) %>%
  inner_join(
    x = .,
    y = mr_results,
    by = "id"
  )
README
  • id - dataset ID
  • pmid - PubMed ID
  • trait - phenotype
  • n - number of samples
  • n_cases - number of cases
  • model - MR model
  • n_snps - number of SNPs
  • beta - MR effect size (per SD lower sclerostin)
  • se - MR standard error
  • pvalue - MR p-value

8.1.1 Results

Table 8.1: MR results of the effect of per SD lower sclerostin on cardiovascular events and risk factors

: Effect (in SD)
: Odds ratio

8.2 UK Biobank sclerostin pQTLs

Genetic variant associations with circulating sclerostin in the SOST region from UK Biobank using the Olink platform were obtained from Sun et al. (2023). Sclerostin pQTLs in cis of SOST (±100KB) were defined using LD clumping using LDlinkR setting \(r^2 < 0.2\) (Myers et al. 2020). Three sclerostin pQTLs were identified rs1513671, rs80107551 (this variant was included in the Zheng et al. (2023) sclerostin pQTLs) and rs865429. These sclerostin pQTLs were used to perform the same Mendelian randomization analyses as in Section 6.2 using the Zheng et al. (2023) sclerostin pQTLs.

source("./scripts/04_data_ukbb_pqtls_region.R")
source("./scripts/05_data_ukbb_pqtls.R")
source("./scripts/06_data_gwas_ukbb_pqtls.R")

8.2.1 Data

# Data
load("./data/01_data_ldmat.Rda")
load("./data/06_data_gwas_ukbb_pqtls.Rda")

# GWAS
gwas <- gwas %>%
  filter(!(id %in% c("GCST006979", "GCST006980")))

8.2.2 Analyses

Mendelian randomization (MR) analyses of circulating sclerostin against cardiovascular events and risk factors were performed using the datasets in Table 2.2. The cis sclerostin pQTLs from UK Biobank were used as the genetic instruments. Since the sclerostin pQTLs are correlated, the generalized inverse-weighted method (Burgess et al. 2016) was used to perform the MR analyses.

# MR analyses
mr_results <- tibble()
for (id in unique(gwas$id)) {

  ## MR data

  ### GWAS
  mr_data <- gwas %>%
    filter(id == !!id) %>%
    inner_join(
      x = pqtls,
      y = .,
      by = c("rsid", "chr", "pos", "ref", "alt")
    ) %>%
    relocate(id, .before = rsid)

  ### LD matrix
  mr_corr <- ld_mat[
    match(mr_data$rsid, rownames(ld_mat)),
    match(mr_data$rsid, rownames(ld_mat)),
    drop = FALSE
  ]
  if (any(mr_data$rsid != rownames(mr_corr)))
    stop("genetic varaints are not aligned between the GWAS data and the LD matrix")

  ## MR analysis

  ### Input
  mr_inputs <- MendelianRandomization::mr_input(
    bx = mr_data$beta.x,
    bxse = mr_data$se.x,
    by = mr_data$beta.y,
    byse = mr_data$se.y,
    correlation = mr_corr,
    snps = mr_data$rsid
  )

  ### Analysis
  mr_analysis <- MendelianRandomization::mr_ivw(
    mr_inputs,
    model = "fixed",
    correl = TRUE
  )
  mr_analysis <- tibble(
    id = !!id,
    model = "UKBB cis pQTLs",
    n_snps = !!nrow(mr_data),
    beta = -1 * !!round(mr_analysis$Estimate, 6), # per lower SD sclerostin
    se = !!round(mr_analysis$StdError, 6),
    pvalue = !!signif(mr_analysis$Pvalue, 4)
  )

  ### Results
  mr_results <- mr_results %>%
    bind_rows(mr_analysis)

}

# MR results
mr_results <- studies %>%
  select(id, pmid, trait, n, n_cases) %>%
  inner_join(
    x = .,
    y = mr_results,
    by = "id"
  )
README
  • id - dataset ID
  • pmid - PubMed ID
  • trait - phenotype
  • n - number of samples
  • n_cases - number of cases
  • model - MR model
  • n_snps - number of SNPs
  • beta - MR effect size (per SD lower sclerostin)
  • se - MR standard error
  • pvalue - MR p-value

8.2.3 Results

Table 8.2: MR results of the effect of per SD lower sclerostin on cardiovascular events and risk factors

: Effect (in SD)
: Odds ratio

mr_results %>%
  inner_join(
    x = select(studies, id, flag),
    y = .,
    by = "id"
  ) %>%
  filter(flag == "Y") %>%
  distinct(trait, .keep_all = TRUE) %>%
  qq_plot()
Figure 8.5: QQ plot of MR results for the original datasets
mr_results %>%
  inner_join(
    x = select(studies, id, flag),
    y = .,
    by = "id"
  ) %>%
  filter(flag == "N") %>%
  qq_plot()
Figure 8.6: QQ plot of MR results or the additional datasets