Clean up the environment
rm(list = ls())
Load required libraries for data reading, plotting, and data
manipulation
library(readxl) # For reading Excel files
library(ggpubr) # For creating publication-ready plots
library(dplyr) # For data manipulation
library(rstatix) # For statistical tests and adding significance markers
library(knitr) # For displaying tibbles in a nice table format
library(kableExtra) # For enhancing table formatting
Load data
# Load targeted serum, liver, brain and urine data
Serum <- read_excel("Data/Data.xlsx", sheet = "Nec_serum_targeted")
Liver <- read_excel("Data/Data.xlsx", sheet = "Liver_targeted")
Brain <- read_excel("Data/Data.xlsx", sheet = "Brain_targeted")
Urine <- read_excel("Data/Data.xlsx", sheet = "Nec_urine_NMR")
# Load group information and necropsy metadata
PigInfo <- read_excel("Data/Data.xlsx", sheet = "PigInfo")
Nec_metadata <- read_excel("Data/Data.xlsx", sheet = "Nec_metadata")
Data organization
# Define the list of metabolites for each tissue/biofluid type
ls.serum.metabolites <- c("Tryptophan", "Kynurenine", "Quinolinate", "Niacinamide", "Serotonin")
ls.liver.metabolites <- c("Tryptophan", "Kynurenine", "Niacinamide", "NAD+", "Serotonin")
ls.brain.metabolites <- c("Tryptophan", "Kynurenine", "Serotonin")
ls.urine.metabolites <- c("Tryptophan", "Quinolinate", "Niacinamide", "1-Methylnicotinamide", "3-Indoxylsulfate", "N-Methyl-2-pyridone-5-carboxamide")
Data.serum <- Serum %>%
select(PigID, all_of(ls.serum.metabolites)) %>%
rename_with(~ paste0("Serum_", .), all_of(ls.serum.metabolites))
Data.liver <- Liver %>%
select(PigID, all_of(ls.liver.metabolites)) %>%
rename_with(~ paste0("Liver_", .), all_of(ls.liver.metabolites))
Data.hippocampus <- Brain %>%
filter(Region == "Hippocampus") %>%
select(PigID, all_of(ls.brain.metabolites)) %>%
rename_with(~ paste0("Hippocampus_", .), all_of(ls.brain.metabolites))
Data.hypothalamus <- Brain %>%
filter(Region == "Hypothalamus") %>%
select(PigID, all_of(ls.brain.metabolites)) %>%
rename_with(~ paste0("Hypothalamus_", .), all_of(ls.brain.metabolites))
Data.PFC <- Brain %>%
filter(Region == "PFC") %>%
select(PigID, all_of(ls.brain.metabolites)) %>%
rename_with(~ paste0("PFC_", .), all_of(ls.brain.metabolites))
Data.striatum <- Brain %>%
filter(Region == "Striatum") %>%
select(PigID, all_of(ls.brain.metabolites)) %>%
rename_with(~ paste0("Striatum_", .), all_of(ls.brain.metabolites))
#Calculate effective osmolality
Effective.Osmolality <- Urine$`Urine osmolality` - (Urine$Urea/1000)
Data.urine <- Urine %>% mutate(across(everything(), ~ .x / Effective.Osmolality * 100)) %>% # Adjust metabolite concentrations based on effective osmolality
mutate(PigID = Urine$PigID) %>% # Adding PigID to Data.urine0
select(PigID, all_of(ls.urine.metabolites)) %>%
rename_with(~ paste0("Urine_", .), all_of(ls.urine.metabolites))
Data.all <- inner_join(Data.serum, Data.liver, by = "PigID") %>%
inner_join(Data.hippocampus, by = "PigID") %>%
inner_join(Data.hypothalamus, by = "PigID") %>%
inner_join(Data.PFC, by = "PigID") %>%
inner_join(Data.striatum, by = "PigID") %>%
inner_join(Data.urine, by = "PigID")
Calcualte spearman correlation between tryptophan and its metabolism
products
Overall.cor <- Data.all %>% select(-PigID) %>% cor_test(method = "spearman")
# Define pairs of variables for which correlation is of interest
pairs_to_keep <- data.frame(
# relationship between serum trp and trp in tissue and urine:
var1 = "Serum_Tryptophan", var2 = "Liver_Tryptophan") %>%
bind_rows(c(var1 = "Serum_Tryptophan", var2 = "Hippocampus_Tryptophan")) %>%
bind_rows(c(var1 = "Serum_Tryptophan", var2 = "Hypothalamus_Tryptophan")) %>%
bind_rows(c(var1 = "Serum_Tryptophan", var2 = "PFC_Tryptophan")) %>%
bind_rows(c(var1 = "Serum_Tryptophan", var2 = "Striatum_Tryptophan")) %>%
bind_rows(c(var1 = "Serum_Tryptophan", var2 = "Urine_Tryptophan")) %>%
# relationship between serum trp, indole and urine 3-indoxylsulfate
bind_rows(c(var1 = "Serum_Tryptophan", var2 = "Urine_3-Indoxylsulfate")) %>%
# relationship between brain trp and brain serotonin
bind_rows(c(var1 = "Hippocampus_Tryptophan", var2 = "Hippocampus_Serotonin")) %>%
bind_rows(c(var1 = "Hypothalamus_Tryptophan", var2 = "Hypothalamus_Serotonin")) %>%
bind_rows(c(var1 = "PFC_Tryptophan", var2 = "PFC_Serotonin")) %>%
bind_rows(c(var1 = "Striatum_Tryptophan", var2 = "Striatum_Serotonin")) %>%
# relationship between brain serotonin and serum serotonin
bind_rows(c(var1 = "Hippocampus_Serotonin", var2 = "Serum_Serotonin")) %>%
bind_rows(c(var1 = "Hypothalamus_Serotonin", var2 = "Serum_Serotonin")) %>%
bind_rows(c(var1 = "PFC_Serotonin", var2 = "Serum_Serotonin")) %>%
bind_rows(c(var1 = "Striatum_Serotonin", var2 = "Serum_Serotonin")) %>%
# relationships relate to kynurenine pathway in brain:
bind_rows(c(var1 = "Hippocampus_Tryptophan", var2 = "Hippocampus_Kynurenine")) %>%
bind_rows(c(var1 = "Hypothalamus_Tryptophan", var2 = "Hypothalamus_Kynurenine")) %>%
bind_rows(c(var1 = "PFC_Tryptophan", var2 = "PFC_Kynurenine")) %>%
bind_rows(c(var1 = "Striatum_Tryptophan", var2 = "Striatum_Kynurenine")) %>%
# relationships relate to kynurenine pathway in liver:
bind_rows(c(var1 = "Liver_Tryptophan", var2 = "Liver_Kynurenine")) %>%
bind_rows(c(var1 = "Liver_Kynurenine", var2 = "Liver_NAD+")) %>%
# relationship between NAD+ and urine tryptophan metabolites
bind_rows(c(var1 = "Liver_NAD+", var2 = "Urine_1-Methylnicotinamide")) %>%
bind_rows(c(var1 = "Liver_NAD+", var2 = "Urine_N-Methyl-2-pyridone-5-carboxamide")) %>%
# relationships relate to brain kynurenine and serum kynurenine
bind_rows(c(var1 = "Hippocampus_Kynurenine", var2 = "Serum_Kynurenine")) %>%
bind_rows(c(var1 = "Hypothalamus_Kynurenine", var2 = "Serum_Kynurenine")) %>%
bind_rows(c(var1 = "PFC_Kynurenine", var2 = "Serum_Kynurenine")) %>%
bind_rows(c(var1 = "Striatum_Kynurenine", var2 = "Serum_Kynurenine")) %>%
# relationships relate to serum kynurenine and liver kynurenine
bind_rows(c(var1 = "Serum_Kynurenine", var2 = "Liver_Kynurenine")) %>%
# relationships relate to serum quinolinate and urine quinolinate
bind_rows(c(var1 = "Serum_Quinolinate", var2 = "Urine_Quinolinate"))
subset.cor <- Overall.cor %>% semi_join(pairs_to_keep, by = c("var1", "var2")) %>%
add_significance()
subset.cor %>% filter(p.signif != "ns") %>%
kable() %>% # Print the tibble in a nice table format
kable_styling(bootstrap_options = c("striped", "hover")) # Enhance table formatting
var1
|
var2
|
cor
|
statistic
|
p
|
method
|
p.signif
|
Serum_Tryptophan
|
Liver_Tryptophan
|
0.50
|
1154.0000
|
0.014200
|
Spearman
|
|
Serum_Tryptophan
|
Hippocampus_Tryptophan
|
0.58
|
960.0000
|
0.003340
|
Spearman
|
**
|
Serum_Tryptophan
|
Hypothalamus_Tryptophan
|
0.41
|
1362.0000
|
0.049000
|
Spearman
|
|
Serum_Tryptophan
|
PFC_Tryptophan
|
0.65
|
796.0000
|
0.000711
|
Spearman
|
***
|
Serum_Tryptophan
|
Striatum_Tryptophan
|
0.59
|
946.0000
|
0.002960
|
Spearman
|
**
|
Serum_Tryptophan
|
Urine_Tryptophan
|
0.41
|
1360.0000
|
0.048500
|
Spearman
|
|
Serum_Tryptophan
|
Urine_3-Indoxylsulfate
|
-0.43
|
3282.0000
|
0.038600
|
Spearman
|
|
Serum_Quinolinate
|
Urine_Quinolinate
|
0.63
|
849.1063
|
0.000950
|
Spearman
|
***
|
Liver_NAD+
|
Urine_1-Methylnicotinamide
|
0.63
|
860.0000
|
0.001360
|
Spearman
|
**
|
Liver_NAD+
|
Urine_N-Methyl-2-pyridone-5-carboxamide
|
0.50
|
1154.0000
|
0.014200
|
Spearman
|
|
sessionInfo()
## R version 4.2.2 (2022-10-31)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur ... 10.16
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.2/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] kableExtra_1.3.4 knitr_1.45 rstatix_0.7.2 dplyr_1.1.3
## [5] ggpubr_0.6.0 ggplot2_3.5.1 readxl_1.4.3
##
## loaded via a namespace (and not attached):
## [1] tidyselect_1.2.0 xfun_0.40 bslib_0.5.1 purrr_1.0.2
## [5] carData_3.0-5 colorspace_2.1-0 vctrs_0.6.5 generics_0.1.3
## [9] viridisLite_0.4.2 htmltools_0.5.6.1 yaml_2.3.7 utf8_1.2.4
## [13] rlang_1.1.2 jquerylib_0.1.4 pillar_1.9.0 glue_1.6.2
## [17] withr_3.0.1 lifecycle_1.0.4 stringr_1.5.1 munsell_0.5.1
## [21] ggsignif_0.6.4 gtable_0.3.5 cellranger_1.1.0 rvest_1.0.3
## [25] evaluate_1.0.1 fastmap_1.1.1 fansi_1.0.6 highr_0.10
## [29] broom_1.0.5 scales_1.3.0 backports_1.4.1 cachem_1.0.8
## [33] webshot_0.5.5 jsonlite_1.8.8 abind_1.4-5 systemfonts_1.0.5
## [37] digest_0.6.33 stringi_1.7.12 grid_4.2.2 cli_3.6.2
## [41] tools_4.2.2 magrittr_2.0.3 sass_0.4.7 tibble_3.2.1
## [45] tidyr_1.3.0 car_3.1-2 pkgconfig_2.0.3 xml2_1.3.5
## [49] rmarkdown_2.28 svglite_2.1.2 httr_1.4.7 rstudioapi_0.15.0
## [53] R6_2.5.1 compiler_4.2.2