最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

如何把環(huán)境變量加入R語言的NMDS分析中

2022-11-11 12:54 作者:農(nóng)夫微甜Kew  | 我要投稿

非度量多維縮放 (NMDS) 是可用于在二維中顯示多維數(shù)據(jù)的多種排序圖類型之一。NMDS 圖基本上突出了復(fù)雜多維數(shù)據(jù)樣本之間的相似性。圖上的兩個點(樣本)越接近,這些樣本在基礎(chǔ)數(shù)據(jù)方面就越相似。就我而言,我通常會查看樣本中微生物的物種豐度。因此,兩個樣本越接近,它們的微生物群落就越相似。

生成 NMDS 圖的方法是非度量的,這意味著該算法不假設(shè)任何特定的數(shù)據(jù)分布,當(dāng)您擁有本質(zhì)上奇怪且不符合鐘形曲線樣式的數(shù)據(jù)時,這很方便分配。該算法使用基于等級的方法,該方法基本上根據(jù)特定距離度量(即 Bray Curtis)根據(jù)彼此的接近程度對樣本進行排名,并在二維空間中繪制這些關(guān)系。更多關(guān)于這里方法的細(xì)節(jié)。雖然這是一種針對不合格數(shù)據(jù)的穩(wěn)健方法,但這意味著在 NMDS 排序圖中,軸和坐標(biāo)系是任意的,并且與任何有意義的值沒有直接關(guān)系。

重要說明:?NMDS 只是一種可視化技術(shù),而不是對樣本分離或相關(guān)性的統(tǒng)計評估。為此,您應(yīng)該運行統(tǒng)計檢驗,例如分類變量的ANOSIM 檢驗或連續(xù)變量的Mantel 檢驗。如果您希望軸有意義,或者如果您想討論變體分區(qū),其他排序技術(shù)(如PCA、CA、CCA、RDA 等)可能對您更有用。

好了,說了這么多。有多種方法可以在 NMDS 圖上疊加額外信息,以幫助可視化影響數(shù)據(jù)的潛在趨勢。就我而言,潛在的環(huán)境變量與微生物群落結(jié)構(gòu)共同變化,從而可能推動群落的變化。來自 R 包vegan的一系列函數(shù)旨在將額外信息覆蓋在 NMDS 圖等排序圖上。這些函數(shù)包括envfit、ordiplot、ordiellipseordisurf。我將首先解釋如何在這里使用 envfit 的功能。

ENVFIT

Envfit 將環(huán)境向量或因素擬合到一個排序上。envfit的默認(rèn)繪圖,如metaMDS,在美學(xué)上不是很討人喜歡,所以我將展示如何使用ggplot2繪制兩者。

首先加載您的庫并讀入您的數(shù)據(jù):

library(vegan)?

library(ggplot2)?

df = read.csv("your_data_frame.csv", header = TRUE)

我的數(shù)據(jù)包含樣本,因為行和列包含環(huán)境變量或物種豐度數(shù)據(jù)。在這個例子中,我有分類和連續(xù)環(huán)境變量。

接下來,對您的數(shù)據(jù)進行子集化,以便您擁有一個僅包含環(huán)境變量(env)的數(shù)據(jù)框和一個僅包含物種豐度數(shù)據(jù)(com)的數(shù)據(jù)框。在下面的代碼中,我命名了包含相應(yīng)信息的數(shù)據(jù)中的列范圍。

com = df[,9:32]?

env = df[,2:8]

執(zhí)行 NMDS 排序,如本教程中所述

#convert com to a matrix

m_com = as.matrix(com)?

#nmds code?

nmds = metaMDS(m_com, distance = "bray")?

nmds

現(xiàn)在我們使用環(huán)境數(shù)據(jù)框env運行 envfit 函數(shù)。

en = envfit(nmds, env, permutations = 999, na.rm = TRUE)

en

