Interval kepercayaan sekitar centroid dengan kesamaan Gower yang dimodifikasi

9

Saya ingin memperoleh interval kepercayaan 95% untuk centroid berdasarkan pada kesamaan Gower antara beberapa sampel mulivariat (data komunitas dari inti sedimen). Saya sejauh ini menggunakan vegan{}paket dalam R untuk mendapatkan kesamaan Gower yang dimodifikasi antara core (berdasarkan Anderson 2006; sekarang termasuk dalam R sebagai bagian dari vegdist()). Adakah yang tahu bagaimana saya bisa menghitung interval kepercayaan 95% untuk centroid, misalnya, situs pengambilan sampel, berdasarkan kesamaan Gower yang dimodifikasi?

Selain itu, jika memungkinkan, saya ingin merencanakan 95% CI ini pada PCO yang menunjukkan centroid, jadi jelas jika mereka tumpang tindih.

Untuk mendapatkan kesamaan Gower yang dimodifikasi, saya menggunakan:

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

Tapi sejauh yang saya tahu, Anda tidak mendapatkan centroid vegdist(). Saya perlu mendapatkan centroid, lalu 95% CI, lalu plot mereka ... di R. Bantuan!

Anderson, MJ, KE Ellingsen, dan BH McArdle. 2006. Dispersi multivariat sebagai ukuran keanekaragaman beta. Ekologi Surat 9: 683–693.

Margaret
sumber
Jika Anda melihat kluster dalam dimensi k, bukan centroid dimensi k? Dalam hal ini Anda harus mencari wilayah kepercayaan dan bukan interval. Setiap wilayah kepercayaan untuk variabel seperti pusat cluster akan bergantung pada semua komponen yang membentuk ketidakpastian dalam estimasi. Saya akan berpikir itu bisa sangat kompleks dan menghasilkan wilayah kepercayaan tidak akan menjadi masalah sederhana. Tidak bisakah Anda melakukan simulasi untuk memperkirakannya?
Michael R. Chernick
Terima kasih, Michael. Ya, yang saya maksud wilayah kepercayaan, yang akan berada di ruang k-dimensi di mana k adalah jumlah taksa yang ditemukan di komunitas. Saya akan melakukan simulasi alih-alih menghitungnya, tetapi saya tidak tahu bagaimana caranya. Perkiraan CI akan dilakukan.
Margaret
1
Saya melihat ada beberapa diskusi ketika saya sedang menulis Jawaban saya. Tidak yakin apa yang Anda gambarkan dan saya ilustrasikan dalam halkspesies seperti kita telah membuang info itu dalam menghitung perbedaan. Kami kemudian dapat menghitung centroid di beberapa ruang pentahbisan, dalam hal ini PCO dari ketidaksamaan Gower yang dimodifikasi. Beri tahu saya jika ini bukan yang Anda inginkan dan saya dapat mencoba membantu lagi.
Gavin Simpson
1
Pendekatan lain adalah dengan bootstrap. Untuk titik n k-dimensional, buat sampel bootstrap dengan mengambil sampel n kali dengan penggantian dari kumpulan data. Jalankan set data bootstrap melalui algoritma pengelompokan. Ulangi ini berkali-kali. Ini akan memberi Anda distribusi cluster dan centroid yang dipilih. Kemudian untuk setiap centroid (jika Anda dapat mencocokkan dari satu sampel bootstrap ke yang lain), Anda akan mendapatkan distribusi centroid untuk setiap kluster dan dari daerah yang membangun kepercayaan bootstrap untuknya.
Michael R. Chernick
1
@MichaelChernick Itu mungkin tidak menjadi masalah terlalu banyak jika pengelompokan didefinisikan sebagai apriori sebagai contoh saya. Itu akan menjadi khas dari jenis data yang dijelaskan dalam makalah yang dikutip Margaret.
Gavin Simpson

Jawaban:

5

Saya tidak segera jelas apa centroid yang Anda inginkan, tetapi centroid yang terlintas dalam pikiran adalah titik dalam ruang multivariat di pusat massa poin per kelompok. Tentang ini, Anda ingin elips kepercayaan 95%. Kedua aspek dapat dihitung menggunakan ordiellipse()fungsi dalam vegan . Berikut ini adalah contoh yang dimodifikasi dari ?ordiellipsetetapi menggunakan PCO sebagai sarana untuk menanamkan perbedaan dalam ruang Euclidean dari mana kita dapat memperoleh centroid dan elips kepercayaan untuk kelompok berdasarkan pada variabel Manajemen Alam 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

Sekarang kami menampilkan 2 sumbu PCO pertama dan menambahkan elips kepercayaan 95% berdasarkan kesalahan standar rata-rata skor sumbu. Kami ingin kesalahan standar jadi set kind="se"dan gunakan confargumen untuk memberikan interval kepercayaan yang diperlukan.

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)

