求める重心はすぐにはわかりませんが、頭に浮かぶのは、グループごとの点の質量の中心にある多変量空間の点です。これについては、95%の信頼楕円が必要です。どちらの側面もveganのordiellipse()
関数を使用して計算できます。これは、Nature Management変数に基づいてグループの重心と信頼楕円を導出できるユークリッド空間に非類似性を埋め込む手段としてPCOを使用したものの変更例です。?ordiellipse
Management
require(vegan)
data(dune)
dij <- vegdist(decostand(dune, "log"), method = "altGower")
ord <- capscale(dij ~ 1) ## This does PCO
data(dune.env) ## load the environmental data
ここで、最初の2つのPCO軸を表示し、軸スコアの平均の標準誤差に基づいて95%の信頼楕円を追加します。標準誤差が必要なのでkind="se"
、conf
引数を設定して使用し、必要な信頼区間を与えます。
plot(ord, display = "sites", type = "n")
stats <- with(dune.env,
ordiellipse(ord, Management, kind="se", conf=0.95,
lwd=2, draw = "polygon", col="skyblue",
border = "blue"))
points(ord)
ordipointlabel(ord, add = TRUE)
からの出力をキャプチャしていることに注意してくださいordiellipse()
。これにより、重心と楕円の詳細を含むリストが、グループごとに1つのコンポーネントで返されます。center
これらのそれぞれからコンポーネントを抽出して、図心を取得できます
> t(sapply(stats, `[[`, "center"))
MDS1 MDS2
BF -1.2222687 0.1569338
HF -0.6222935 -0.1839497
NM 0.8848758 1.2061265
SF 0.2448365 -1.1313020
図心は2次元の解のためだけのものであることに注意してください。より一般的なオプションは、重心を自分で計算することです。重心は、変数の個々の平均、またはこの場合はPCO軸です。非類似度を扱うときは、それらを順序空間に埋め込んで、平均を計算できる軸(変数)を用意する必要があります。ここで、軸スコアは列にあり、サイトは行にあります。グループの重心は、グループの列平均のベクトルです。データを分割する方法はいくつかありますが、ここaggregate()
では、最初の2つのPCO軸のスコアをグループに分割し、Management
それらの平均に基づいて計算します
scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)
これは与える:
> cent
Management MDS1 MDS2
1 BF -1.2222687 0.1569338
2 HF -0.6222935 -0.1839497
3 NM 0.8848758 1.2061265
4 SF 0.2448365 -1.1313020
これは、stats
上記で抽出されたに格納された値と同じです。このaggregate()
アプローチは、任意の数の軸に一般化されます。例:
> scrs2 <- scores(ord, choices = 1:4, display = "sites")
> cent2 <- aggregate(scrs2 ~ Management, data = dune.env, FUN = mean)
> names(cent2)[-1] <- colnames(scrs2)
> cent2
Management MDS1 MDS2 MDS3 MDS4
1 BF -1.2222687 0.1569338 -0.5300011 -0.1063031
2 HF -0.6222935 -0.1839497 0.3252891 1.1354676
3 NM 0.8848758 1.2061265 -0.1986570 -0.4012043
4 SF 0.2448365 -1.1313020 0.1925833 -0.4918671
明らかに、最初の2つのPCO軸の重心は、追加の軸を要求しても変化しません。そのため、一度にすべての軸の重心を計算し、必要な次元を使用できます。
上記のプロットに重心を追加することができます
points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)
結果のプロットは次のようになります
最後に、veganには、Martiの論文/ソフトウェアと非常によく似た方法で、多変量データの平均と分散の違いを調べるように設計されたadonis()
およびbetadisper()
関数が含まれています。betadisper()
引用した論文の内容と密接に関連しており、重心を返すこともできます。