R実戦 | 置換多変量分散分析(PCoAのPERMANOVA分析を例にとる)

e9c46a77b5af14ba894df0039b8598bb.jpeg

アドニスカバー

順列多変量分散分析 (PERMANOVA) は、ノンパラメトリック多変量分散分析 (ADONIS 分析) としても知られています。距離行列 (ユークリッド距離、ブレイ-カーティス距離など) を使用して総分散を分解し、さまざまなグループ化要因またはさまざまな環境要因のサンプルの違いに対する説明の程度を分析し、「順列検定」を使用して統計を分析します。各変数の説明の有意性有意な分析。

一例

たとえば、メタゲノミクスによって検出された種の存在量データをPCA//次元削減して可視化した後、異なるグループのサンプル間にいくつかのNMDS重複がありPCoAますが、これらのグループ間でサンプル組成に有意差があるかどうかを判断するにはどうすればよいでしょうか? これには、PERMANOVA異なるグループのサンプルの中心点が重なるかどうかをテストするテストが必要です。

d9de597e398ca7f685e61ce6a1636010.png
9df37981a3a75055637f60e55b243524.png 0ab0b31f8a4d7dfc70d2efe9f93c6f29.png

上のPCoA写真を例にとると、楕円で囲まれた 4 つのサンプル ポイントのグループが 4 つの標高グループに対応しています.これら 4 つのサンプル グループ間のコミュニティの違いは重要ですか? グループ間のコミュニティの違いをテストすることの本質は、距離行列間の違いをテストすることであり、通常の ANOVA 分析は無力です。距離行列に基づく分析はPerMANOVA、これら 4 つのグループ間の差が有意であることを示しました (p<0.05)。

Rui J、Li J、Wang S、他 青海チベット高原の高山草原土壌におけるシミュレートされた気候変動に対する細菌群集の応答。Appl Environ Microbiol。2015;81(17):6070-6077. doi:10.1128/AEM.00557-15

サンプルデータとコード集

点赞在看この記事は、友達の輪で共有し集赞20个保留30分钟スクリーンショットをWeChatに送信してmzbj0002受け取ってください。

「Chuzhou Notes 2022 VIPは無料で受け取ることができます」 .

「注:」 2022 年はまもなく終了します。読者や友人の便宜のために、現在、木舟笔记永久VIP価格で発売されています169¥2022VIP差額を支払うだけでアップグレードできます。木舟笔记永久VIPこのアカウントのすべてのリソースをお楽しみください (限定コースを除く)。VIP プランは今後開始されません。

Muzhou Notes 2022 VIPプラン

「権利と利益:」

  1. 「2022」慕州ノート全ツイートサンプルデータとコード(「VIPグループでリアルタイム更新」)。

    b6c549e9eb8905e7d02c83c992ed0b1d.png
    データ+コード
  2. Muzhou Notes 「科学研究交流グループ」 .

  3. 「半額」購入跟着Cell学作图系列合集(無料チュートリアル+コード集)|セルをたどって学ぶデッサンシリーズ集.

"通行料金:"

「99円/人」 . mzbj0002WeChat:転送、または記事の最後に直接報酬を追加できます。

3df820fdad1861517894fe36e6933581.png

戦闘

PCoA

# Load package
library(vegan)
library(ggplot2)
library(ggthemes)
# Load data
otu <- read.table('otu.txt',row.names = 1,header = T)
group <- read.table('group.txt',header = T)
#pcoa
# vegdist函数,计算距离;method参数,选择距离类型
distance <- vegdist(otu, method = 'bray')
# 对加权距离进行PCoA分析
pcoa <- cmdscale(distance, k = (nrow(otu) - 1), eig = TRUE)
## plot data
# 提取样本点坐标
plot_data <- data.frame({pcoa$point})[1:2]

# 提取列名,便于后面操作。
plot_data$ID <- rownames(plot_data)
names(plot_data)[1:2] <- c('PCoA1', 'PCoA2')

# eig记录了PCoA排序结果中,主要排序轴的特征值(再除以特征值总和就是各轴的解释量)
eig = pcoa$eig

#为样本点坐标添加分组信息
plot_data <- merge(plot_data, group, by = 'ID', all.x = TRUE)
head(plot_data)

# 计算加权bray-curtis距离
dune_dist <- vegdist(otu, method="bray", binary=F)
dune_pcoa <- cmdscale(dune_dist, k=(nrow(otu) - 1), eig=T)

