knitr::opts_chunk$set(echo = TRUE)
library(intermediate) library(dplyr) library(ggplot2)
data(Tmem68)
# 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
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)
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)
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))
med_effect <- intermediate::mediation_effect(med_test, "symbol")
plot(med_effect)
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)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.