Корреспондентрый анализ и анализ главных компонент

  • Сложности при анализе видового состава сообществ при помощи анализа главных компонент
    • Анализ сырых данных
  • Корреспондентный анализ
    • Анализ таблиц сопряженности, хи-квадрат
    • Оси в корреспондентном анализе
    • Интерпретация графиков в корреспондентном анализе

Вы сможете

  • Находить проявление “эффекта подковы” в анализе главных компонент
  • Проводить корреспондентный анализ таблиц сопряженности
  • Объяснить, что именно означает взаиморасположение точек объектов и переменных на графиках результатов корреспондентного анализа
  • Интерпретировать графики результатов корреспондентного анализа

Анализ видового состава сообществ.

Пример: Птицы в лесах Австралии

Обилие 102 видов птиц в 37 сайтах в юго-восточной Австралии (Mac Nally, 1989; данные из Quinn, Keough, 2002). Можно ли описать отношения между сайтами небольшим числом главных компонент?

library(readxl)
birds <- read_excel(path = "data/macnally.xlsx")

# имена переводим в нижний регистр
colnames(birds) <- tolower(colnames(birds))

Задание:

  • Проведите анализ главных компонент и получите вот такую иллюстрацию

Сколько главных компонент имеет смысл рассматривать?

Задание:

  • Оцените информативность компонент и получите вот такую таблицу
## Importance of components:
##                          PC1    PC2    PC3    PC4    PC5    PC6
## Eigenvalue            19.498 9.1959 7.1969 6.8929 5.4321 5.0582
## Proportion Explained   0.191 0.0902 0.0706 0.0676 0.0533 0.0496
## Cumulative Proportion  0.191 0.2813 0.3519 0.4195 0.4727 0.5223
##                          PC7    PC8    PC9   PC10   PC11   PC12
## Eigenvalue            4.5325 4.1694 3.4813 3.2383 3.1052 2.9273
## Proportion Explained  0.0444 0.0409 0.0341 0.0317 0.0304 0.0287
## Cumulative Proportion 0.5667 0.6076 0.6417 0.6735 0.7039 0.7326
##                         PC13  PC14   PC15   PC16   PC17  PC18   PC19
## Eigenvalue            2.4374 2.350 2.1015 1.8649 1.7998 1.737 1.5679
## Proportion Explained  0.0239 0.023 0.0206 0.0183 0.0176 0.017 0.0154
## Cumulative Proportion 0.7565 0.780 0.8002 0.8185 0.8361 0.853 0.8685
##                         PC20   PC21  PC22   PC23   PC24   PC25
## Eigenvalue            1.4452 1.3882 1.328 1.2394 1.1567 1.0998
## Proportion Explained  0.0142 0.0136 0.013 0.0122 0.0113 0.0108
## Cumulative Proportion 0.8827 0.8963 0.909 0.9214 0.9328 0.9436
##                          PC26   PC27    PC28    PC29    PC30    PC31
## Eigenvalue            0.96998 0.8572 0.72980 0.65466 0.55815 0.45997
## Proportion Explained  0.00951 0.0084 0.00715 0.00642 0.00547 0.00451
## Cumulative Proportion 0.95307 0.9615 0.96863 0.97505 0.98052 0.98503
##                          PC32    PC33   PC34    PC35    PC36
## Eigenvalue            0.41396 0.37314 0.2852 0.24243 0.21220
## Proportion Explained  0.00406 0.00366 0.0028 0.00238 0.00208
## Cumulative Proportion 0.98909 0.99275 0.9955 0.99792 1.00000

Задание:

  • Постройте ординацию сайтов и видов в осях 1-й и 2-й главных компонент и получите вот такую иллюстрацию

Решение: PCA и анализ информативности

library(vegan)
bird_pca <- rda(birds[ , -c(1, 2)], scale = TRUE)
# summary(bird_pca)
screeplot(bird_pca,  bstick = TRUE) # график собственных чисел

  • Первые две компоненты объясняют умеренное количество изменчивости

Решение: Факторные нагрузки

biplot(bird_pca, display = "species", scaling = "symmetric", type = "t")

  • У многих переменных факторные нагрузки велики сразу на две оси. Это может быть неудобно.

