Source: TBA
Here we analyse the effect of VLCAD mutation.
Pathway enrichment analysis is conducted with mitch.
Gene sets were obtained from Reactome (14th March 2025) and GO Biological process sets from MSigDB version 2024.1. Here are the file names: gobp.msigdb.v2024.1.Hs.symbols.gmt and ReactomePathways_2025-03-14.gmt.
suppressPackageStartupMessages({
library("mitch")
library("kableExtra")
})
knitr::opts_chunk$set(dev = 'svg') # set output device to svg
dat <- read.table("Adjusted_proteomics_mito_repeat.tsv",sep="\t",header=TRUE,fill=NA)
head(dat) %>% kbl(caption = "Input data") %>% kable_paper("hover", full_width = F)
| X | AVG.Group.Quantity.Denominator | AVG.Group.Quantity.Numerator | AVG.Log2.Ratio | Fold.change | Absolute.AVG.Log2.Ratio | X..Change | Ratio | Pvalue | Qvalue |
|---|---|---|---|---|---|---|---|---|---|
| GLS2;>NP_001267726 | 7316.844 | 10324.63 | 0.4967971 | 0.4967971 | 41.1077394 | 1.411077 | 0.0140768 | 0.0034774 | 4.0851808 |
| FASTK;>NP_006703 | 10227.585 | 10968.56 | 0.1009082 | 0.1009082 | 7.2448352 | 1.072448 | 0.1801507 | 0.0329853 | 5.5311232 |
| MSRB3;>NP_001180389 | 5250.715 | 12661.83 | 1.2698997 | 1.2698997 | 141.1448069 | 2.411448 | 0.0009228 | 0.0003594 | 4.4669652 |
| TRIAP1 | 14461.727 | 13509.39 | -0.0982774 | 0.9341477 | 0.0982774 | -6.585229 | 0.9341477 | 0.7604954 | 0.1214302 |
| D2HGDH | 50164.922 | 13601.22 | -1.8829428 | 0.2711301 | 1.8829428 | -72.886989 | 0.2711301 | 0.0000195 | 0.0000212 |
| AKR1B10 | 5461.549 | 14165.92 | 1.3750426 | 2.5937557 | 1.3750426 | 159.375573 | 2.5937557 | 0.0014805 | 0.0005132 |
gene <- sapply(strsplit(dat$X,";"),"[[",1)
lfc <- log2(dat$Fold.change)
logp <- -log10(dat$Pvalue)
score <- sign(lfc) / logp
df <- data.frame("gene"=gene,"score"=score)
head(df) %>% kbl(caption = "Cleaned data") %>% kable_paper("hover", full_width = F)
| gene | score |
|---|---|
| GLS2 | -0.4067125 |
| FASTK | -0.6749100 |
| MSRB3 | 0.2903246 |
| TRIAP1 | -8.4101869 |
| D2HGDH | -0.2123158 |
| AKR1B10 | 0.3534066 |
Running some checks of the data.
There are some duplicated genes.
str(df)
## 'data.frame': 1015 obs. of 2 variables:
## $ gene : chr "GLS2" "FASTK" "MSRB3" "TRIAP1" ...
## $ score: num -0.407 -0.675 0.29 -8.41 -0.212 ...
dfa <- aggregate(score ~ gene,df,mean)
rownames(dfa) <- dfa$gene
dfa$gene = NULL
length(unique(df$gene))
## [1] 985
df$gene[which(duplicated(df$gene))]
## [1] "D2HGDH" "PNKD" "PTPMT1" "UNG" "MFF" "HTATIP2"
## [7] "DMAC2L" "NDUFV3" "ECHDC1" "COX11" "MTX3" "TMEM126A"
## [13] "MRPS35" "SDHC" "HTRA2" "NDUFB5" "IDH3G" "ALDH7A1"
## [19] "KARS1" "YME1L1" "DUT" "PGAM5" "GLS" "IMMT"
## [25] "DMAC2" "GPX4" "GSTK1" "MRPL43" "SLC25A10" "TMEM126B"
str(dfa)
## 'data.frame': 982 obs. of 1 variable:
## $ score: num -7.246 -0.226 -0.782 0.185 0.234 ...
Histogram of p-values looks okay.
hist(dat$Pvalue)
Histogram of lfcs looks okay. Long left tail. Slightly more genes in the down direction.
hist(lfc)
table(sign(lfc))
##
## -1 1
## 528 485
Reactome is good for getting a general idea about the canonical pathways.
reactome <- gmt_import("ReactomePathways_2025-03-14.gmt")
mr <- mitch_calc(dfa, reactome, priority="significance",cores=8,minsetsize=5)
## Note: When prioritising by significance (ie: small
## p-values), large effect sizes might be missed.
mrtop <- subset(mr$enrichment_result,p.adjustANOVA < 0.05 )
head(mrtop,20) %>%
kbl(caption = "Top gene pathway differences caused by ALVCAD mutation") %>%
kable_paper("hover", full_width = F)
| set | setSize | pANOVA | s.dist | p.adjustANOVA | |
|---|---|---|---|---|---|
| 93 | Mitochondrial translation | 93 | 0.0000214 | -0.2665433 | 0.0025969 |
| 96 | Mitochondrial translation termination | 87 | 0.0000431 | -0.2644192 | 0.0025969 |
| 95 | Mitochondrial translation initiation | 87 | 0.0000464 | -0.2633147 | 0.0025969 |
| 94 | Mitochondrial translation elongation | 87 | 0.0000701 | -0.2570731 | 0.0029455 |
| 148 | Translation | 113 | 0.0002111 | -0.2134587 | 0.0070916 |
| 80 | Metabolism of proteins | 234 | 0.0006763 | -0.1467446 | 0.0189367 |
| 168 | tRNA processing in the mitochondrion | 17 | 0.0013364 | 0.4525450 | 0.0320730 |
write.table(mr$enrichment_result,file="mitch_reactome_june2026.tsv",quote=FALSE,sep='\t')
par(mar=c(5,27,3,3))
top <- mr$enrichment_result
top <- subset(top,p.adjustANOVA<0.05)
nrow(top)
## [1] 7
up <- head(subset(top,s.dist>0),20)
dn <- head(subset(top,s.dist<0),20)
top <- rbind(up,dn)
vec=top$s.dist
names(vec)=top$set
names(vec) <- gsub("_"," ",names(vec))
vec <- vec[order(vec)]
barplot(abs(vec),col=sign(-vec)+3,horiz=TRUE,las=1,cex.names=0.65,main="Ctl vs Mut",xlab="ES")
grid()
if ( ! file.exists("mitch_reactome_june2026.html") ) {
mitch_report(res=mr,outfile="mitch_reactome_june2026.html",overwrite=TRUE)
}
mitch::networkplot(mr)
## Can't plot upregulated sets. Fewer than 5 found.
Gene ontology is a bigger database and sometimes it yields more detailed results.
gobp <- gmt_import("gobp.msigdb.v2024.1.Hs.symbols.gmt")
names(gobp) <- gsub("GOBP_","",names(gobp))
names(gobp) <- gsub("_"," ",names(gobp))
#download.file("https://ziemann-lab.net/public/tmp/go_2024-11.gmt",destfile="go_2024-11.gmt")
#gobp <- gmt_import("go_2024-11.gmt")
mgo <- mitch_calc(dfa, gobp, priority="significance",cores=8, minsetsize=5)
## Note: When prioritising by significance (ie: small
## p-values), large effect sizes might be missed.
mgo_top <- subset(mgo$enrichment_result,p.adjustANOVA < 0.05 )
head(mgo_top,20) %>%
kbl(caption = "Top GOBP differences caused by ALVCAD mutation") %>%
kable_paper("hover", full_width = F)
| set | setSize | pANOVA | s.dist | p.adjustANOVA | |
|---|---|---|---|---|---|
| 403 | MITOCHONDRIAL GENE EXPRESSION | 156 | 2.94e-05 | -0.2099010 | 0.0325504 |
| 419 | MITOCHONDRIAL TRANSLATION | 128 | 7.89e-05 | -0.2154384 | 0.0436519 |
write.table(mgo$enrichment_result,file="mitch_gobp_june2026.tsv",quote=FALSE,sep='\t')
par(mar=c(5,27,3,3))
top <- mgo$enrichment_result
top <- subset(top,p.adjustANOVA<0.05)
nrow(top)
## [1] 2
up <- head(subset(top,s.dist>0),20)
dn <- head(subset(top,s.dist<0),20)
top <- rbind(up,dn)
vec=top$s.dist
names(vec)=top$set
names(vec) <- gsub("_"," ",names(vec))
vec <- vec[order(vec)]
barplot(abs(vec),col=sign(-vec)+3,horiz=TRUE,las=1,cex.names=0.65,main="Ctl vs Mut",xlab="ES")
grid()
if ( ! file.exists("mitch_gobp_june2026.html") ) {
mitch_report(res=mgo,outfile="mitch_gobp_june2026.html")
}
sessionInfo()
## R version 4.6.0 (2026-04-24)
## Platform: x86_64-pc-linux-gnu
## Running under: Ubuntu 24.04.4 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
## LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
## [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
## [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
##
## time zone: Australia/Melbourne
## tzcode source: system (glibc)
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] gtools_3.9.5 kableExtra_1.4.0 mitch_1.24.0
##
## loaded via a namespace (and not attached):
## [1] gtable_0.3.6 beeswarm_0.4.0 bslib_0.11.0
## [4] xfun_0.57 ggplot2_4.0.3 htmlwidgets_1.6.4
## [7] caTools_1.18.3 GGally_2.4.0 lattice_0.22-9
## [10] vctrs_0.7.3 tools_4.6.0 bitops_1.0-9
## [13] generics_0.1.4 parallel_4.6.0 tibble_3.3.1
## [16] pkgconfig_2.0.3 KernSmooth_2.23-26 RColorBrewer_1.1-3
## [19] S7_0.2.2 lifecycle_1.0.5 compiler_4.6.0
## [22] farver_2.1.2 stringr_1.6.0 textshaping_1.0.5
## [25] gplots_3.3.0 httpuv_1.6.17 sass_0.4.10
## [28] htmltools_0.5.9 yaml_2.3.12 jquerylib_0.1.4
## [31] later_1.4.8 pillar_1.11.1 tidyr_1.3.2
## [34] MASS_7.3-65 cachem_1.1.0 mime_0.13
## [37] ggstats_0.13.0 network_1.20.0 tidyselect_1.2.1
## [40] digest_0.6.39 stringi_1.8.7 dplyr_1.2.1
## [43] reshape2_1.4.5 purrr_1.2.2 fastmap_1.2.0
## [46] grid_4.6.0 cli_3.6.6 magrittr_2.0.5
## [49] dichromat_2.0-0.1 withr_3.0.2 scales_1.4.0
## [52] promises_1.5.0 rmarkdown_2.31 otel_0.2.0
## [55] gridExtra_2.3 coda_0.19-4.1 shiny_1.13.0
## [58] evaluate_1.0.5 knitr_1.51 viridisLite_0.4.3
## [61] rlang_1.2.0 Rcpp_1.1.1-1.1 xtable_1.8-8
## [64] glue_1.8.1 echarts4r_0.5.0 xml2_1.5.2
## [67] jsonlite_2.0.0 svglite_2.2.2 rstudioapi_0.18.0
## [70] R6_2.6.1 plyr_1.8.9 statnet.common_4.13.0
## [73] systemfonts_1.3.2
save.image("pathway_analysis.Rdata")