Bagaimana menguji apakah varians yang dijelaskan oleh faktor pertama PCA berbeda di seluruh kondisi tindakan berulang?

8

Konteks:

Saya memiliki penelitian di mana enam variabel numerik diukur dalam masing-masing dari dua pengukuran berulang kondisi eksperimental (n = 200). Mari kita memanggil kondisi dan dan variabel A_1, A_2, ..., A_6 dan B_1, B_2, ..., B_6 . Secara teoritis, saya berharap bahwa dalam kondisi B lebih banyak varians dalam variabel harus dijelaskan oleh faktor pertama dari analisis komponen utama (PCA).ABA1,A2,...,A6B1,B2,...,B6B

Nilai khasnya adalah:

  • Faktor pertama PCA pada A1,...,A6 menyumbang 30% dari varians
  • Faktor pertama PCA pada B1,...,B6 menyumbang 40% dari varians.

Pertanyaan:

  • Bagaimana saya bisa menguji apakah perbedaan ini signifikan secara statistik?
  • Bagaimana ini bisa diimplementasikan dalam R?
Jeromy Anglim
sumber

Jawaban:

1

Hanya satu ide (mungkin konyol). Simpan variabel skor komponen utama 1 untuk kondisi A (PC1A) dan variabel skor komponen utama 1 untuk kondisi B (PC1B). Skor harus "mentah", yaitu varians atau jumlah kuadratnya sama dengan nilai eigennya. Kemudian gunakan uji Pitman untuk membandingkan varians.

ttnphns
sumber
1

Apakah saya mendapatkan jawaban Anda dengan benar? - Anda ingin menguji apakah ada perbedaan yang signifikan secara statistik antara kedua kondisi?

Perhabs vegan :: adonis () adalah sesuatu untuk Anda? Tidak tahu apakah itu yang Anda cari.

Ia bekerja pada distance-matrix dan membandingkan jarak dalam suatu kondisi yang lebih besar daripada antar kondisi. Misalnya dalam NMDS Anda akan melihat pemisahan yang jelas dari kedua kondisi tersebut.

Berikut ini beberapa contoh Kode:

df <- data.frame(cond = rep(c("A", "B"), each = 100), 
 v1 <- jitter(rep(c(20, 100), each = 100)),
 v2 <- jitter(rep(c(0, 80), each = 100)),
 v3 <- jitter(rep(c(40, 5), each = 100)),
 v4 <- jitter(rep(c(42, 47), each = 100)),
 v5 <- jitter(rep(c(78, 100), each = 100)),
 v6 <- jitter(rep(c(10, 100), each = 100)))

# PCA
require(vegan)
pca <- rda(df[ ,-1], scale = TRUE)
ssc <- scores(pca, display = "sites")
ordiplot(pca, type = "n")
points(ssc[df$cond == "A", ], col = "red", pch = 16)
points(ssc[df$cond == "B", ], col = "blue", pch = 16)

# NMDS
nmds <- metaMDS(df[ ,-1], distance = "euclidian")
nmsc <- scores(nmds, display = "sites")
ordiplot(nmds, type = "n")
points(nmsc[df$cond == "A", ], col = "red", pch = 16)
points(nmsc[df$cond == "B", ], col = "blue", pch = 16)

# use adonis to test if there is a difference between the conditions
adonis(df[ ,-1] ~ df[ ,1], method = "euclidean")
## There is a statistically significant difference between the two conditions
EDI
sumber
Ini agak samar. Bisakah Anda menguraikan sedikit?
whuber
@whuber: diedit sedikit. Makalah dari Anderson yang disebutkan dalam referensi adonis cukup mudah dibaca.
EDi
1
Saya menghargai usaha Anda. Saya masih bingung karena beberapa frasa tampak tidak konsisten ("jangan" terlihat sangat tidak pada tempatnya) dan sebagian besar jawabannya tidak memiliki hubungan yang jelas dengan pertanyaan: bagaimana "distance-matrix" terkait dengan matriks kovarians PCA? Apakah "NMDS" mengacu pada MDS non-metrik dan jika demikian, apa hubungannya dengan PCA? Sepertinya Anda mengambil pendekatan yang sama sekali berbeda. Ini bagus, tetapi akan membantu menjelaskan dari mana Anda berasal dan mengapa itu berlaku.
whuber
1