Решение: Ординация сайтов

Сайты 29 и 14 на самом деле расположены далеко друг от друга и мало похожи. Почему же они сближены на графике?

plot(bird_pca, display = "sites") 

Обратите внимание, ординация сайтов в виде подковы!

  • Так происходит от того, что завышены корреляции между переменными из-за большого числа нулей

Эффект подковы в симулированном примере

Построим искусственный градиент

Эффект подковы в симулированном примере



Для успешного применения анализа главных компонент нужно:

  • Линейные связи между переменными (т.к. матрица корреляций или ковариаций, подразумевает линейность связей)
  • Исключить наблюдения, в которых есть пропущенные значения
  • Если много нулей - трансформация данных
  • Если очень много нулей - удалить такие переменные из анализа (иногда это большая редукция!)
  • Если есть один или несколько пространственных градиентов, то часто лучше отказаться от PCA и использовать другие типы анализов.

Пример: клещи

Клещи-орибатиды на сплавине одного из канадских озер

На площадке 10 х 2.6м взяли стратифицированную случайную выборку (70 проб) на 7 типах субстратов. (Borcard & Legendre 1994).

Oribatid mite

Oribatid mite with a visiting friendly springtail by Andy Murray on Flickr

Peat bog

Tourbière/Peat bog* by peupleloup on Flickr

    • peat bog - зыбун, сплавина (плавина)

Структура данных

library(vegan)
data(mite)
head(mite[, 1:5])
##   Brachy PHTH HPAV RARD SSTR
## 1     17    5    5    3    2
## 2      2    7   16    0    6
## 3      4    3    1    1    2
## 4     23    7   10    2    2
## 5      5    8   13    9    0
## 6     19    7    5    9    3

Задание:

  • Проведите анализ главных компонент, Нарисуйте биплот, сохраняющий эвклидовы расстояния между объектами. Получите вот такие иллюстрации

Решение

mite_pca <- rda(mite)

screeplot(mite_pca, bstick = T)

biplot(mite_pca,  scaling = "sites", type = "t")

PCA vs MDS

mite_mds <- metaMDS(mite, trace = F)

Проблемы PCA:

  • Есть отскакивающее значение
  • Вырисовывается “подкова”

Может лучше MDS?

Pro

  • MDS может работать с любыми данными
  • MDS лучше отражает градиенты

Contra

  • MDS не дает в явном виде информации о связи признаков
  • Оси MDS безлики их информативность не поддается оценке
  • Оси MDS трудно использовать как комплексные признаки
  • Существует третий путь - Корреспондентный анализ

Корреспондентный анализ (Correspondence analysis)

Корреспондентный анализ “в темную”

