[R] 각 taxa에 대한 그룹간 비모수통계검정의 p-value값 정리 함수

2023. 10. 13. 17:51· Bioinformatics/└ R for microbiome
목차
  1. 이전글
  2. 예제 데이터 
  3. 함수 목표
  4. 각 tax의 abundance비교 함수
  5. 결과 보기

작성: 2023-10-13-금

이전글

[R] Abundance의 평균, 표준편차, N, 95% CI(upper, lower)값 계산해주는 함수

[R] alpha diveristy의 각 index의 Mean, Sd, N, Upper, Lower, 95% CI값과 통계 분석 결과의 p-value값 저장하기

 

 

예제 데이터 

- QIIME2 tutorial인 moving-picture의 데이터입니다. 사람의 양 손바닥, 혀, 장의 마이크로바이옴 데이터를 담고 있습니다. 현재 저장된 형식은 phyloseq object입니다. phylsoeq형식은 biom format을 차용하여 R에서 편리하게 다루도록 개발된 것으로,  metadata와 otu table, taxonomy 그리고 계통정보를 한 번에 저장할 수 있습니다. 

ps.rds
0.08MB

 

 

함수 목표

- 각 taxa에서 body.site 에 따른 Abundance 비교하기

 

 

 

각 tax의 abundance비교 함수

library(dplyr)    # 데이터 처리 
library(phyloseq) # phyloseq
library(rlang)    # 함수 구조
library(combinat) # 순열 생산


ps <- readRDS("./ps.rds")
ps.rel <- phyloseq::transform_sample_counts(ps, fun = function(x) x/sum(x))

먼저 데이터를 불러오고, 상대적 분포도로 변형시켜줍니다.

 

Calculate_P_Values <- function(ps, tax_level, group_column, output_path) {
  # Phyloseq 데이터를 melt
  melt <- psmelt(ps)
  
  # 각 taxa 추출 
  unique_taxa <- unique(melt[[tax_level]])
  total_results <- data.frame()
  
  
  # taxon별로 계산하기  
  for (taxon in unique_taxa) {
    
    # Subset 데이터: 특정 Taxonomy level에 대한 데이터만 추출
    melt.2 <- melt %>% filter(!!sym(tax_level) == taxon)
    
    
    # Kruskal-Wallis 테스트를 수행하여 p-value 계산
    kruskal_results <- melt.2 %>%
      summarise(p_value = kruskal.test(as.formula(glue("Abundance ~", group_column)))$p.value)
    
    # 각 그룹 간 Wilcoxon 테스트를 수행하여 p-value 계산
    group_names <- unique(melt.2[[group_column]])
    statistic_results <- combn(group_names, 2, function(pair) { # 함수를 이용해서 순열 계산 (body.site가 짝지어서 for문처럼 돌아감. 그러나 for문보다 속도가 빠르다)
      subset_data <- melt.2 %>% filter(!!sym(group_column) %in% pair)
      p_value <- wilcox.test(subset_data$Abundance ~ subset_data[[group_column]])$p.value
      data.frame(Group1 = pair[1], Group2 = pair[2], wilcox_p_value = p_value)
    }, simplify = FALSE) %>%
      bind_rows()
    
    # p-value값 보정
    statistic_results[, "p_adjust"] <- p.adjust(statistic_results[, "wilcox_p_value"], method = "fdr")
    statistic_results[, "Kruskal-wallus_p_value"]  <- kruskal_results 
    statistic_results[, "taxonomy"] <- taxon
    
    total_results <- bind_rows(total_results, statistic_results)
  } 
  total_results
  
  # 결과 저장
  write.csv(total_results, paste0(output_path, "Compar_P_Values_", tax_level, ".csv"), row.names = F)
}

각 값을 계산한 후, 저장까지 완료하는 함수를 만들어 봤습니다. 

Phylum level에서는 시간이 얼마 걸리지 않았지만, Species 아래 레벨은 1분 이상의 시간이 걸릴 것으로 예상됩니다. 

 

결과 보기

- Phylum에서 body.site 에 따른 Abundance 비교해 보자

ps.rel.ph <- tax_glom(ps.rel, "Phylum")
Calculate_P_Values(ps.rel.ph, "Phylum", "body.site", "./")

Compar_P_Values_Phylum.csv
0.01MB
결과 미리보기

각 그룹에 따라서 wilcoxon rank sum와 kruskal wallis test의 p-value값이 표시된 것을 볼 수 있다. 물론 kruskal wallis와 taxonomy데이터가 중복되어 공간 낭비가 발생했다. R안에서는 이를 축약해서 볼 수 있지만, 엑셀에서 볼 때는 이렇게 데이터를 녹이는 것이 데이터를 찾기에 편할 것이라고 생각했다. 

 

읽어주셔서 감사합니다. 

반응형
저작자표시 비영리 (새창열림)
  1. 이전글
  2. 예제 데이터 
  3. 함수 목표
  4. 각 tax의 abundance비교 함수
  5. 결과 보기
'Bioinformatics/└ R for microbiome' 카테고리의 다른 글
  • [NetCoMi] phyloseq으로 spearman correlation과 sparCC로 network plot을 그려보자.
  • [R/phyloseq] Neutral community model(NCM) 그리고 해석하기
  • [R] Abundance의 평균, 표준편차, N, 95% CI(upper, lower)값 계산해주는 함수
  • [R] alpha diveristy의 각 index의 Mean, Sd, N, Upper, Lower, 95% CI값과 통계 분석 결과의 p-value값 저장하기
김해김씨99대손
김해김씨99대손
kim.soyeon.bio@gmail.com 오류수정, 피드백, 질문 메일 언제든지 환영합니다!
김해김씨99대손
Bioinfo_newbie
김해김씨99대손

블로그 메뉴

  • 블로그홈
  • Github
  • 글쓰기
  • 설정
  • 분류 전체보기 (362)
    • 자기소개 (1)
    • Bioinformatics (213)
      • Sequencing data (24)
      • Taxonomy (12)
      • Metagenome (5)
      • Microbiome (5)
      • └ Qiime2 (13)
      • └ Dada2 (8)
      • └ R for microbiome (39)
      • └ 기타 (28)
      • Biopython (2)
      • 생물정보학 교육 (11)
      • Rosalind (18)
      • Article (25)
      • 기타 (20)
      • 채용 공고 (3)
    • Statistics (0)
    • Machine Learning (2)
    • Biology (16)
    • Big data (4)
      • 기타 (4)
    • Programming (2)
      • Python (2)
      • R (47)
      • R_Package function (2)
      • My R package (1)
      • Linux (7)
    • Database (2)
    • Management (0)
    • 대학원 (29)
      • 스크랩 (10)
    • 일상 (14)
      • Big picture (2)
      • 다이어리 (10)
    • 기타 (9)

공지사항

인기 글

최근 댓글

전체
오늘
어제
hELLO · Designed By 정상우.v4.2.2
김해김씨99대손
[R] 각 taxa에 대한 그룹간 비모수통계검정의 p-value값 정리 함수
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.