##################
# FILTER SAMPLES #
##################
# remove controls and duplicates
# Include column keeps replicate samples
# Include_final column removes all replicates and women that don't have trx samples
ps_filt <- map(ps_list, ~ .x %>%
subset_samples(., Include_final == "yes"))
# separate tissue from CVLv2 samples in the second Boston run
CVLv3 <- ps_filt[["boston_r1"]] %>% subset_samples(., Sample_type == "CVL" & Visit == "v3")
CVLv2 <- ps_filt[["boston_r2"]] %>% subset_samples(., Sample_type == "CVL" & Visit == "v2")
tissue <- ps_filt[["boston_r2"]] %>% subset_samples(., Sample_type == "tissue" & Visit == "v3")
# merge the lists
ps_types <- c(ps_filt, "CVLv3"=CVLv3, "CVLv2"=CVLv2, "tissue"=tissue)
# Get ASV tables
seqtabs <- map(ps_types, ~data.frame(.x@otu_table@.Data))
#######################
# RAREFACTION CURVES #
######################
# Get rarefaction curves
rare_runs <- map(seqtabs, ~ .x %>%
rarecurve(., step = 20, label = FALSE)
)






ggplot_df_fun <- function(rare_obj, count) {
# Add sample names
names(rare_obj) <- c(paste0("sample",sprintf("%03.0f", 1:length(rare_obj))))
# Coerce data into "long" form.
rare_df <- imap_dfr(rare_obj, ~ .x %>%
as_tibble(., rownames = "Sample size") %>%
mutate(Sample = .y) %>%
mutate(`Sample size` = as.numeric(gsub("N","",`Sample size`)))
)
# Get nr. of counts in each sample
c <- formatC(count, format="f", big.mark = " ", digits=0)
rare_df_col <- rare_df %>%
dplyr::rename(ASV = "value") %>%
group_by(Sample) %>%
nest() %>%
mutate(Counts = map(data, ~max(.$`Sample size`))) %>%
unnest(c(data, Counts)) %>%
mutate(Counts_ = Counts) %>%
mutate(Counts = ifelse(Counts > count, paste0("> ", c), paste0("< ", c)))
return(rare_df_col)
}
# Define some plot variables
count <- c(33000, 10000, 33000, 40000, 20000, 2500)
limit <- c(65000, 65000, 65000, 65000, 65000, 10000)
title <- c("Run B1. CVLv3 + CVLv2 rep.", "Run B2. CVLv2 + TISSUEv3",
"Run Sthlm CVLv2", "Run B1. CVLv3", "Run B2. CVLv2", "Run B2. TISSUEv3")
title <- c("Run CVL", "Run B2. CVLv2 + TISSUEv3","Run Sthlm CVLv2", "Run B2. CVLv2", "Run Tissue")
# Extract data frame from the rarecurve object
rare_df_col<- map2(rare_runs, count, ~ggplot_df_fun(.x, .y))
# Create Plot
rare_plot <- map(rare_df_col,
~ggplot(.x, aes(x = `Sample size`, y = ASV)) +
theme_bw() +
scale_color_manual(values=c('tomato', alpha('black', 0.1))) +
geom_line(aes(color = Counts, group = Sample)) +
theme(plot.title = element_text(hjust = 0.5))
)
raremax <- map(seqtabs, ~min(rowSums(.x)))
# sample information:
read_counts <- map(rare_df_col, ~ .x %>%
select(Sample, Counts, Counts_) %>%
unique(.))
# Save png
#imap(r_plot, ~ggsave(filename = paste0('Rarefaction_plot_', .y, '.png'), plot = .x,
# path = paste0("../../../results/"),
# width = 10, height = 5,)
#)
Rarefraction plot
### A & B
###########################
# RAREFRACTION CURVE PLOT #
###########################
plot <- ggarrange(
#rare_plot[[1]] + theme(axis.title.x=element_blank(),plot.margin=unit(c(.5,.5,.5,.5),"cm")),
#rare_plot[[3]] + theme(axis.title.x=element_blank()),
rare_plot[[4]] + theme(axis.title.x=element_blank(), plot.margin=unit(c(.5,.5,.5,.5),"cm")),
rare_plot[[6]] + theme(plot.margin=unit(c(.5,.5,.5,.5),"cm")),
ncol = 1,
labels = c("a","b","c","d")
)
print(plot)

