Khoảng tin cậy xung quanh một centroid với độ tương tự Gower đã sửa đổi


9

Tôi muốn có được khoảng tin cậy 95% cho các khối u dựa trên độ tương tự Gower giữa một số mẫu mulivariate (dữ liệu cộng đồng từ lõi trầm tích). Cho đến nay tôi đã sử dụng vegan{}gói trong R để có được sự tương tự Gower đã sửa đổi giữa các lõi (dựa trên Anderson 2006; bây giờ được bao gồm trong R như một phần của vegdist()). Có ai biết làm thế nào tôi có thể tính toán khoảng tin cậy 95% cho các trung tâm, ví dụ, các trang web lấy mẫu, dựa trên độ tương tự Gower đã sửa đổi không?

Ngoài ra, nếu có thể, tôi muốn vẽ 95% các TCTD này trên PCO hiển thị các tâm, vì vậy điều này là hiển nhiên nếu chúng bị chồng chéo.

Để có được sự tương tự Gower đã sửa đổi, tôi đã sử dụng:

dat.mgower <- vegdist(decostand(dat, "log"), "altGower")

Nhưng theo như tôi biết, bạn không nhận được centroid từ vegdist(). Tôi cần lấy centroid, sau đó 95% CIs, sau đó vẽ chúng ... trong R. Help!

Anderson, MJ, KE Ellingsen và BH McArdle. 2006. Phân tán đa biến làm thước đo phân tập beta. Thư sinh thái 9: 683 Từ693.


Nếu bạn đang nhìn vào các cụm trong kích thước k không phải là chiều của k-centroid? Trong trường hợp đó bạn nên tìm kiếm các vùng tin cậy và không phải là khoảng thời gian. Bất kỳ vùng tin cậy nào cho một biến như trung tâm cụm sẽ phụ thuộc vào tất cả các thành phần tạo nên độ không đảm bảo trong ước tính. Tôi nghĩ rằng điều đó có thể khá phức tạp và việc tạo ra các vùng tự tin sẽ không phải là vấn đề đơn giản. Bạn không thể làm mô phỏng để ước tính chúng?
Michael R. Chernick

Cảm ơn, Michael. Vâng, tôi có nghĩa là các khu vực niềm tin, sẽ ở trong không gian k chiều trong đó k là số lượng đơn vị taxi được tìm thấy trong cộng đồng. Tôi sẽ làm mô phỏng thay vì tính toán chúng, nhưng tôi không biết làm thế nào để làm điều đó. Các TCTD gần đúng sẽ làm.
Margaret

1
Tôi thấy đã có một số cuộc thảo luận trong khi tôi đang viết Câu trả lời của mình. Không chắc chắn những gì bạn mô tả và tôi minh họa là về các loài khi chúng tôi đã bỏ thông tin đó đi trong việc tính toán những điểm khác biệt. Sau đó, chúng ta có thể tính toán các trọng tâm trong một số không gian xuất sắc, trong trường hợp này là một PCO của những khác biệt Gower được sửa đổi. Hãy cho tôi biết nếu đây không phải là điều bạn muốn và tôi có thể cố gắng giúp đỡ thêm. k
Gavin Simpson

1
Một cách tiếp cận khác là bootstrap. Đối với các điểm n chiều tạo ra các mẫu bootstrap bằng cách lấy mẫu n lần với sự thay thế từ tập dữ liệu. Chạy tập dữ liệu bootstrap thông qua thuật toán phân cụm. Lặp lại nhiều lần Điều này sẽ cung cấp cho bạn một phân phối của các cụm và centroid đã chọn. Sau đó, đối với mỗi centroid (nếu bạn có thể khớp từ mẫu bootstrap này với mẫu khác), bạn sẽ nhận được phân phối centroid cho từng cụm và từ đó xây dựng vùng tin cậy bootstrap cho chúng.
Michael R. Chernick

1
@MichaelCécick Điều đó có thể không phải là vấn đề quá nhiều nếu các nhóm được định nghĩa một tiên nghiệm theo ví dụ của tôi. Đó sẽ là điển hình của loại dữ liệu được mô tả trong bài báo Margaret trích dẫn.
Gavin Simpson

Câu trả lời:


5

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ừ ?ordiellipsenhư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 centerthà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 Managementvà 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ữ statsnhư đượ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

sử dụng ordiellipse

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.


1
Hãy đọc trợ giúp ?ordiellipseđể biết chi tiết về những gì đang được thực hiện ở đây, đặc biệt là tính toán khoảng tin cậy. Liệu lý thuyết có khớp với dữ liệu hay không là thứ bạn có thể muốn xem xét bằng mô phỏng hoặc lấy mẫu lại hoặc một cái gì đó thay vì dựa vào "lý thuyết".
Gavin Simpson

1
Hơn nữa để bình luận và đoạn cuối của câu trả lời; adonis()có thể được sử dụng để kiểm tra các phương tiện tương tự (centroid) của các nhóm vì người ta có thể sử dụng ANOVA trong trường hợp đơn biến. Một thử nghiệm hoán vị được sử dụng để xác định xem dữ liệu có phù hợp với giả thuyết không có sự khác biệt của centroid không. Cũng lưu ý rằng sự khác biệt của centroid có thể được gây ra bởi sự phân tán nhóm khác nhau (phương sai). betadisper()có thể giúp bạn kiểm tra nếu đó là trường hợp, một lần nữa bằng cách sử dụng thử nghiệm dựa trên hoán vị về khoảng cách trung bình của các điểm mẫu đến tâm của chúng.
Gavin Simpson

@ Gavin-- cảm ơn bạn. Tôi đã thực hiện thử nghiệm để đo lường sự khác biệt giữa các nhân mã bằng PERMANOVA và PERMDISP trong PRIMER (thực hiện nhiệm vụ tương tự adonis()betadisp(), tôi tin), tôi chỉ tìm kiếm một cách tốt để hiển thị dữ liệu. Tôi có một số tương tác trang web x mùa cho một thiết kế biện pháp lặp đi lặp lại vì vậy tôi muốn có thể dễ dàng hiển thị trang web nào cho thấy hiệu ứng theo mùa. Tôi nghĩ những hình elip này là thứ tôi đang tìm kiếm; ví dụ này rất hữu ích
Margaret

đồng thời, vâng-- trung tâm khối lượng đa biến cho mỗi nhóm là loại trọng tâm mà tôi đang cố gắng tính toán các TCTD.
Margaret

Một điều nữa-- Nếu tôi muốn lấp đầy các hình elip bằng các màu khác nhau tùy thuộc vào các yếu tố của mình, có cách nào tôi có thể làm điều đó ordiellipse()mà không cần nhúng vòng lặp for không? Tôi có cả phần và trang trong dữ liệu của mình và tôi muốn hiển thị các trang khác nhau trong một cốt truyện và các phần trong phần khác bằng cách mã hóa màu chúng. Vì bất kỳ lý do gì, sử dụng col = c (1,2,1,2), v.v. không hoạt động, cũng không col = as.numeric (cent ["Site_TP"]). Có một cách thanh lịch để làm điều này?
Margaret
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.