第一個參數(shù)是我們剛剛執(zhí)行的 NMDS 排序中的 metaMDS 對象。接下來是env,我們的環(huán)境數(shù)據(jù)框。然后我們聲明我們想要 999 個排列,并刪除任何缺少數(shù)據(jù)的行。

當(dāng)我們調(diào)用 envfit 函數(shù)的結(jié)果時,我們得到的結(jié)果被分成VectorsFactors,分別用于您的連續(xù)變量和分類變量。如果您的數(shù)據(jù)不包含兩者,那么您將只能看到向量或因子。對于向量和因子,顯示了一個表格,將變量作為行給出,然后給出它們各自在 NMDS1 和 NMDS2 軸上的 NMDS 排列坐標(biāo)。如果排列 > 0,則使用環(huán)境變量的排列來評估擬合向量或因子的重要性。

我解釋這一點的方式是向量在你的情節(jié)中充當(dāng)一種“偽軸”。如果你沿著你的圖朝那個方向移動,你會看到你的樣本通常相對于那個變量增加。這當(dāng)然不是一個完美的關(guān)系,這就是 r2 和顯著性值來解釋關(guān)聯(lián)強度的地方。更長的箭頭,意味著更強的關(guān)聯(lián)。因為這種關(guān)系并不總是線性的,envfit 的開發(fā)人員建議您也可以使用其他方法將重要變量映射到您的數(shù)據(jù)上,包括點大小或 ordisurf 函數(shù)。

屬于某個類別的所有樣本的質(zhì)心值由因子坐標(biāo)繪制,這使您可以查看來自特定類別的樣本分組在一起(或不分組)的程度。

我們可以使用基數(shù) R 繪制 NMDS 和 envfit 結(jié)果,以查看因子和向量是如何繪制的:

plot(nmds)?

plot(en)

envfit 向量和因子(藍(lán)色)覆蓋在原始 NMDS 圖上,樣本為黑點。這里的基礎(chǔ) R 情節(jié)真的很難閱讀,容易人滿為患,而且難以定制。我建議使用ggplot2來制作更好看的圖。

為了使用ggplot2進行繪圖,您需要從 nmds 和 envfit 結(jié)果中提取適當(dāng)?shù)男畔ⅰ?/p>

對于 NMDS 輸出,使用以下代碼提取 NMDS 排序空間中的樣本坐標(biāo)。然后從您的原始數(shù)據(jù)中添加包含您想要包含在繪圖中的信息的列。在這種情況下,我包括“季節(jié)”列

data.scores = as.data.frame(scores(nmds))?

data.scores$season = df$Season

vegan 包的最新版本 (>2.6-2) 將 score(nmds) 對象的格式更改為列表,因此上面的代碼將拋出一個錯誤,說?arguments 暗示不同的行數(shù)。如果您收到此錯誤,請嘗試使用以下代碼來提取您的網(wǎng)站分?jǐn)?shù):

#extract NMDS scores (x and y coordinates) for sites from newer versions of vegan package?

data.scores = as.data.frame(scores(nmds)$sites)?

#add 'season' column as before?

data.scores$season = df$Season

從 envfit 結(jié)果中提取所需的信息有點復(fù)雜。envfit 輸出包含有關(guān)每個變量的段長度的信息。這些片段被縮放到 r2 值,因此具有較長片段的環(huán)境變量與數(shù)據(jù)的相關(guān)性比具有較短片段的那些更強烈。您可以使用分?jǐn)?shù)提取此信息。然后這些長度被進一步縮放以適合繪圖。這是通過特定于分析的乘數(shù)完成的,可以使用命令ordiArrowMul(en)訪問。下面我將分?jǐn)?shù)乘以這個乘數(shù),以使坐標(biāo)保持正確的比例。

因為我的數(shù)據(jù)包含連續(xù)的和分類的環(huán)境變量,所以我分別使用“向量”和“因子”選項從兩者中提取信息。

