Як згадується @amoeba в коментарях, PCA розгляне лише один набір даних, і він покаже вам основні (лінійні) закономірності зміни цих змінних, кореляції або коваріації між цими змінними та зв'язки між зразками (рядки ) у вашому наборі даних.
Те, що зазвичай робиться з набором даних про види та набором потенційних пояснювальних змінних, - це відповідати обмеженій ординації. В PCA основні компоненти, осі біплота PCA, виводяться як оптимальні лінійні комбінації всіх змінних. Якщо ви працювали з цим набором даних хімії ґрунтів зі змінними pH,Са2 +, TotalCarbon, ви можете виявити, що перший компонент був
0,5 × p H + 1,4 × Cа2 ++ 0,1 × T o t a l C a r b o n
і другий компонент
2,7 × p H + 0,3 × Cа2 +- 5,6 × T o t a l C a r b o n
Ці компоненти вільно вибираються із виміряних змінних, і їх обирають такі, що пояснюють послідовно найбільшу кількість варіацій набору даних, і що кожна лінійна комбінація є ортогональною (некорельованою з) іншими.
У обмеженій ординації у нас є два набори даних, але ми не вільні вибирати будь-які лінійні комбінації першого набору даних (дані хімічної речовини ґрунту вище). Натомість нам слід вибрати лінійні комбінації змінних у другому наборі даних, які найкраще пояснюють варіації у першому. Крім того, у випадку PCA, один набір даних є матрицею відповідей, і немає предикторів (ви можете подумати про відповідь як передбачення). У обмеженому випадку у нас є набір даних відповідей, який ми хочемо пояснити набором пояснювальних змінних.
Хоча ви не пояснили, які змінні є відповіддю, зазвичай хочеться пояснити різницю чисельності або складу цих видів (тобто відповідей), використовуючи пояснювальні змінні.
Обмежена версія PCA - це річ, яка в екологічних колах називається Аналіз надмірності (RDA). Це передбачає основу лінійної моделі відповіді для виду, яка або не є доцільною, або лише підходить, якщо у вас короткі градієнти, уздовж яких реагують види.
Альтернативою PCA є річ, яка називається аналіз кореспонденції (CA). Це необмежено, але у нього є основна модель одномодальної реакції, яка є дещо реалістичнішою з точки зору того, як види реагують на більш тривалих градієнтах. Зауважимо також, що моделі CA відносні чисельності або складу , PCA моделює сирі кількості.
Існує обмежена версія СА, відома як аналіз обмеженого або канонічного листування (CCA) - не плутати з більш формальною статистичною моделлю, відомою як канонічний кореляційний аналіз.
І в RDA, і в CCA метою є моделювання варіації чисельності видів або складу у вигляді ряду лінійних комбінацій пояснювальних змінних.
З опису звучить так, що ваша дружина хоче пояснити зміну складу виду міліпея (або його численності) з точки зору інших вимірюваних змінних.
Деякі слова попередження; RDA та CCA - лише багатоваріантні регресії; CCA - це лише зважена багатоваріантна регресія. Все, що ви дізналися про регресію, стосується, і є ще декілька інших проблем:
- в міру збільшення кількості пояснювальної змінної обмежень насправді стає все менше і менше, і ви насправді не видобуваєте компоненти / осі, які оптимально пояснюють склад видів, і
- при CCA, збільшуючи кількість пояснюючих факторів, ви ризикуєте викликати артефакт кривої в конфігурацію точок на графіку CCA.
- теорія, що лежить в основі RDA та CCA, є менш розвиненою, ніж більш формальні статистичні методи. Ми можемо лише обґрунтувати вибір пояснювальних змінних, щоб продовжувати використовувати поетапний вибір (що не ідеально з усіх причин, які нам не подобаються як метод відбору в регресії), і для цього нам потрібно використовувати тести перестановки.
тому моя порада така ж, як і при регресії; заздалегідь подумайте, які ваші гіпотези, і включіть змінні, що відображають ці гіпотези. Не просто кидайте всі пояснювальні змінні в суміш.
Приклад
Нестримне висвячення
PCA
Я покажу приклад порівняння PCA, CA та CCA за допомогою веганського пакету для R, який я допомагаю підтримувати і який призначений для відповідності таким методам виведення:
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)
веган не стандартизує інерцію, на відміну від Каноко, тому загальна дисперсія - 1826, а власні значення знаходяться в тих же одиницях і складають 1826
> 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
Ми також бачимо, що перше власне значення становить приблизно половину дисперсії, а з першими двома осями ми пояснили ~ 80% від загальної дисперсії
> 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
Біплот можна одержати з оцінок зразків та видів на перших двох основних компонентах
> plot(pcfit)
Тут є два питання
- В ординації переважають три види - ці види лежать найдалі від походження - оскільки це найпоширеніші таксони у наборі даних
- В ординації є сильна крива дуга, що говорить про довгий або домінуючий єдиний градієнт, який був розбитий на два основні основні компоненти, щоб підтримувати метричні властивості висвячення.
CA
CA може допомогти з обома цими точками, оскільки він обробляє довгий градієнт краще завдяки моделі одномодальної реакції, і він моделює відносний склад видів, а не сирі чисельності.
Код вегана / R для цього схожий на код PCA, який використовується вище
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)
Тут ми пояснюємо приблизно 40% варіацій між сайтами за їх відносним складом
> 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
Спільний сюжет виду та балів місцевості зараз менше переважає кілька видів
> plot(cafit)
Який із PCA чи CA ви обрали, слід визначати питання, які ви хочете задати даним. Зазвичай з даними про види нас частіше цікавлять різниці у наборі видів, тому СА є популярним вибором. Якщо у нас є набір даних із змінних навколишнього середовища, скажімо, води чи хімії ґрунтів, ми не сподіваємось, що вони реагуватимуть одномодально на градієнтах, тому СА буде недоречним і PCA (кореляційної матриці, що використовується scale = TRUE
у rda()
виклику) буде більш доречним.
Обмежене висвячення; CCA
Тепер, якщо у нас є другий набір даних, який ми хочемо використовувати для пояснення зразків у першому наборі даних про види, ми повинні використовувати обмежену ординацію. Тут часто вибирається CCA, але RDA є альтернативою, як і RDA після трансформації даних, щоб вона могла краще обробляти дані про види.
data(varechem) # load explanatory example data
Ми повторно використовуємо cca()
функцію, але надаємо або два кадри даних ( X
для видів, і Y
для пояснювальних / прогнозних змінних), або формулу моделі з переліком форми моделі, до якої ми хочемо відповідати.
Щоб включити всі змінні, ми могли б використати varechem ~ ., data = varechem
як формулу для включення всіх змінних, але, як я вже говорив вище, це загалом не гарна ідея
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
Триплот вищевказаної ординації виробляється plot()
методом
> plot(ccafit)
Звичайно, тепер завдання полягає в тому, щоб розібратися, яка з цих змінних насправді важлива. Також зауважте, що ми пояснили приблизно 2/3 дисперсії видів, використовуючи лише 13 змінних. Однією з проблем використання всіх змінних у цій ординації є те, що ми створили арочну конфігурацію у вибірці та видових оцінках, що є суто артефактом використання занадто багатьох корельованих змінних.
Якщо ви хочете дізнатися більше про це, ознайомтеся з веганською документацією або хорошою книгою про багатовимірний аналіз екологічних даних.
Зв'язок з регресією
Найпростіше проілюструвати зв'язок з RDA, але CCA точно такий же, за винятком того, що все стосується граничних сум рядків та стовпців з двосторонніми таблицями як ваги.
По суті, RDA є еквівалентним застосуванню PCA до матриці пристосованих значень від множинної лінійної регресії, встановленої для кожного виду (відповіді), величини (відповіді) з прогнозами, заданої матрицею пояснювальних змінних.
У R ми можемо зробити це як
## 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))
Власні значення цих двох підходів рівні:
> (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
З якихось причин я не можу зрівняти показники осей (навантажень), але незмінно вони масштабуються (чи ні), тому мені потрібно розібратися, як саме це робиться тут.
Ми не робимо RDA через те, rda()
як я показав із lm()
тощо, але ми використовуємо розклад QR для частини лінійної моделі, а потім SVD для частини PCA. Але суттєві кроки однакові.