knitr::opts_chunk$set(echo = TRUE)
library(intermediate)
library(dplyr)
library(ggplot2)
data(Tmem68)

Mediation scan

# target and Tmem68$mediator[,"Tmem68"] are identical.
# so add some noise to make more interesting.
target <- Tmem68$target
#target <- target + rnorm(length(target), sd = 0.5)
covar <- Tmem68$covar
m <- match("Tmem68", Tmem68$annotation$symbol)
annot_tar <- Tmem68$annotation[m,, drop = FALSE]

Reconstruct 8-allele genotype probabilities.

driver <- cbind(A = 1 - apply(Tmem68$qtl.geno, 1, sum), Tmem68$qtl.geno)
rownames(driver) <- rownames(Tmem68$qtl.geno)
annotation <- Tmem68$annotation %>%
  mutate(chr = factor(chr, c(1:19,"X")))
mediators <- Tmem68$mediator

Scan of mediators

First fine mediators that have significant LOD. This will be used to filter traits to set of potential mediators, and provide annotaton for those mediators.

med_lod <- mediator_lod(mediator = mediators,
                        driver = driver,
                        annotation = annotation,
                        covar_med = covar)
med_signif <- med_lod$id[med_lod$lod >= 5]
# Add info column.
med_lod$info <- paste("chr =", med_lod$chr)
med_col <- rep(1, nrow(med_lod))
med_col[med_lod$lod >= 5] <- 2
med_lod$col <- factor(med_col)
med_lod <- med_lod[order(med_lod$col, -med_lod$lod),]
autoplot(med_lod)

Mediation scan of target adjusted by mediators

med_scan <- mediation_scan(target = target,
                      mediator = mediators,
                      driver = driver,
                      annotation = annotation,
                      covar = covar,
                      method = "double-lod-diff")
# Add color for mediators with significant LOD.
med_col <- rep(1, nrow(med_scan))
med_col[med_scan$id %in% med_signif] <- 2
med_scan$col <- factor(med_col)
med_scan <- med_scan[order(med_scan$col, -med_scan$lod),]
ggplot_mediation_scan(med_scan)

Or use autoplot, and maybe focus on one group and add a vertical line.

autoplot(subset(med_scan, "4")) +
  geom_vline(xintercept = annotation[m,"pos"], linetype = "dashed")

Alternatively, only do scan on significant mediators

med_scan <- mediation_scan(target = target,
                      mediator = mediators[, med_signif],
                      driver = driver,
                      annotation = annotation,
                      covar = covar,
                      method = "double-lod-diff")
ggplot_mediation_scan(med_scan)

Mediation test

Causal model selection tests.

med_test <- mediation_test(target = target,
                      mediator = mediators[, med_signif, drop = FALSE],
                      driver = driver,
                      annotation = med_lod,
                      covar_tar = covar,
                      covar_med = covar,
                      method = "double-lod-diff")
(sum_med <- summary(med_test) %>%
    arrange(pvalue))
plotly::ggplotly(autoplot(med_test))
dat <- med_test$best
dat$lod_tar <- med_test$params$target_LR / log(10)
dat$lod_med <- dat$mediation / log(10)
plotly::ggplotly(
  ggplot(dat %>% filter(pvalue <= 0.05)) +
    aes(lod_tar - lod_med, -log10(pvalue),
        col = triad, symbol = symbol) +
    geom_point(alpha = 0.5, size = 2))

Driver effects

med_effect <- intermediate::mediation_effect(med_test, "symbol")
plot(med_effect)

Mediation triad

m <- match("Nnt", annotation$symbol)
mediator <- mediators[, m, drop = FALSE]
colnames(mediator) <- "Nnt"
med_triad <- mediation_triad(target = target,
                      mediator = mediator,
                      driver = driver,
                      covar_tar = covar,
                      sdp = 2)
autoplot(med_triad)


fboehm/qtl2mediate documentation built on June 18, 2019, 8:27 p.m.