Perhatikan bahwa saya menangkap output dari ordiellipse(). Ini mengembalikan daftar, satu komponen per grup, dengan detail centroid dan elips. Anda dapat mengekstrak centerkomponen dari masing-masing komponen ini untuk mendapatkan pada centroid

> 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

Perhatikan bahwa centroid hanya untuk solusi 2d. Pilihan yang lebih umum adalah menghitung centroid sendiri. Centroid hanyalah rata-rata individual dari variabel atau dalam hal ini sumbu PCO. Ketika Anda bekerja dengan perbedaan, mereka harus tertanam dalam ruang penahbisan sehingga Anda memiliki sumbu (variabel) yang dapat Anda hitung rata-rata. Di sini skor sumbu berada di kolom dan situs di baris. Centroid grup adalah vektor rata-rata kolom untuk grup. Ada beberapa cara untuk membagi data tetapi di sini saya gunakan aggregate()untuk membagi skor pada 2 sumbu PCO pertama menjadi kelompok berdasarkan Managementdan menghitung rata-rata mereka

scrs <- scores(ord, display = "sites")
cent <- aggregate(scrs ~ Management, data = dune.env, FUN = mean)
names(cent)[-1] <- colnames(scrs)

Ini memberi:

> 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

yang sama dengan nilai yang disimpan dalam statsseperti yang diekstraksi di atas. The aggregate()Pendekatan generalises ke sejumlah sumbu, misalnya:

> 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

Jelas, centroid pada dua sumbu PCO pertama tidak berubah ketika kami meminta lebih banyak sumbu, sehingga Anda dapat menghitung centroid di semua sumbu sekali, lalu gunakan dimensi apa pun yang Anda inginkan.

Anda dapat menambahkan centroid ke plot di atas dengan

points(cent[, -1], pch = 22, col = "darkred", bg = "darkred", cex = 1.1)

Plot yang dihasilkan sekarang akan terlihat seperti ini

penggunaan ordiellipse

Akhirnya, vegan berisi adonis()dan betadisper()fungsi-fungsi yang dirancang untuk melihat perbedaan cara dan varian data multivariat dengan cara yang sangat mirip dengan makalah / perangkat lunak Marti. betadisper()terkait erat dengan konten kertas yang Anda kutip dan juga dapat mengembalikan centroid untuk Anda.

Gavin Simpson
sumber
1
Bacalah bantuan ?ordiellipseuntuk perincian tentang apa yang sedang dilakukan di sini, khususnya dalam menghitung interval kepercayaan. Apakah teori cocok dengan data adalah sesuatu yang Anda mungkin ingin melihat dengan simulasi atau resampling atau sesuatu daripada mengandalkan "teori".
Gavin Simpson
1
Lebih jauh ke komentar dan paragraf terakhir dari Jawaban; adonis()dapat digunakan untuk menguji rata-rata (centroid) kelompok yang sama karena orang mungkin menggunakan ANOVA dalam kasus univariat. Tes permutasi digunakan untuk menentukan apakah data konsisten dengan hipotesis nol dari tidak ada perbedaan sentroid. Perhatikan juga bahwa perbedaan centroid dapat disebabkan oleh dispersi kelompok yang berbeda (varian). betadisper()dapat membantu Anda menguji jika itu masalahnya, sekali lagi menggunakan tes berbasis permutasi dari jarak rata-rata titik sampel ke centroid mereka.
Gavin Simpson
@ Gavin-- terima kasih. Saya telah melakukan tes untuk mengukur perbedaan antara centroid menggunakan PERMANOVA dan PERMDISP di PRIMER (yang melakukan tugas yang sama seperti adonis()dan betadisp(), saya percaya), saya hanya mencari cara yang baik untuk menampilkan data. Saya memiliki beberapa interaksi situs x musim untuk desain tindakan berulang sehingga saya ingin dapat dengan mudah menunjukkan situs mana yang menunjukkan efek musiman. Saya pikir elips ini adalah apa yang saya cari; contoh ini sangat membantu.
Margaret
juga, ya - pusat massa multivarian untuk setiap kelompok adalah jenis centroid yang saya coba hitung dengan CI.
Margaret
Satu hal lagi - Jika saya ingin mengisi elips dengan warna berbeda tergantung pada faktor saya, apakah ada cara saya bisa melakukannya ordiellipse()tanpa menyematkan loop? Saya memiliki musim dan situs di data saya, dan saya ingin menunjukkan perbedaan situs di satu plot dan musim di yang lain dengan kode warna. Untuk alasan apa pun, menggunakan col = c (1,2,1,2) dll tidak berfungsi, juga tidak col = as.numeric (sen ["Site_TP"]). Apakah ada cara yang elegan untuk melakukan ini?
Margaret