수정: 2025/02/06
Maaslin2(Microbiome Multivariable Associations with Linear Models)이란?
- 홈페이지 : https://huttenhower.sph.harvard.edu/maaslin/
- Lefse를 개발한 하버드 연구소에서 만든 Differential abundance analysis 도구이다. R package로 제공되며 유전자 표현형, 환경, 미생물 분석에 사용할 수 있다. MaAsLin2은 일반적인 선형모델을 가정하며, 대부분의 역학적 연구 디자인이나, cross-sectional, longitudinal에서 사용할 수 있다.
Maaslin2에서 3 그룹에서 분석하기
1. 설치
if(!requireNamespace("BiocManager", quietly = TRUE))
install.packages("BiocManager")
BiocManager::install("Maaslin2")
library(Maaslin2)
2. 예제 데이터 다운로드
Inflammatory Bowel Disease Multi-omics Database (IBDMDB)에서 장내 조직 16S 데이터를 예제 데이터로 사용하겠습니다. 비교군은 UC, CD, nonIBM 군간의 차이를 비교해 보도록 하겠습니다.
- 홈페이지: https://ibdmdb.org/
- 데이터 다운로드 (홈페이지 접속이 원활하지 않아 분석 데이터를 첨부)
(metadata는 16S만 따로 추출하였습니다.)
3. R에서 분석 수행
1) R로 데이터 불러오기
input_data <- read.delim('./IBD_Example_data/taxonomic_profiles.tsv',sep = "\t", row.names = 1, check.names = FALSE)
dim(input_data) # 982 179
input_taxonomy <- input_data[, "taxonomy", drop = F]
input_data2 <- input_data[, -179]
input_metadata <-read.csv('./IBD_Example_data/hmp2_metadata_2018-08-20_16S_v2.csv')
rownames(input_metadata) <- input_metadata$External.ID
MaAsLin2 분석은 otu table과 metadata만으로 분석이 가능합니다.
만약 기존에 phyloseq 개체를 가지고 있다면, 단순이 phyloseq에서 otu와 metadata를 추출한 후 사용하면 됩니다.
추가로 개별 데이터에서 phyloseq 생성 방법은 아래와 같습니다.
library(phyloseq)
dim(input_taxonomy)
dim(input_data2)
ps <- phyloseq(otu_table(as.matrix(input_data2), taxa_are_rows = T),
sample_data(input_metadata),
tax_table(as.matrix(input_taxonomy))
)
2) 분석하고자 하는 metadata를 factor로 바꾸어 준다.
input_metadata$diagnosis <- factor(input_metadata$diagnosis, levels =c("CD", "UC", "nonIBD"))
만약 phyloseq 개체라면 아래와 같이 입력해야 한다.
sample_data(ps)$diagnosis <- factor(sample_data(ps)$diagnosis, levels =c("CD", "UC", "nonIBD"))
3) Maaslin2를 분석해 보자
Output <- Maaslin2(
input_data = input_data2,
input_metadata = input_metadata,
output = "./Maaslin2/", # 결과물 저장 장소
min_abundance = 0.0, # 최소 abundance
min_prevalence = 0.0, # 최소 유병률(한 OTU가 전체 샘플 중 몇 %에서 존재하는가)
normalization = "TSS", # total-sum scaling
transform = "LOG", # Log값으로 변환
analysis_method = "LM", # 선형모델
max_significance = 0.05, # 유의수준
fixed_effects = "diagnosis",
correction = "BH", # p-value보정
standardize = FALSE,
reference = c("nonIBD") # 3그룹간 비교일때는 reference 변수 추가
)
만약 phyloseq 개체라면 아래와 같이 입력해야 합니다.
#input_data = data.frame(otu_table(ps)), # 에러가 뜬다면 t()로 transpose 해주기
#input_metadata = data.frame(sample_data(ps)),
reference 그룹을 nonIBD도 설정하여, UC와 CD 그룹을 nonIBD 그룹과 비교하도록 하였습니다. 이는 연구 목적에 따라 다르게 설정해야 하며, 결과 해석 시 이를 고려해야 합니다.
4) 결과 보기
(1) Output에서 3 군 중 nonIBD군에서 유의한 종을 확인할 수 있습니다.
Output2 <- merge(input_taxonomy, Output$results, by.x = "row.names", by.y = "feature")
Output2 %>%
dplyr::filter(qval < 0.01)
(2) "./Maaslin2/"에서 시각화 결과도 확인할 수 있습니다.
결과물이 저장된 폴더를 가면 아래와 같은 파일이 생생되었습니다.
figures/ 에서는 각 군에 대한 분포를 확인할 수 있습니다.
아래 이미지는 figures/ 안에 생성된 결과물 입니다.
Heatmap은 아래와 같이 생성됩니다.
시각화 결과가 기본 제공이라 유용한 도구이기도 합니다! 읽어주셔서 감사합니다~!
- Maaslin2: MMallick H, Rahnavard A, McIver LJ, Ma S, Zhang Y, Nguyen LH, Tickle TL, Weingart G, Ren B, Schwager EH, Chatterjee S, Thompson KN, Wilkinson JE, Subramanian A, Lu Y, Waldron L, Paulson JN, Franzosa EA, Bravo HC, Huttenhower C (2021). [Multivariable Association Discovery in Population-scale Meta-omics Studies] PLoS Computational Biology, 17(11):e1009442
- IBD dataset: Lloyd-Price, J., Arze, C., Ananthakrishnan, A. N., Schirmer, M., Avila-Pacheco, J., Poon, T. W., Andrews, E., Ajami, N. J., Bonham, K. S., Brislawn, C. J., Casero, D., Courtney, H., Gonzalez, A., Graeber, T. G., Hall, A. B., Lake, K., Landers, C. J., Mallick, H., Plichta, D. R., Prasad, M., … Huttenhower, C. (2019). Multi-omics of the gut microbial ecosystem in inflammatory bowel diseases. Nature, 569(7758), 655–662. https://doi.org/10.1038/s41586-019-1237-9
- 분석 script 참고: https://www.bioconductor.org/packages/devel/bioc/vignettes/Maaslin2/inst/doc/maaslin2.html