mite_ca <- cca(mite) 
head(summary(mite_ca))
## 
## Call:
## cca(X = mite) 
## 
## Partitioning of scaled Chi-square:
##               Inertia Proportion
## Total             1.7          1
## Unconstrained     1.7          1
## 
## Eigenvalues, and their contribution to the scaled Chi-square 
## 
## Importance of components:
##                         CA1   CA2   CA3    CA4    CA5    CA6    CA7
## Eigenvalue            0.525 0.227 0.174 0.1266 0.0862 0.0748 0.0669
## Proportion Explained  0.310 0.134 0.103 0.0747 0.0508 0.0441 0.0395
## Cumulative Proportion 0.310 0.444 0.546 0.6209 0.6717 0.7158 0.7553
##                          CA8    CA9   CA10   CA11   CA12   CA13
## Eigenvalue            0.0506 0.0437 0.0332 0.0318 0.0297 0.0283
## Proportion Explained  0.0298 0.0258 0.0196 0.0188 0.0175 0.0167
## Cumulative Proportion 0.7852 0.8109 0.8305 0.8493 0.8668 0.8835
##                         CA14   CA15   CA16    CA17    CA18    CA19
## Eigenvalue            0.0265 0.0222 0.0198 0.01660 0.01587 0.01478
## Proportion Explained  0.0156 0.0131 0.0117 0.00979 0.00936 0.00871
## Cumulative Proportion 0.8991 0.9123 0.9239 0.93371 0.94306 0.95177
##                          CA20    CA21    CA22    CA23    CA24    CA25
## Eigenvalue            0.01252 0.01038 0.00926 0.00784 0.00677 0.00661
## Proportion Explained  0.00738 0.00612 0.00546 0.00462 0.00399 0.00390
## Cumulative Proportion 0.95915 0.96527 0.97073 0.97536 0.97935 0.98324
##                          CA26    CA27    CA28    CA29    CA30    CA31
## Eigenvalue            0.00576 0.00524 0.00451 0.00341 0.00283 0.00249
## Proportion Explained  0.00339 0.00309 0.00266 0.00201 0.00167 0.00147
## Cumulative Proportion 0.98664 0.98972 0.99238 0.99439 0.99606 0.99752
##                          CA32     CA33     CA34
## Eigenvalue            0.00187 0.001296 0.001036
## Proportion Explained  0.00110 0.000764 0.000611
## Cumulative Proportion 0.99863 0.999389 1.000000
## 
## Scaling 2 for species and site scores
## * Species are scaled proportional to eigenvalues
## * Sites are unscaled: weighted dispersion equal on all dimensions
## 
## 
## Species scores
## 
##             CA1     CA2     CA3    CA4     CA5    CA6
## Brachy  -0.4850 -0.0269  0.0710 -0.527  0.2251 -0.283
## PHTH    -0.7073  0.6263 -0.0814 -0.222  0.0565 -0.227
## HPAV     0.0383 -0.4563  0.0134 -0.501 -0.1096 -0.152
## RARD    -1.0186  0.4771 -0.0138 -0.329  0.0326  0.619
## SSTR    -0.3119  0.9674 -0.2970 -0.013 -0.0334 -0.473
## Protopl -0.9513  0.5156 -0.0971 -0.440  0.1526  0.283
## ....                                                 
## 
## 
## Site scores (weighted averages of species scores)
## 
##          CA1   CA2     CA3     CA4     CA5     CA6
## 1    -0.0168 1.157 -0.4971 -0.8842  0.5391 -0.0730
## 2     0.5145 1.312 -0.6516 -0.0679 -0.0357 -0.3244
## 3     0.3397 1.457 -0.4261  0.0141  0.2139 -0.0608
## 4     0.0558 1.062 -0.3103 -0.0548 -0.0528 -0.7883
## 5    -1.1665 0.866 -0.0378 -0.7036  0.0509  0.5125
## 6    -1.1217 0.664  0.1630  0.4605 -0.2840 -0.4938
## ....

Ординация проб

Ординация проб

op <- par(mfrow = c(1, 3))
plot(mite_pca, display = "sites", main = "PCA", type = "p")
plot(mite_mds, display = "sites",  main = "MDS")
plot(mite_ca, display = "sites", type = "p", main = "CA")
par(op)

Cвязь проб и видов

Cвязь проб и видов

op <- par(mfrow = c(1, 2))

plot(mite_ca, display = "sites")
plot(mite_ca, display = "species")

par(op)

Cвязь проб и видов

Можно на одном графике

Cвязь проб и видов

op <- par(mfrow = c(1, 2))

plot(mite_ca, scaling = 2, main = "scaling = 1 (sites)")
plot(mite_ca, scaling = 1, main = "scaling = 2 (species)")
# plot(mite_ca, scaling = 1, main = "scaling = 3 ")

par(op)

Механика корреспондентного анализа

Таблицы сопряжености

В основе CA лежит исследование таблиц сопряженности, которые описывают насколько связаны два явления:

  • Виды (столбцы) и экологические условия (сайты)
  • Фенотипические классы (cтолбцы) и генотипы (строки)
  • Фенотипы (столбцы) и географические выделы (строки)

Таблицы сопряжености

Для примера используем задачку из классической генетики, где анализируется цвет и форма горошин

Пусть наши данные выглядят вот так

Горох Желтый Зеленый
Гладкий 99 42
Морщинистый 29 13

Таблицы сопряжености

Представим эти данные в виде матрицы

peas <- matrix(c(99, 42, 29, 13), byrow = T, ncol = 2)
peas
##      [,1] [,2]
## [1,]   99   42
## [2,]   29   13

В ячейках содержится наблюдаемая частота - O (от “observed”) события X (цвет горошины) при условии события Y (форма горошины).