Tes permutasi

Untuk menguji hipotesis nol secara langsung, gunakan tes permutasi.

Biarkan PC pertama dalam kondisi menjelaskan varians, dan PC pertama dalam kondisi menjelaskan dari varians. Hipotesis Anda adalah , sehingga kita dapat mendefinisikan sebagai statistik yang menarik, dan hipotesisnya adalah . Hipotesis nol untuk ditolak adalah .Aa<100%Bb<100%b>ac=bac>0c=0

Untuk melakukan tes permutasi, mengambil Anda sampel dari kedua kondisi, dan secara acak membagi mereka ke dalam kondisi dan . Karena pemisahan itu acak, seharusnya tidak ada perbedaan dalam varian yang dijelaskan setelah itu. Untuk setiap permutasi, Anda dapat menghitung , ulangi proses ini berkali-kali (katakanlah, ) kali, dan dapatkan distribusi bawah hipotesis nol dari . Membandingkan nilai empiris dengan distribusi ini akan menghasilkan nilai- .N=200+200ABc10000cctrue=0cp

Bootstrap

Untuk mendapatkan interval kepercayaan pada , gunakan bootstrap.c

Dalam pendekatan bootstrap, Anda secara acak akan memilih sampel dengan penggantian dari sampel yang ada di dan lain dari . Hitung , dan ulangi berkali-kali (lagi, katakanlah, ) kali. Anda akan mendapatkan distribusi nilai -bootstrap , dan interval persentilnya akan sesuai dengan interval kepercayaan nilai empiris . Jadi, Anda dapat memperkirakan nilai- dengan melihat bagian distribusi yang terletak di atas .N=200AN=200Bc10000ccp0

Tes permutasi adalah cara yang lebih langsung (dan mungkin kurang mengandalkan asumsi apa pun) untuk menguji hipotesis nol, tetapi bootstrap memiliki manfaat tambahan menghasilkan interval kepercayaan pada .c

amuba
sumber
Tes permutasi sepertinya merupakan cara yang wajar untuk menguji hipotesis nol. Default saya mungkin akan mencoba pendekatan bootstrap sebagai gantinya di mana Anda sampel dengan penggantian. Saya pikir manfaat dari pendekatan bootstrap adalah bahwa Anda juga akan mendapatkan interval kepercayaan pada ukuran perbedaan antara dua varian. Perasaan saya adalah bahwa Anda tidak akan mendapatkannya dengan pendekatan permutasi.
Jeromy Anglim
@ Jeromy, Anda benar tentang interval kepercayaan pada perbedaan. Bahkan, saya memiliki bagian bootstrap yang ditulis dalam jawaban saya selama ini, sampai saya mengeditnya kemarin ketika meninjau utas ini. Seperti yang Anda sebutkan sekarang, saya telah mengembalikan bootstrap kembali sekarang (dan juga memformat ulang jawabannya sedikit). Lihatlah.
amoeba
0

Ini hanya garis besar gagasan. Proporsi varians didefinisikan sebagai

λ1λ1+...+λ6,

di mana adalah nilai eigen dari matriks kovarians. Sekarang jika kita menggunakan nilai eigen dari matriks korelasi maka , karena jumlah nilai eigen dari sebuah matriks sama dengan jejak matriks, dan untuk matriks korelasi jejaknya adalah jumlah dari yang .λiλ1+...+λ6=6

Jadi jika kita menggunakan matriks korelasi kita perlu menguji hipotesis tentang perbedaan dua nilai eigen maksimal dari matriks korelasi sampel. Tentu saja mungkin untuk menemukan dalam literatur distribusi asimptotik dari nilai eigen maksimal dari matriks korelasi. Jadi masalahnya kemudian berkurang menjadi semacam tes-berpasangan atau tidak berpasangan.

mpiktas
sumber
1
Saya menduga (berdasarkan tidak banyak informasi ;-) bahwa distribusi asimptotik akan dicapai agak lambat untuk banyak distribusi data yang mendasarinya. Lebih penting lagi, korelasinya bukan kovarian; PCA pada keduanya dapat berbeda secara radikal, terutama ketika varians dari variabel berbeda.
whuber