@Amoeba yorumlarda belirtildiği gibi, PCA sadece bir veri kümesine bakacak ve size bu değişkenlerdeki ana (doğrusal) varyasyon modellerini, bu değişkenler arasındaki korelasyonları veya kovaryansları ve örnekler (satırlar) arasındaki ilişkileri gösterecektir. ) veri kümenizde.
Normalde bir tür veri seti ve potansiyel açıklayıcı değişkenler paketi ile yapılan şey, kısıtlı bir sıralamaya uymaktır. PCA'da, ana bileşenler, PCA biplotundaki eksenler, tüm değişkenlerin optimal doğrusal kombinasyonları olarak türetilir. Bunu pH değişkenleri olan bir toprak kimyası veri kümesinde çalıştırdıysanız,Ca2+, TotalCarbon, ilk bileşenin
0.5×pH+1.4×Ca2++0.1×TotalCarbon
ve ikinci bileşen
2.7×pH+0.3×Ca2+−5.6×TotalCarbon
Bu bileşenler, ölçülen değişkenlerden serbestçe seçilebilir ve seçilenler, veri kümesindeki en büyük varyasyon miktarını sırayla açıklayan ve her bir doğrusal kombinasyonun diğerleriyle dikey (ilişkisiz) olduğunu açıklayanlardır.
Kısıtlı bir sıralamada iki veri setimiz var, ancak ilk veri setinin (yukarıdaki toprak kimyası verileri) doğrusal kombinasyonlarını seçmekte özgür değiliz. Bunun yerine, ikinci veri kümesindeki birincideki değişimi en iyi açıklayan değişkenlerin doğrusal kombinasyonlarını seçmeliyiz. Ayrıca, PCA durumunda, bir veri kümesi yanıt matrisidir ve hiçbir belirleyici yoktur (yanıtı, kendini tahmin etmek olarak düşünebilirsiniz). Kısıtlı durumda, bir dizi açıklayıcı değişkenle açıklamak istediğimiz bir yanıt veri setimiz var.
Hangi değişkenlerin yanıt olduğunu açıklamamış olsanız da, normal olarak bu türlerin çevresel açıklayıcı değişkenleri kullanarak bolluklarındaki veya bileşimindeki (yani yanıtlar) varyasyonları açıklamak ister.
PCA'nın kısıtlı versiyonu ekolojik çevrelerde Artıklık Analizi (RDA) adı verilen bir şeydir. Bu, türler için uygun olmayan veya sadece türün yanıt verdiği kısa gradyanlarınız varsa uygun olan temel bir doğrusal yanıt modelini varsayar.
PCA'ya bir alternatif, yazışma analizi (CA) adı verilen bir şeydir. Bu kısıtsızdır, ancak türlerin daha uzun gradyanlar boyunca nasıl tepki verdikleri açısından biraz daha gerçekçi olan altta yatan tek modlu bir tepki modeline sahiptir. Ayrıca CA'nın göreceli bollukları veya bileşimi , PCA'nın ham bollukları modellediğini unutmayın.
Kısıtlı veya kanonik yazışma analizi (CCA) olarak bilinen kısıtlı bir CA sürümü vardır - kanonik korelasyon analizi olarak bilinen daha resmi bir istatistiksel modelle karıştırılmamalıdır.
Hem RDA hem de CCA'da amaç, tür bolluğu veya bileşimindeki varyasyonu açıklayıcı değişkenlerin bir dizi doğrusal kombinasyonu olarak modellemektir.
Tanımdan, karınızın kırkayak türü bileşimindeki (veya bolluktaki) varyasyonları ölçülen diğer değişkenler açısından açıklamak istediği anlaşılıyor.
Bazı uyarı kelimeleri; RDA ve CCA sadece çok değişkenli regresyonlardır; CCA sadece çok değişkenli bir regresyon. Regresyon hakkında öğrendiğiniz her şey geçerlidir ve birkaç tane daha var:
- açıklayıcı değişken sayısını artırdıkça, kısıtlamalar aslında gittikçe azalıyor ve tür kompozisyonunu en iyi şekilde açıklayan bileşenleri / eksenleri gerçekten çıkarmıyorsunuz ve
- CCA ile, açıklayıcı faktörlerin sayısını artırdıkça, CCA grafiğindeki noktaların konfigürasyonuna bir eğrinin bir artefaktını indükleme riskiniz vardır.
- BKA ve CCA'nın altında yatan teori, daha resmi istatistiksel yöntemlerden daha az gelişmiştir. Hangi açıklayıcı değişkenlerin yalnızca aşamalı seçimi kullanmaya devam edeceğini makul bir şekilde seçebiliriz (bu, regresyonda bir seçim yöntemi olarak sevmediğimiz tüm nedenler için ideal değildir) ve bunu yapmak için permütasyon testlerini kullanmamız gerekir.
bu yüzden tavsiyem regresyon ile aynı; hipotezlerinizin ne olduğunu önceden düşünün ve bu hipotezleri yansıtan değişkenler ekleyin. Do not sadece karışımı içine tüm açıklayıcı değişkenler atmak.
Misal
Kısıtsız sıralama
PCA
PCA, CA ve CCA'yı R için vegan paketini kullanarak karşılaştırmaya yardımcı olan ve bu tür koordinasyon yöntemlerine uyacak şekilde tasarlanmış bir örnek göstereceğim :
library("vegan") # load the package
data(varespec) # load example data
## PCA
pcfit <- rda(varespec)
## could add `scale = TRUE` if variables in different units
pcfit
> pcfit
Call: rda(X = varespec)
Inertia Rank
Total 1826
Unconstrained 1826 23
Inertia is variance
Eigenvalues for unconstrained axes:
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
983.0 464.3 132.3 73.9 48.4 37.0 25.7 19.7
(Showed only 8 of all 23 unconstrained eigenvalues)
vegan , Canoco'nun aksine, Atalet'i standartlaştırmaz, bu nedenle toplam varyans 1826'dır ve Özdeğerler aynı birimlerdedir ve 1826'ya ulaşır
> cumsum(eigenvals(pcfit))
PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8
982.9788 1447.2829 1579.5334 1653.4670 1701.8853 1738.8947 1764.6209 1784.3265
PC9 PC10 PC11 PC12 PC13 PC14 PC15 PC16
1796.6007 1807.0361 1816.3869 1819.1853 1821.5128 1822.9045 1824.1103 1824.9250
PC17 PC18 PC19 PC20 PC21 PC22 PC23
1825.2563 1825.4429 1825.5495 1825.6131 1825.6383 1825.6548 1825.6594
Ayrıca, ilk Özdeğer değerinin varyansın yaklaşık yarısı olduğunu ve ilk iki eksenle toplam varyansın ~% 80'ini açıkladık.
> head(cumsum(eigenvals(pcfit)) / pcfit$tot.chi)
PC1 PC2 PC3 PC4 PC5 PC6
0.5384240 0.7927453 0.8651851 0.9056821 0.9322031 0.9524749
İlk iki temel bileşen üzerindeki örneklerin ve türlerin puanlarından bir biplot çizilebilir
> plot(pcfit)
Burada iki sorun var
- Sıralamada üç tür hakimdir - bu türler başlangıçtan en uzaktadır - çünkü bunlar veri setindeki en bol taksonlardır
- Sıralamada, koordinasyonun metrik özelliklerini korumak için iki ana ana bileşene bölünmüş uzun veya baskın tek bir gradyanı düşündüren güçlü bir eğri kemeri vardır.
CA
Bir CA, unimodal tepki modeli nedeniyle uzun eğimi daha iyi ele aldığı ve her ikisi için de yardımcı olabilir ve ham bolluk olmayan türlerin göreceli kompozisyonunu modeller.
Bunu yapmak için vegan / R kodu yukarıda kullanılan PCA koduna benzer
cafit <- cca(varespec)
cafit
> cafit <- cca(varespec)
> cafit
Call: cca(X = varespec)
Inertia Rank
Total 2.083
Unconstrained 2.083 23
Inertia is mean squared contingency coefficient
Eigenvalues for unconstrained axes:
CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8
0.5249 0.3568 0.2344 0.1955 0.1776 0.1216 0.1155 0.0889
(Showed only 8 of all 23 unconstrained eigenvalues)
Burada, nispi kompozisyonlarındaki siteler arasındaki varyasyonun yaklaşık% 40'ını açıklıyoruz
> head(cumsum(eigenvals(cafit)) / cafit$tot.chi)
CA1 CA2 CA3 CA4 CA5 CA6
0.2519837 0.4232578 0.5357951 0.6296236 0.7148866 0.7732393
Türlerin ortak arazisi ve alan puanları artık birkaç tür tarafından daha az baskındır
> plot(cafit)
Hangi PCA veya CA'yı seçeceğiniz, verilerle ilgili sormak istediğiniz sorularla belirlenmelidir. Genellikle tür verileriyle, türler grubundaki farklılıklarla daha çok ilgileniyoruz, bu nedenle CA popüler bir seçimdir. Çevresel değişkenlerin bir veri kümesini varsa, CA uygunsuz ve PCA bu yüzden su veya toprak kimyası, biz (bir korelasyon matrisi kullanılarak, irtifalarında tek modlu bir şekilde yanıt verdiklerini olanlar beklemek olmaz demek scale = TRUE
de rda()
olacağını çağrı) daha uygun.
Kısıtlı sıralama; CCA
Şimdi, ilk tür veri kümesindeki kalıpları açıklamak için kullanmak istediğimiz ikinci veri kümemiz varsa, kısıtlı bir sıralama kullanmalıyız. Genellikle buradaki seçim CCA'dır, ancak RDA, tür verilerinin daha iyi işlenmesine izin vermek için verilerin dönüştürülmesinden sonra RDA gibi bir alternatiftir.
data(varechem) # load explanatory example data
cca()
İşlevi tekrar kullanıyoruz ancak ya iki veri çerçevesi ( X
türler ve Y
açıklayıcı / tahmin değişkenleri için) ya da sığdırmak istediğimiz modelin biçimini listeleyen bir model formülü sağlıyoruz.
Tüm değişkenleri varechem ~ ., data = varechem
dahil etmek için formül olarak kullanabileceğimiz tüm değişkenleri dahil etmek - ancak yukarıda söylediğim gibi, bu genel olarak iyi bir fikir değil
ccafit <- cca(varespec ~ ., data = varechem)
> ccafit
Call: cca(formula = varespec ~ N + P + K + Ca + Mg + S + Al + Fe + Mn +
Zn + Mo + Baresoil + Humdepth + pH, data = varechem)
Inertia Proportion Rank
Total 2.0832 1.0000
Constrained 1.4415 0.6920 14
Unconstrained 0.6417 0.3080 9
Inertia is mean squared contingency coefficient
Eigenvalues for constrained axes:
CCA1 CCA2 CCA3 CCA4 CCA5 CCA6 CCA7 CCA8 CCA9 CCA10 CCA11
0.4389 0.2918 0.1628 0.1421 0.1180 0.0890 0.0703 0.0584 0.0311 0.0133 0.0084
CCA12 CCA13 CCA14
0.0065 0.0062 0.0047
Eigenvalues for unconstrained axes:
CA1 CA2 CA3 CA4 CA5 CA6 CA7 CA8 CA9
0.19776 0.14193 0.10117 0.07079 0.05330 0.03330 0.01887 0.01510 0.00949
Yukarıdaki sıralamanın üçlüsü plot()
yöntem kullanılarak üretilir
> plot(ccafit)
Tabii ki, şimdi görev, bu değişkenlerden hangisinin gerçekten önemli olduğunu bulmaktır. Ayrıca tür varyansının yaklaşık 2 / 3'ünü sadece 13 değişken kullanarak açıkladığımızı da unutmayın. bu sıralamada tüm değişkenleri kullanmanın sorunlarından biri, örnek ve tür puanlarında kemerli bir konfigürasyon yaratmış olmamızdır;
Bununla ilgili daha fazla bilgi edinmek isterseniz, vegan belgelerine veya çok değişkenli ekolojik veri analizi hakkında iyi bir kitaba göz atın.
Regresyon ile ilişki
RDA ile bağlantıyı göstermek en basitidir, ancak CCA sadece aynıdır, ancak her şey ağırlık olarak satır ve sütun iki yönlü tablo marjinal toplamlarını içerir.
Onun kalbinde, RDA, açıklayıcı değişkenlerin matrisi tarafından verilen öngörücülerle, her tür (yanıt) değerine (bolluk, örneğin) takılan çoklu doğrusal regresyondan takılmış değerler matrisine PCA uygulamasına eşdeğerdir.
R'de bunu şu şekilde yapabiliriz:
## centre the responses
spp <- scale(data.matrix(varespec), center = TRUE, scale = FALSE)
## ...and the predictors
env <- as.data.frame(scale(varechem, center = TRUE, scale = FALSE))
## fit a linear model to each column (species) in spp.
## Suppress intercept as we've centred everything
fit <- lm(spp ~ . - 1, data = env)
## Collect fitted values for each species and do a PCA of that
## matrix
pclmfit <- prcomp(fitted(fit))
Bu iki yaklaşım için Özdeğerler eşittir:
> (eig1 <- unclass(unname(eigenvals(pclmfit)[1:14])))
[1] 820.1042107 399.2847431 102.5616781 47.6316940 26.8382218 24.0480875
[7] 19.0643756 10.1669954 4.4287860 2.2720357 1.5353257 0.9255277
[13] 0.7155102 0.3118612
> (eig2 <- unclass(unname(eigenvals(rdafit, constrained = TRUE))))
[1] 820.1042107 399.2847431 102.5616781 47.6316940 26.8382218 24.0480875
[7] 19.0643756 10.1669954 4.4287860 2.2720357 1.5353257 0.9255277
[13] 0.7155102 0.3118612
> all.equal(eig1, eig2)
[1] TRUE
Nedense maç için eksen puanları (yükleme) alamıyorum, ama her zaman bunlar ölçekli (ya da değil) bu yüzden tam olarak burada nasıl yapıldığını içine bakmak gerekir.
RDA'yı vb . İle rda()
gösterdiğim gibi yapmıyoruz lm()
, ancak lineer model parçası için bir QR ayrıştırması ve ardından PCA kısmı için SVD kullanıyoruz. Ancak gerekli adımlar aynıdır.