Tôi không ngay lập tức rõ ràng những gì bạn muốn centroid, nhưng centroid xuất hiện trong tâm trí là điểm trong không gian đa biến ở trung tâm của khối lượng điểm trên mỗi nhóm. Về điều này, bạn muốn có một hình elip 95% độ tin cậy. Cả hai khía cạnh có thể được tính bằng cách sử dụng ordiellipse()
hàm trong thuần chay . Dưới đây là một ví dụ được sửa đổi từ ?ordiellipse
nhưng sử dụng PCO như một phương tiện để nhúng những điểm khác biệt trong không gian Euclide mà từ đó chúng ta có thể lấy được các khối u và độ tin cậy cho các nhóm dựa trên biến Quản lý Tự nhiên 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
Bây giờ chúng tôi hiển thị 2 trục PCO đầu tiên và thêm hình elip có độ tin cậy 95% dựa trên các lỗi tiêu chuẩn trung bình của điểm số trục. Chúng tôi muốn các lỗi tiêu chuẩn để đặt kind="se"
và sử dụng conf
đối số để đưa ra khoảng tin cậy cần thiết.
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)
Lưu ý rằng tôi chụp đầu ra từ ordiellipse()
. Điều này trả về một danh sách, một thành phần cho mỗi nhóm, với các chi tiết về tâm và hình elip. Bạn có thể trích xuất center
thành phần từ mỗi thành phần này để lấy tại trung tâm
> 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
Lưu ý rằng trọng tâm chỉ dành cho giải pháp 2d. Một lựa chọn tổng quát hơn là tự mình tính toán trọng tâm. Trọng tâm chỉ là trung bình riêng của các biến hoặc trong trường hợp này là trục PCO. Khi bạn đang làm việc với những điểm khác biệt, chúng cần được nhúng vào một không gian thứ tự để bạn có các trục (biến) mà bạn có thể tính trung bình. Ở đây điểm số trục nằm trong các cột và các trang web trong hàng. Trọng tâm của một nhóm là vectơ trung bình của cột cho nhóm. Có một số cách phân chia dữ liệu nhưng ở đây tôi sử dụng aggregate()
để phân chia điểm số trên 2 trục PCO đầu tiên thành các nhóm dựa trên Management
và tính trung bình của chúng
scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)
Điều này mang lại:
> 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
tương tự như các giá trị được lưu trữ stats
như được trích xuất ở trên. Cách aggregate()
tiếp cận khái quát cho bất kỳ số lượng trục, ví dụ:
> 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
Rõ ràng, trọng tâm trên hai trục PCO đầu tiên không thay đổi khi chúng tôi yêu cầu thêm trục, vì vậy bạn có thể tính toán trọng tâm trên tất cả các trục một lần, sau đó sử dụng kích thước bạn muốn.
Bạn có thể thêm trọng tâm vào cốt truyện trên với
points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)
Cốt truyện kết quả sẽ như thế này

Cuối cùng, thuần chay chứa adonis()
và các betadisper()
chức năng được thiết kế để xem xét sự khác biệt về phương tiện và phương sai của dữ liệu đa biến theo những cách rất giống với giấy tờ / phần mềm của Marti. betadisper()
được liên kết chặt chẽ với nội dung của bài báo mà bạn trích dẫn và cũng có thể trả lại trọng tâm cho bạn.