# ggsave(filename = paste0('Suppl.Figures6.pdf'), plot = plot,
# path = paste0("./Suppl.Figures/"),
# width = 8, height = 6
# )
Supp. Figure 6. Rarefraction curves. Rarefaction
curves showing number of unique ASVs detected in each sample when
simulating increasing sequencing depth. Low abundant taxa may be
undetected at low sequencing depth but are expected to be detected with
an increased sequencing depth (x-axis). When the curve flattens out, all
taxa in the sample are considered detected. a) The
Luminal sequencing run and b) the Tissue sequencing
run. The sequencing depth was > 40000 reads in all but 9 samples for
the Luminal dataset while 16 samples had fewer than 2500 reads in the
tissue-adherent microbiome dataset.
LS0tCnRpdGxlOiAiU3VwcGwuIEZpZ3VyZSA2LiBSYXJlZmFjdGlvbiBjdXJ2ZXMiCmdlb21ldHJ5OiAibGVmdD0yY20scmlnaHQ9MmNtLHRvcD0yY20sYm90dG9tPTJjbSIKaGVhZGVyLWluY2x1ZGVzOiAKLSBcdXNlcGFja2FnZXtmbG9hdH0KZWRpdG9yX29wdGlvbnM6IAogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlCmtuaXQ6IChmdW5jdGlvbihpbnB1dEZpbGUsIG91dF9kaXIsIC4uLikgewogICAgc291cmNlKCIuLi8uLi9jb2RlL2tuaXRfZnVuY3Rpb24uUiIpOwogICAgY3VzdG9tX2tuaXQoaW5wdXRGaWxlLCAiLi4vLi4vbGFiX2Jvb2svU3VwcGxGaWd1cmU2LyIsIC4uLikKICAgIH0pCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBmaWcucGF0aCAgICA9ICIuL1N1cHBsLkZpZ3VyZXMvIiwKICBmaWcuYWxpZ24gICA9ICJjZW50ZXIiLAogIGZpZy5wcm9jZXNzID0gZnVuY3Rpb24oZmlsZW5hbWUpewogICAgbmV3X2ZpbGVuYW1lIDwtIHN0cmluZ3I6OnN0cl9yZW1vdmUoc3RyaW5nID0gZmlsZW5hbWUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiA9ICItLiIpCiAgICBmczo6ZmlsZV9tb3ZlKHBhdGggPSBmaWxlbmFtZSwgbmV3X3BhdGggPSBuZXdfZmlsZW5hbWUpCiAgICBpZmVsc2UoZnM6OmZpbGVfZXhpc3RzKG5ld19maWxlbmFtZSksIG5ld19maWxlbmFtZSwgZmlsZW5hbWUpCn0pCiMgc2V0d2QoIi9Vc2Vycy92aWxrYWwvd29yay9Ccm9saWRlbnNfd29yay9Qcm9qZWN0cy9icm9saWRlbl81MzI1L3JlcG9ydHMvbWFudXNjcmlwdCIpCmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgaW5jbHVkZT1GQUxTRX0KIyMjIyMjIyMjIyMjIyMjIyMjCiMgTE9BRCBMSUJSQVJJRVMgIwojIyMjIyMjIyMjIyMjIyMjIyMKc3VwcHJlc3NXYXJuaW5ncyh7c3VwcHJlc3NNZXNzYWdlcyh7c3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKHsKICBsaWJyYXJ5KHRpZHl2ZXJzZSkKICBsaWJyYXJ5KHZlZ2FuKQogIGxpYnJhcnkocGh5bG9zZXEpCiAgbGlicmFyeShnZ3B1YnIpCn0pICB9KSAgfSkKCiMjIyMjIyMjIyMjIyMKIyBMT0RBIERBVEEgIwojIyMjIyMjIyMjIyMjCmRhdGFfZm9sZGVyIDwtICIvVXNlcnMvdmlsa2FsL3dvcmsvQnJvbGlkZW5zX3dvcmsvUHJvamVjdHMvR2FicmllbGxhX3JlcG8vcmVwb3J0cy9ybWFya2Rvd24vIgpwYXRoc19wIDwtIGMoJy4uLy4uL2RhdGEvcGh5bG9zZXFfYm9zdG9uX3IxLlJEUycsICAgIyBDVkwgVjMgKDIgcmVwbGljYXRlcyBvZiBvbmUgdGlzc3VlICsgMjcgQ1ZMIFYyKQogICAgICAgICAgICAgJy4uLy4uL2RhdGEvcGh5bG9zZXFfYm9zdG9uX3IyLlJEUycsICAgIyBUaXNzdWUgVjMgJiBDVkwgVjIKICAgICAgICAgICAgICcuLi8uLi9kYXRhL3BoeWxvc2VxX1N0aGxtLlJEUycgICAgICAgICMgQ1ZMIFYyLCAob25seSB2NCByZWdpb24pCiAgICAgICAgICAgICApICAgIAoKbiA8LSBjKCJib3N0b25fcjEiLCAiYm9zdG9uX3IyIiwgIlN0aGxtIikKcHNfbGlzdCA8LSBtYXAocGF0aHNfcCwgfnJlYWRSRFMocGFzdGUwKGRhdGFfZm9sZGVyLCAueCkpKSAlPiUgc2V0X25hbWVzKG4pCiAgCmBgYAoKCmBgYHtyIHJhcmVmYWN0aW9uIGN1cnZlcywgcmVzdWx0cyA9ICdoaWRlJywgZmlnLmFzcD0wLjc1LCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04fQojIyMjIyMjIyMjIyMjIyMjIyMKIyBGSUxURVIgU0FNUExFUyAjCiMjIyMjIyMjIyMjIyMjIyMjIwojIHJlbW92ZSBjb250cm9scyBhbmQgZHVwbGljYXRlcwojIEluY2x1ZGUgY29sdW1uIGtlZXBzIHJlcGxpY2F0ZSBzYW1wbGVzCiMgSW5jbHVkZV9maW5hbCBjb2x1bW4gcmVtb3ZlcyBhbGwgcmVwbGljYXRlcyBhbmQgd29tZW4gdGhhdCBkb24ndCBoYXZlIHRyeCBzYW1wbGVzCnBzX2ZpbHQgPC0gbWFwKHBzX2xpc3QsIH4gLnggJT4lCiAgc3Vic2V0X3NhbXBsZXMoLiwgSW5jbHVkZV9maW5hbCA9PSAieWVzIikpIAoKIyBzZXBhcmF0ZSB0aXNzdWUgZnJvbSBDVkx2MiBzYW1wbGVzIGluIHRoZSBzZWNvbmQgQm9zdG9uIHJ1bgpDVkx2MyA8LSBwc19maWx0W1siYm9zdG9uX3IxIl1dICU+JSBzdWJzZXRfc2FtcGxlcyguLCBTYW1wbGVfdHlwZSA9PSAiQ1ZMIiAmIFZpc2l0ID09ICJ2MyIpCkNWTHYyIDwtIHBzX2ZpbHRbWyJib3N0b25fcjIiXV0gJT4lIHN1YnNldF9zYW1wbGVzKC4sIFNhbXBsZV90eXBlID09ICJDVkwiICYgVmlzaXQgPT0gInYyIikKdGlzc3VlIDwtIHBzX2ZpbHRbWyJib3N0b25fcjIiXV0gJT4lIHN1YnNldF9zYW1wbGVzKC4sIFNhbXBsZV90eXBlID09ICJ0aXNzdWUiICYgVmlzaXQgPT0gInYzIikKCiMgbWVyZ2UgdGhlIGxpc3RzCnBzX3R5cGVzIDwtIGMocHNfZmlsdCwgIkNWTHYzIj1DVkx2MywgIkNWTHYyIj1DVkx2MiwgInRpc3N1ZSI9dGlzc3VlKQojIEdldCBBU1YgdGFibGVzCnNlcXRhYnMgPC0gbWFwKHBzX3R5cGVzLCB+ZGF0YS5mcmFtZSgueEBvdHVfdGFibGVALkRhdGEpKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBSQVJFRkFDVElPTiBDVVJWRVMgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgojIEdldCByYXJlZmFjdGlvbiBjdXJ2ZXMKcmFyZV9ydW5zIDwtIG1hcChzZXF0YWJzLCB+IC54ICU+JQogICAgICAgICAgICAgcmFyZWN1cnZlKC4sIHN0ZXAgPSAyMCwgbGFiZWwgPSBGQUxTRSkKKQoKZ2dwbG90X2RmX2Z1biA8LSBmdW5jdGlvbihyYXJlX29iaiwgY291bnQpIHsKICAjIEFkZCBzYW1wbGUgbmFtZXMKICBuYW1lcyhyYXJlX29iaikgPC0gYyhwYXN0ZTAoInNhbXBsZSIsc3ByaW50ZigiJTAzLjBmIiwgMTpsZW5ndGgocmFyZV9vYmopKSkpCgogICMgQ29lcmNlIGRhdGEgaW50byAibG9uZyIgZm9ybS4KICByYXJlX2RmIDwtIGltYXBfZGZyKHJhcmVfb2JqLCB+IC54ICU+JQogICAgICAgICAgICAgIGFzX3RpYmJsZSguLCByb3duYW1lcyA9ICJTYW1wbGUgc2l6ZSIpICU+JQogICAgICAgICAgICAgIG11dGF0ZShTYW1wbGUgPSAueSkgJT4lCiAgICAgICAgICAgICAgbXV0YXRlKGBTYW1wbGUgc2l6ZWAgPSBhcy5udW1lcmljKGdzdWIoIk4iLCIiLGBTYW1wbGUgc2l6ZWApKSkKICApCiAgIyBHZXQgbnIuIG9mIGNvdW50cyBpbiBlYWNoIHNhbXBsZQogIGMgPC0gZm9ybWF0Qyhjb3VudCwgZm9ybWF0PSJmIiwgYmlnLm1hcmsgPSAiICIsIGRpZ2l0cz0wKQogIHJhcmVfZGZfY29sIDwtIHJhcmVfZGYgJT4lCiAgICBkcGx5cjo6cmVuYW1lKEFTViA9ICJ2YWx1ZSIpICU+JQogICAgZ3JvdXBfYnkoU2FtcGxlKSAlPiUKICAgIG5lc3QoKSAlPiUKICAgIG11dGF0ZShDb3VudHMgPSBtYXAoZGF0YSwgfm1heCguJGBTYW1wbGUgc2l6ZWApKSkgJT4lCiAgICB1bm5lc3QoYyhkYXRhLCBDb3VudHMpKSAlPiUKICAgIG11dGF0ZShDb3VudHNfID0gQ291bnRzKSAlPiUKICAgIG11dGF0ZShDb3VudHMgPSBpZmVsc2UoQ291bnRzID4gY291bnQsIHBhc3RlMCgiPiAiLCBjKSwgcGFzdGUwKCI8ICIsIGMpKSkKCiAgcmV0dXJuKHJhcmVfZGZfY29sKQp9CgojIERlZmluZSBzb21lIHBsb3QgdmFyaWFibGVzCmNvdW50IDwtIGMoMzMwMDAsIDEwMDAwLCAzMzAwMCwgNDAwMDAsIDIwMDAwLCAyNTAwKQpsaW1pdCA8LSBjKDY1MDAwLCA2NTAwMCwgNjUwMDAsIDY1MDAwLCA2NTAwMCwgMTAwMDApCnRpdGxlIDwtIGMoIlJ1biBCMS4gQ1ZMdjMgKyBDVkx2MiByZXAuIiwgIlJ1biBCMi4gQ1ZMdjIgKyBUSVNTVUV2MyIsCiAgICAgICAgICAgIlJ1biBTdGhsbSBDVkx2MiIsICJSdW4gQjEuIENWTHYzIiwgIlJ1biBCMi4gQ1ZMdjIiLCAiUnVuIEIyLiBUSVNTVUV2MyIpCnRpdGxlIDwtIGMoIlJ1biBDVkwiLCAiUnVuIEIyLiBDVkx2MiArIFRJU1NVRXYzIiwiUnVuIFN0aGxtIENWTHYyIiwgIlJ1biBCMi4gQ1ZMdjIiLCAiUnVuIFRpc3N1ZSIpCgojIEV4dHJhY3QgZGF0YSBmcmFtZSBmcm9tIHRoZSByYXJlY3VydmUgb2JqZWN0CnJhcmVfZGZfY29sPC0gbWFwMihyYXJlX3J1bnMsIGNvdW50LCB+Z2dwbG90X2RmX2Z1bigueCwgLnkpKQojIENyZWF0ZSBQbG90CnJhcmVfcGxvdCA8LSBtYXAocmFyZV9kZl9jb2wsCiAgICAgICAgICAgICAgfmdncGxvdCgueCwgYWVzKHggPSBgU2FtcGxlIHNpemVgLCB5ID0gQVNWKSkgKwogICAgICAgICAgICAgIHRoZW1lX2J3KCkgKwogICAgICAgICAgICAgIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXM9YygndG9tYXRvJywgYWxwaGEoJ2JsYWNrJywgMC4xKSkpICsKICAgICAgICAgICAgICBnZW9tX2xpbmUoYWVzKGNvbG9yID0gQ291bnRzLCBncm91cCA9IFNhbXBsZSkpICsKICAgICAgICAgICAgICB0aGVtZShwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KGhqdXN0ID0gMC41KSkKICAgICAgICAgICAgKQpyYXJlbWF4IDwtIG1hcChzZXF0YWJzLCB+bWluKHJvd1N1bXMoLngpKSkKCiMgc2FtcGxlIGluZm9ybWF0aW9uOgogcmVhZF9jb3VudHMgPC0gbWFwKHJhcmVfZGZfY29sLCB+IC54ICU+JQogICAgICAgICAgICBzZWxlY3QoU2FtcGxlLCBDb3VudHMsIENvdW50c18pICU+JQogICAgICAgICAgICB1bmlxdWUoLikpCgojIFNhdmUgcG5nCiNpbWFwKHJfcGxvdCwgfmdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMCgnUmFyZWZhY3Rpb25fcGxvdF8nLCAueSwgJy5wbmcnKSwgcGxvdCA9IC54LAojICAgICAgICBwYXRoID0gcGFzdGUwKCIuLi8uLi8uLi9yZXN1bHRzLyIpLAojICAgICAgICB3aWR0aCA9IDEwLCBoZWlnaHQgPSA1LCkKIykKCmBgYAoKIyMjIFJhcmVmcmFjdGlvbiBwbG90CmBgYHtyIFN1cHBsLkZpZy42LCB3YXJuaW5nPUZBTFNFLCBmaWcuaGVpZ2h0PTYsIGZpZy53aWR0aD04LCBmaWcuYXNwPTAuNzUsfQojIyMgQSAmIEIKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgUkFSRUZSQUNUSU9OIENVUlZFIFBMT1QgIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKcGxvdCA8LSBnZ2FycmFuZ2UoCiAgICAgICAgICAjcmFyZV9wbG90W1sxXV0gKyB0aGVtZShheGlzLnRpdGxlLng9ZWxlbWVudF9ibGFuaygpLHBsb3QubWFyZ2luPXVuaXQoYyguNSwuNSwuNSwuNSksImNtIikpLAogICAgICAgICAgI3JhcmVfcGxvdFtbM11dICsgdGhlbWUoYXhpcy50aXRsZS54PWVsZW1lbnRfYmxhbmsoKSksCiAgICAgICAgICByYXJlX3Bsb3RbWzRdXSArIHRoZW1lKGF4aXMudGl0bGUueD1lbGVtZW50X2JsYW5rKCksIHBsb3QubWFyZ2luPXVuaXQoYyguNSwuNSwuNSwuNSksImNtIikpLAogICAgICAgICAgcmFyZV9wbG90W1s2XV0gKyB0aGVtZShwbG90Lm1hcmdpbj11bml0KGMoLjUsLjUsLjUsLjUpLCJjbSIpKSwKICAgICAgICAgIG5jb2wgPSAxLAogICAgICAgICAgbGFiZWxzID0gYygiYSIsImIiLCJjIiwiZCIpCiAgICAgICAgICApCnByaW50KHBsb3QpCgojIGdnc2F2ZShmaWxlbmFtZSA9IHBhc3RlMCgnU3VwcGwuRmlndXJlczYucGRmJyksIHBsb3QgPSBwbG90LAojICAgICAgICBwYXRoID0gcGFzdGUwKCIuL1N1cHBsLkZpZ3VyZXMvIiksCiMgICAgICAgIHdpZHRoID0gOCwgaGVpZ2h0ID0gNgojICkKYGBgCgoqKlN1cHAuIEZpZ3VyZSA2LiBSYXJlZnJhY3Rpb24gY3VydmVzKiouIFJhcmVmYWN0aW9uIGN1cnZlcyBzaG93aW5nIG51bWJlciBvZiB1bmlxdWUgQVNWcyBkZXRlY3RlZCBpbiBlYWNoIHNhbXBsZSB3aGVuIHNpbXVsYXRpbmcgaW5jcmVhc2luZyBzZXF1ZW5jaW5nIGRlcHRoLiBMb3cgYWJ1bmRhbnQgdGF4YSBtYXkgYmUgdW5kZXRlY3RlZCBhdCBsb3cgc2VxdWVuY2luZyBkZXB0aCBidXQgYXJlIGV4cGVjdGVkIHRvIGJlIGRldGVjdGVkIHdpdGggYW4gaW5jcmVhc2VkIHNlcXVlbmNpbmcgZGVwdGggKHgtYXhpcykuIFdoZW4gdGhlIGN1cnZlIGZsYXR0ZW5zIG91dCwgYWxsIHRheGEgaW4gdGhlIHNhbXBsZSBhcmUgY29uc2lkZXJlZCBkZXRlY3RlZC4gKiphKSoqIFRoZSBMdW1pbmFsIHNlcXVlbmNpbmcgcnVuIGFuZCAqKmIpKiogdGhlIFRpc3N1ZSBzZXF1ZW5jaW5nIHJ1bi4gVGhlIHNlcXVlbmNpbmcgZGVwdGggd2FzID4gYHIgYXMuY2hhcmFjdGVyKGNvdW50WzRdKWAgcmVhZHMgaW4gYWxsIGJ1dCBgciBmaWx0ZXIocmVhZF9jb3VudHMkQ1ZMdjMsIENvdW50cyA9PSAiPCA0MCAwMDAiKSAlPiUgbnJvdygpYCBzYW1wbGVzIGZvciB0aGUgTHVtaW5hbCBkYXRhc2V0IHdoaWxlIGByIGZpbHRlcihyZWFkX2NvdW50cyR0aXNzdWUsIENvdW50cyA9PSAiPCAyIDUwMCIpICU+JSBucm93KClgIHNhbXBsZXMgaGFkIGZld2VyIHRoYW4gYHIgYXMuY2hhcmFjdGVyKGNvdW50WzZdKWAgcmVhZHMgaW4gdGhlIHRpc3N1ZS1hZGhlcmVudCBtaWNyb2Jpb21lIGRhdGFzZXQuIA==