Мы хотим проверить есть ли связь между этими двумя явлениями.
То есть, на языке генетиков, сцеплены ли гены X и Y.

Таблицы сопряжености

Мы хотим выяснить, являются ли цвет и форма семян независимыми признаками.

Если эти два признака независимы, то наша нулевая модель выглядит так \[ M_0: Ft = Ft\cdot p_{y,w} + Ft \cdot p_{y,s} + Ft \cdot p_{g,w} + Ft \cdot p_{g,s} \]

где
\(Ft\) - общая численность
\(p_{y,w}\) - Вероятность встретить желтых морщинистых
\(p_{y,s}\) - Вероятность встретить желтых гладких
\(p_{g,w}\) - Вероятность встретить зеленых морщинистых
\(p_{g,s}\) - Вероятность встретить желтых гладких

Таблицы сопряжености

Для вычисления ожидаемых частот - E (от “expected”), при условии справедливости нулевой модели, нам нужно сделать следующее:

Найти общую численность семян \(Ft\) - это просто число, равное сумме всех ячеек.

Найти общие численности гладких и морщинистых семян \(f_i\) - это вектор из двух чисел, равных суммам строк (маргинальная сумма строк)

Найти общие численности желтых и зеленых семян \(f_j\) - это вектор из двух чисел, равных суммам столбцов (маргинальная сумма столбцов)

Ft <- sum(peas)

f_i <- apply(peas, 1, FUN = sum)

f_j <- apply(peas, 2, FUN = sum)

Таблицы сопряжености

Горох Желтый Зеленый Сумма \(p_i\)
Гладкий 99 42 141 0.77
Морщинистый 29 13 42 0.23
Сумма 128 55 183
\(p_j\) 0.699 0.301


Оценка вероятности быть гладким: \(p_s = \frac{141} {183}\)

Оценка вероятности быть морщинистым: \(p_w = \frac{42} {183}\)

Оценка вероятности быть желтым: \(p_y = \frac{128} {183}\)

Оценка вероятности быть зеленым: \(p_g = \frac{55} {183}\)

Таблицы сопряжености

В векторном виде

p_i <- f_i / Ft #Вектор вероятностей для формы
p_j <- f_j / Ft #Вектор вероятностей для цвета

Таблицы сопряжености

Вероятности сочетаний признаков

Горох Желтый Зеленый
Гладкий \(p_S \times p_y\) \(p_S \times p_g\)
Морщинистый \(p_w \times p_y\) \(p_S \times p_y\)

Но! в этой таблице легко узнать результат матричного произведения двух векторов

\[ \textbf{a} \cdot \textbf{b} = \begin{pmatrix} p_y \\ p_g \end{pmatrix} \times \begin{pmatrix} p_s & p_w \end{pmatrix} \]

Таблицы сопряжености

Матрица вероятностей сочетаний

q <- p_i %*% t(p_j) 
q
##       [,1]  [,2]
## [1,] 0.539 0.232
## [2,] 0.161 0.069

Матрица ожидаемых частот

round(q * Ft, 1)
##      [,1] [,2]
## [1,] 98.6 42.4
## [2,] 29.4 12.6

Хи-квадрат, как мера сопряженности

Из курса статистики мы помним критерий \(\chi^2\)

\[ \chi_{total}^2 = \sum {\frac{(O_{ij} - E_{ij})^2} {E_{ij}}} \]

Вклад каждой ячейки в формирование общего \(\chi_{total}^2\)

\[ \chi_{ij} = \frac{ (O_{ij} - E_{ij})} {\sqrt E_{ij} } = \sqrt{Ft} \left[\frac {p_{ij} - p_ip_j}{\sqrt{p_ip_j}}\right] \]

\(Ft\) - Сумма всех частот

Здесь \(\frac{(O_{ij} - E_{ij})} {\sqrt{E_{ij}}}\) - стандартизованный остаток от нулевой модели.

Чем больше квадрат остатка, тем сильнее значение отклоняется от нулевой модели, которая предсказывает отсутствие связи. Сумма квадратов этих остатков характеризует общее отклонение от нулевой модели, то есть наличие сопряженности.