dune_pcoa_points <- as.data.frame(dune_pcoa$points)
sum_eig <- sum(dune_pcoa$eig)
eig_percent <- round(dune_pcoa$eig/sum_eig*100,1)

colnames(dune_pcoa_points) <- paste0("PCoA", 1:3)

dune_pcoa_result <- cbind(dune_pcoa_points, group)

head(dune_pcoa_result)
library(ggplot2)

ggplot(dune_pcoa_result, aes(x=PCoA1, y=PCoA2, fill=group)) +
  geom_point(shape = 21,color = 'black',size=4) +
  stat_ellipse(level=0.95)+
  scale_fill_manual(values = c('#73bbaf','#d15b64','#592c93'))+
  labs(x=paste("PCoA 1 (", eig_percent[1], "%)", sep=""),
       y=paste("PCoA 2 (", eig_percent[2], "%)", sep=""))  +
  theme_classic()
b83a0694f240c35406aba601830b24c7.png

ペルマノヴァ

# 基于bray-curtis距离进行计算
dune.div <- adonis2(otu ~ group, data = group, permutations = 999, method="bray")

dune.div
library(ggalt)
dune_adonis <- paste0("adonis R2: ",round(dune.div$R2,2), "; P-value: ", dune.div$`Pr(>F)`)

p <- ggplot(dune_pcoa_result, aes(x=PCoA1, y=PCoA2, fill=group)) +
  geom_point(shape = 21,color = 'black',size=4) +
  stat_ellipse(level=0.95)+
  scale_fill_manual(values = c('#73bbaf','#d15b64','#592c93'))+
  labs(x=paste("PCoA 1 (", eig_percent[1], "%)", sep=""),
       y=paste("PCoA 2 (", eig_percent[2], "%)", sep=""),
       title=dune_adonis)  +
  theme_classic()
p
88204c44f1f6aa19dd47031705165681.png
画像-20221228004115608

ペアアドニス

# 配对Adonis确定两两分组之间对物种组成差异的影响
#devtools::install_github("pmartinezarbizu/pairwiseAdonis/pairwiseAdonis")
library(pairwiseAdonis)
dune.pairwise.adonis <- pairwise.adonis(x=otu, factors=group$group, 
                                        sim.function = "vegdist",
                                        sim.method = "bray",
                                        p.adjust.m = "BH",
                                        reduce = NULL,
                                        perm = 999)

library(ggpubr)
library(patchwork)
tab2 <- ggtexttable(dune.pairwise.adonis[,c("pairs","R2","p.value","p.adjusted")], rows = NULL, 
                    theme = ttheme("blank")) %>% 
  tab_add_hline(at.row = 1:2, row.side = "top", linewidth = 1)  %>% 
  tab_add_hline(at.row = nrow(dune.pairwise.adonis)+1, row.side = "bottom", linewidth = 1)  

p + tab2  + plot_layout(design=c(area(1,1), area(2,1)))
77f5b84c81d9f598fbaa95bf03f29336.png

前のコンテンツ

  1. CNS チャートの再現 | 生体情報分析 | R Drawing Resource Sharing & Discussion Group!

  2. この絵の描き方|ちょっと複雑な散布図

  3. この絵の描き方 | 相関分析ロリポップチャート

  4. グループ学生の手紙 | Front Immunol | 血清プロテオームに基づく早期診断マーカーのスクリーニングのための簡単なルーチン

  5. (無料チュートリアル+コード集)|Cellをたどってお絵かきシリーズ集を学ぶ

  6. Q&A|紙に綺麗なイラストを描くには?

  7. セルをたどって絵を学ぼう | 桑の地図(ガルビアル)

  8. R実戦 | LASSO回帰モデルの構築と変数の選別

  9. NCに従ってマッピング | 高度な相互作用ネットワーク図 (タンパク質 + 濃縮経路) (Cytoscape)

  10. R実戦 | クラスタリングに円を追加 (ggunchull)

  11. R実戦|NGSデータ時系列解析(maSigPro)

  12. セルで描くことを学ぶ | ベン図 (ggVennDiagram)


cb3b060d5977f37dc20927ef3ac60a4c.png
カヌー ノート マトリックス

おすすめ

転載: blog.csdn.net/weixin_45822007/article/details/128471298