en_coord_cont = as.data.frame(scores(en, "vectors")) * ordiArrowMul(en) en_coord_cat = as.data.frame(scores(en, "factors")) * ordiArrowMul(en)

現(xiàn)在數(shù)據(jù)采用適當(dāng)?shù)母袷?,可以使?ggplot2 在 R 中繪制。

首先,我們將制作一個沒有 envfit 變量的 nmds 圖:

gg =?

ggplot(data = data.scores, aes(x = NMDS1, y = NMDS2)) +?

geom_point(data = data.scores, aes(colour = season), size = 3, alpha = 0.5) + ? ??

scale_colour_manual(values = c("orange", "steelblue")) +?

theme(axis.title = element_text(size = 10, face = "bold", colour = "grey30"), ? ? panel.background = element_blank(), panel.border = element_rect(fill = NA, colour = "grey30"),?axis.ticks = element_blank(), axis.text = element_blank(), legend.key = element_blank(),?legend.title = element_text(size = 10, face = "bold", colour = "grey30"),?legend.text = element_text(size = 9, colour = "grey30")) +?

labs(colour = "Season")? ? ??

gg


下面是 NMDS 圖和 envfit 數(shù)據(jù)的代碼:

gg =?

ggplot(data = data.scores, aes(x = NMDS1, y = NMDS2)) +

geom_point(data = data.scores, aes(colour = season), size = 3, alpha = 0.5) + ? scale_colour_manual(values = c("orange", "steelblue")) +

geom_segment(aes(x = 0, y = 0, xend = NMDS1, yend = NMDS2),data = en_coord_cont, size =1, alpha = 0.5, colour = "grey30") +?

geom_point(data = en_coord_cat, aes(x = NMDS1, y = NMDS2),shape = "diamond", size = 4, alpha = 0.6, colour = "navy") +? ? ??

geom_text(data = en_coord_cat, aes(x = NMDS1, y = NMDS2+0.04),label = row.names(en_coord_cat), colour = "navy", fontface = "bold") +?

geom_text(data = en_coord_cont, aes(x = NMDS1, y = NMDS2), colour = "grey30",fontface = "bold", label = row.names(en_coord_cont)) +?

theme(axis.title = element_text(size = 10, face = "bold", colour = "grey30"), panel.background = element_blank(), panel.border = element_rect(fill = NA, colour = "grey30"), axis.ticks = element_blank(), axis.text = element_blank(), legend.key = element_blank(), legend.title = element_text(size = 10, face = "bold", colour = "grey30"), legend.text = element_text(size = 9, colour = "grey30")) +

labs(colour = "Season")? ?

gg

看起來比原始的基本 R 示例要好得多。代碼有點復(fù)雜,因為繪圖現(xiàn)在有很多方面,包括點、線段和文本標(biāo)簽。此圖與本教程系列中的其他圖的主要區(qū)別在于,我們在這里從 3 個不同的數(shù)據(jù)幀中繪制信息,因此每次向圖中添加幾何圖層時都必須指定數(shù)據(jù)源。

資料來源 https://jkzorz.github.io/2020/04/04/NMDS-extras.html

如何把環(huán)境變量加入R語言的NMDS分析中的評論 (共 條)

分享到微博請遵守國家法律
凉山| 珲春市| 沙湾县| 乐东| 房产| 靖远县| 琼海市| 商洛市| 龙胜| 岳阳市| 黄山市| 太谷县| 噶尔县| 晋宁县| 醴陵市| 奇台县| 垦利县| 昆山市| 砀山县| 金平| 鹤峰县| 寿光市| 宜川县| 松原市| 南郑县| 开远市| 托克托县| 景洪市| 准格尔旗| 莲花县| 绵竹市| 滁州市| 东光县| 璧山县| 古交市| 深圳市| 宝清县| 普宁市| 宁化县| 泽州县| 南投市|