pcoa_by_var: pcoa_by_var

View source: R/pcoa_by_var.R

pcoa_by_varR Documentation

pcoa_by_var

Description

Overlay numeric metadata variables onto a PCoA score plot. Useful during exploratory analysis

Usage

pcoa_by_var(
  ddata,
  mdata,
  method = "bray",
  PC = c(1, 2),
  CI = 0.95,
  score_label = FALSE
)

Arguments

ddata

dataframe. samples in rows. sample ids in rownames. rows should match mdata

mdata

dataframe. samples in rows. sample ids in rownames. rows should match ddata. all variables can be numeric, characters, or factors

method

string. distance method. Default ('bray'). Passed to (vegan::vegdist)} \item{PC}{numeric vector of length 2. specifies the PCs to plot. default is c(1,2)

CI

numeric. Default 0.95. Confidence interval used to draw ellipse around categorical variable. set to NULL to omit drawing ellipse

score_label

string. label data ponts on score/biplot. should be column name in mdata. When set to FALSE, data ponts are not labelled. Default FALSE

Value

named list of plots. First plot in list is main_pca. Subsequent plots in list correspond to metadata variables (columns in metadata)

Examples


set.seed(1)
data(dss_example)
ddata <- dss_example$merged_abundance_id[,2:26]
rownames(ddata) <- dss_example$merged_abundance_id[,1]
ddata <- as.data.frame(t(relab(ddata)))

mdata <- dss_example$metadata
mdata <- mdata[match(rownames(ddata), mdata$sampleID),]

# creating some dummy metadata variable
mdata$var1 <- rnorm(25, 0.5, 3)
mdata$var2 <- rep(LETTERS[21:25], 5)
mdata$var3 <- as.factor(rep(letters[1:5], each=5))
mdata <- mdata[,c('Phenotype','var1','var2','var3')]
p_list <- pcoa_by_var(ddata, mdata, method='bray')

# pcoa
p_list$main_pcoa
# pcoa with metadata variables overlayed. no ellipses draw when variables are numeric
p_list$Phenotype
p_list$var1
p_list$var2
p_list$var3

# can use cowplot::plot_grid to put all plots into one
cowplot::plot_grid(plotlist=list(p_list$Phenotype, p_list$var1, p_list$var2, p_list$var3))

OxfordCMS/OCMSutility documentation built on Feb. 27, 2025, 8:19 p.m.