Вычисляем \(\chi^2\) вручную

E <- (p_i %*% t(p_j) * Ft)
O <- peas

sum((O-E)^2/E)
## [1] 0.0209

Сравним с результатами специализированной функции

chisq.test(x = O, p = q, correct = F)
## 
##  Pearson's Chi-squared test
## 
## data:  O
## X-squared = 0.02, df = 1, p-value = 0.9

Чем больше значение \(\chi^2\) тем сильнее данные отклоняются от нулевой модели, тем выше сопряженность между двумя явлениями. В случае с горохом общая сопряженность очень низкая (закон Менделя!)

Вернемся к клещам

Струкутра данных

Таблица данных содержит данные по численности 35 видов в 70 пробах.

Нулевая модель предсказывает, что между пробами и видами нет сопряжения, то есть разные виды равновероятно могут встречаться в разных условиях.

Матрица вкладов в формирование общей сопряженности (\(\chi^2\))

\[ \textbf{Q} = \frac {p_{ij} - p_ip_j}{\sqrt{p_ip_j}} = \frac{f_{ij}Ft - f_if_j}{Ft \sqrt{f_if_j}} \]

Матрица Q отличается от матрицы, содержащей \(\chi_{ij}\), только тем, что каждое ее значение разделено на \(\sqrt{Ft}\). То есть это будут стандартизованные значения (что очень полезно, так как собственные значения будут меньше или равны 1).

В этой матрице \(p_i\) и \(p_j\) маргинальные вероятности, то есть

\(p_i\) - Вероятность встретить особь данного вида
\(p_j\) - Вероятность встретить любую особь в данной пробе

\(p_{ij}\) - вероятность встретить особь данного вида в данной пробе

Вычисляем матрицу вкладов в формирование общей сопряженности

Частоты и вероятности

f_ij <- mite #Частота встречи данного вида в данной пробе, то есть это первичные даные!

p_ij <- mite/Ft #вероятность встречи данного вида в данной пробе

q <- p_i %*% t(p_j) #вероятность встретить особь в данной пробе. 

Ft <- sum(mite) #Общее количество найденных животных

f_i <- apply(mite, MARGIN = 1, FUN = sum) #Общее количество особей в каждой пробе

p_i <- f_i/Ft #Вектор вероятностей встретить какую-либо особь в данной пробе

f_j <- apply(mite, MARGIN = 2, FUN = sum) #Общее количество особей в каждом виде

p_j <- f_j/Ft #Вектор вероятностей встретить особь данного вида

Несколько слов о терминах

Матрица относительных частот p_ij для биолога имеет определенный смысл - это оценки вероятностей встречи особи данного вида в данной пробе.

НО! Терминология корреспондентного анализа берет свое начало в прикладной математике, во многом разработанной физиками. В терминологии корреспондентного анализа, суммы по строкам и столбцам в матрице относительных частот называются массой строки и массой столбца.

В прикладной математике у массы есть инерция.

Момент инерции - интеграл элемента массы умноженной на квадрат расстояния до центра масс.

  • Простим - это математикам…

Нулевая модель

Ожидаемые частоты для нулевой модели, то есть при условии, что все пробы и все виды независимы

E <- (p_i %*% t(p_j) * Ft) # Ожидаемые частоты

O <- mite # Наблюдаемые частоты (первичные данные)

Критерий \(\chi^2\)

Chi2 <- sum((O-E)^2/E)
Chi2
## [1] 16621

В нашем случае сопряженность очень большая, то есть виды существуют в некоторой (неслучайной) зависимости от локальных условий (сайтов)

Инерция

Вычислим величину, которую называют нормированным хи-квадратом, или “инерцией”

\[ Inertia = \frac{\chi^2}{Ft} \]

Она показывает удельный вклад каждой особи в формирование общего отклонения от нулевой модели

Inertia <- Chi2/Ft
Inertia
## [1] 1.7

Вычисляем матрицу вкладов в формирование общей сопряженности

\[ \textbf{Q} = \frac {p_{ij} - p_ip_j}{\sqrt{p_ip_j}} = \frac{f_{ij}Ft - f_if_j}{Ft \sqrt{f_if_j}} \]

#Матрица, вычисленная через вероятности
Q1 <- (p_ij - p_i %*% t(p_j))/sqrt(p_i %*% t(p_j)) 

#Та же матрица, вычисленная через частоты
Q <- (f_ij*Ft - f_i %*% t(f_j))/(Ft*sqrt(f_i %*% t(f_j))) 

Сумма квадратов матрицы вкладов в формирование общей сопряженности

Q <- as.matrix(Q)

sum(Q^2)
## [1] 1.7

Это та же самая \(Inertia\)!

Inertia

Инерция - это мера отклонения от нулевой модели!

Чем больше инерция, тем сильнее взаимосвязаны изучаемые явления.

SVD матрицы вкладов в формирование общей сопряженности

Матрица \(\textbf{Q}\) содержит информацию о вкладе каждого вида в каждой пробе в формирование отклонения от нулевой модели, то есть в формирование сопряженности проб и видов.

Вспомним теорему Экарта-Янга

\[ \textbf{Q}_{n \times p} = \textbf{U}_{n \times p} \textbf{D}_{p \times p} \textbf{V}'_{p \times p} \]

То есть, с помощью SVD мы сможем представить матрицу Q как результат произведения трех “вспомогательных” матриц.

Но! эти “вспомогательные” матрицы позволяют редуцировать исходную матрицу.

SVD матрицы вкладов в формирование общей сопряженности

U <- svd(Q)$u 
D <- diag(svd(Q)$d)
V <- svd(Q)$v

Размерности “вспомогательных” матриц

dim(U) 
## [1] 70 35
dim(D)
## [1] 35 35
dim(V)
## [1] 35 35

Проверим восстаналивается ли матрица Q, если использовать “вспомогательные” матрицы, полученные в SVD

Qsvd <- U %*% D %*% t(V) #матрица "восстановленная" из "вспомогательных" матриц 

round(sum(Q - Qsvd)) #разность между исходной и "восстановленной" матрицами
## [1] 0

Матрица исходная и матрица восстановленная совпадают.
Все работает!

Поиск собственных значений и собственых векторов

Однако, разложив исходную матрицу на три “вспомогательных”, мы еще не достигли результата - нам необходимо произвести ординацию в ортогональных осях. Это можно сделать только с помощью собственных чисел и собственных векторов (eigen values decomposition).

Этот анализ можно произвести только на основе квадратной матрицы ковариации.

Как найти матрицу ковариации для матрицы вкладов в формирование общей сопряженности?

Поиск собственных значений и собственых векторов

Вспомним: Собственные числа и собственные векторы мы искали для матрицы ассоциации (ковариации).

Эта матрица \(\textbf{A} = \textbf{X}' \textbf{X}\)

Где \(\textbf{X}\) - это центрированная матрица

Но! Центрованная матрица, по сути, и есть матрица отклонений от нулевой модели.

Нулевая модель в случае эвклдового простраства - Значения признака у всех объектов равны среднему.

Поиск собственных значений и собственых векторов

В случае матрицы сопряжения \(\textbf{Q}\) - это тоже матрица отклонений от нулевой модели, поэтому

\[ \textbf {A} = \textbf{Q}'\textbf{Q} \]

Матрица A - квадратная симметричная матрица

Поиск собственных значений и собственых векторов

A <- t(Q) %*% Q

eig_values <- eigen(A)$values #Собственные числа матрицы A
eig_vectors <- eigen(A)$vectors #Матрица собственных векторов для матрицы A 

Сравним с результатами SVD

qplot(eig_values, diag(D)) + ggtitle("Квадратичная зависимость!" )

Сравним с результатами SVD

Квадраты сингулярных чисел матрицы Q равны собственным значениям матрицы ассоциации

qplot(eig_values, diag(D)^2 ) + geom_abline()

Сравним с результатами SVD

Обратите внимание на две особенности

  1. Собственные значения для матрицы ассоциации A = Q’Q равны квадратам сингулярных чисел для матрицы Q
  2. Последнее собственное значение матрицы A равно нулю! Таково ее свойство (это связано с тем, что частоты в матрице Q центрированы). Поэтому в дальнейшем анализе будет использовано на одно собственное значение меньше.

\(Inertia\) характеризует изменчивость в системе!

Вспомним, что мы вычислили показатель \(Inertia\), как сумму квадратов матрицы Q, или, что тоже самое, \(Inertia\) - это удельный \(\chi^2\). Из этого пока не следует, что \(Inertia\) показывает общую изменчивость в системе.

Вспомним, что общая дисперсия в системе - это сумма собственных значений. Ранее мы вычислили вектор eig_values, содержащий собственные значения матрицы ассоциации A = Q’Q. Найдем сумму всех собственных значений, то есть суммарную дисперсию.

sum(eig_values)
## [1] 1.7

Это в точности значение \(Inertia\)!

Главные оси

Вспомним суть перехода от одной системы координат к другой

Главные оси

В корреспондентном анализе оси, соответствующие собственным значениям матрицы A, называются главными осями (principal axes).

Информативность главных осей оценивается как отношение значения данного собственного числа к сумме собственных чисел, то есть к \(Inertia\)

Information <- data.frame(
  CA = 1:length(eig_values), 
  Eigenval =round(eig_values, 5), 
  Prop_Explained = round(eig_values/sum(eig_values), 5), 
  Cumul_Prop=round(cumsum(eig_values/sum(eig_values)),5)
  )

head(round(Information, 3))
##   CA Eigenval Prop_Explained Cumul_Prop
## 1  1    0.525          0.310      0.310
## 2  2    0.227          0.134      0.444
## 3  3    0.174          0.103      0.546
## 4  4    0.127          0.075      0.621
## 5  5    0.086          0.051      0.672
## 6  6    0.075          0.044      0.716
tail(round(Information, 3))
##    CA Eigenval Prop_Explained Cumul_Prop
## 30 30    0.003          0.002      0.996
## 31 31    0.002          0.001      0.998
## 32 32    0.002          0.001      0.999
## 33 33    0.001          0.001      0.999
## 34 34    0.001          0.001      1.000
## 35 35    0.000          0.000      1.000

Обратите внимание, что последнее собственное значение (№35) равно нулю.

Свойства главных осей

  • Главные оси независимы друг от друга (перпендикулярны)
  • Каждая последующая объясняет меньше общей инерции (общего \(\chi^2\))
  • Всего осей может быть не больше чем минимальное из этих значений: (число строк - 1), (число столбцов - 1). Число осей зависит от меньшего из измерений. Вспомним! Строки и столбцы в матрице, которую мы изучаем равноправны.
  • Первая ось - переменные, которые объясняют максимум зависимости строк от столбцов (значения которых сильнее всего отличаются от ожидаемых для данных объектов)
  • Результаты изображаются в виде точечных графиков, похожих на биплоты.

Scaling

В PCA мера расстояния между точками n-мерном пространстве – эвклидово расстояние

\[ D = \sqrt{\sum(y_{i,j} - y_{i,k})^2} \]

В CA мера расстояния между точками в n-мерном пространстве – расстояние \(\chi^2\)

\[ \chi^2 = \sqrt{ \sum {\frac{1}{f_{+j}/Ft}} \left( \frac{f_{1j}}{f_{1+}} - \frac{f_{2j}}{f_{2+}} \right)^2} \]

Scaling

При ординации в CA должны сохраняться расстояния \(\chi^2\) расстояния

Но строки и столбцы равноправны! Следовательно при совместной ординации надо выбрать способ центрирования: либо по столбцам (scaling = 2, или scaling = “species” ), либо по строкам (scaling = 1, или scaling = “sites”)

scaling 1 сохраняет \(\chi^2\) расстояния между объектами (строками)

scaling 2 сохраняет \(\chi^2\) расстояния между признаками (столбцами)

Нарисуем ординацию проб в первых двух главных осях

Для этого нам понадобятся первые две колонки матрицы U полученной в SVD (они соответствуют первым двум сингулярным числам и, стало быть, первым двум собственным значениям и первым двум собственным векторам).

Поскольку строки и столбцы матрицы Q равнозначны, то существет две точки отсчета, два центроида:

центроид строк (пробы) и центроид колонок(виды)

Координаты центроидов задаются векторами:

Центроид строк (пробы): p_i

Центроид колонок (виды): p_j

Нарисуем ординацию проб в первых двух главных осях

Для вычисления координат проб (объектов, в нашем случае строк исходной матрицы) в главных осях необходимо значения, приведенные в матрице U, разделить на корень из значений координат центроида строк (\(\sqrt{p_i}\)), то есть произвести такую матричную операцию:

\[ \textbf {diag}(p_i)^{-1/2} \times U \]

CA_samples <- diag(p_i^(-1/2))%*% U[,1:2]
library(ggplot2)
Pl_CA_st <- 
  ggplot(as.data.frame(CA_samples), aes(x=V1, y=V2) ) + 
  geom_text(label = rownames(mite)) + 
  geom_hline(yintercept=0, linetype = 2) + 
  geom_vline(xintercept = 0, linetype = 2) + 
  theme_bw() + 
  labs(x= "CA1", y = "CA2")
Pl_CA_st

Нарисуем ординацию видов в первых двух главных осях

Для вычисления координат видов (признаков, в нашем случае столбцов исходной матрицы) в главных осях необходимо значения, приведенные в матрице V разделить на \(\sqrt{p_j}\).
То есть требуется провести следующее умножение матриц

\[ \textbf {diag}(p_j)^{-1/2} \times V \]

CA_species <- diag(p_j^(-1/2))%*% V[,1:2]

Pl_CA_sp <- 
  ggplot(as.data.frame( CA_species), aes(x = V1, y = V2) )  + 
  geom_hline(yintercept=0, linetype = 2) + 
  geom_vline(xintercept = 0, linetype = 2) + 
  theme_bw() + 
  labs(x= "CA1", y = "CA2") + 
  geom_text(label = names(mite))
Pl_CA_sp

Сравним с результатами специализированной функции cca() из пакета vegan

Собственные значения,
вычисленные функцией cca()

summary(cca(mite))$cont$importance [, 1:4]
##                         CA1   CA2   CA3    CA4
## Eigenvalue            0.525 0.227 0.174 0.1266
## Proportion Explained  0.310 0.134 0.103 0.0747
## Cumulative Proportion 0.310 0.444 0.546 0.6209

Собственные значения,
вычисленные вручную

head(round(Information, 3), 4)
##   CA Eigenval Prop_Explained Cumul_Prop
## 1  1    0.525          0.310      0.310
## 2  2    0.227          0.134      0.444
## 3  3    0.174          0.103      0.546
## 4  4    0.127          0.075      0.621

Все аналогично!

Сравним с результатами специализированной функции cca() из пакета vegan

Ординация проб. Все аналогично результатам, полученным вручную!

Сравним с результатами специализированной функции cca() из пакета vegan

Ординация видов. Все аналогично результатам, полученным вручную!

Визуализация результатов CA

Становится виден отчетливый градиент!

Задание

Проведите корреспондентный анализ для данных по птицам Австралии.

Решение

bird_ca <- cca(birds[ , -c(1, 2)], scale = TRUE)
# summary(bird_pca)
screeplot(bird_ca,  bstick = TRUE) # график собственных чисел

Решение

# install.packages("remotes")
# remotes::install_github("gavinsimpson/ggvegan")

library(ggvegan)
autoplot(bird_ca, scaling = "sites") 

Sumary

Принципиальное отличие CA от PCA - это использование матрицы Q вместо матрицы исходных значений.
Матрица Q - это матрица вкладов в формирование отклонения от нулевой гипотезы, говорящей, что сопряжения между явлениями нет.
Вычислительный базис CA - это SVD матрицы Q

Дополнительные ресурсы

  • Borcard, D., Gillet, F., Legendre, P., 2011. Numerical ecology with R. Springer.
  • Legendre, P., Legendre, L., 2012. Numerical ecology. Elsevier.
  • Oksanen, J., 2011. Multivariate analysis of ecological communities in R: vegan tutorial. R package version 2–0.
  • The Ordination Web Page URL http://ordination.okstate.edu/ (accessed 10.21.13).
  • Quinn, G.G.P., Keough, M.J., 2002. Experimental design and data analysis for biologists. Cambridge University Press.
  • Zuur, A.F., Ieno, E.N., Smith, G.M., 2007. Analysing ecological data. Springer.