Loading [MathJax]/jax/output/CommonHTML/jax.js
+ - 0:00:00
Notes for current slide
Notes for next slide

Distance-based Redundancy Analysis, dbRDA

Анализ и визуализация многомерных данных с использованием R

Марина Варфоломеева

Вадим Хайтов

1 / 64

О чем эта лекция

  • Обзор и взаимосвязи методов непрямой и прямой ординации
  • Специфика данных сообществ в связи с ординацией, эффект подковы
  • Экологически-осмысленные трансформации данных
  • PCoA, отрицательные собственные числа и поправки для борьбы с ними
  • tbRDA
  • dbRDA

Вы сможете

  • Выбрать подходящий для данных метод прямой или непрямой ординации
  • Идентифицировать эффект подковы и бороться с ним разными способами
  • Проводить PCoA, tbRDA и dbRDA в R
2 / 64

Подходы к анализу состава сообществ

Вспоминаем, что такое непрямая и прямая ординация

3 / 64

Анализ данных о составе сообществ

Классический подход

PCA

  • Евклидово расстояние
  • Если есть нули в данных, то должны быть “осмысленными”
  • Короткие градиенты. Эффект подковы на счетных данных для длинных градиентов

CA

  • Хи-квадрат расстояние
  • счетные данные, могут быть нули
  • Короткие и длинные градиенты. Эффект дуги на длинных градиентах

1

4 / 64

Иногда можно преобразовать данные

Подход, основанный на трансформации данных

tbPCA — transformation-based PCA

  • Данные —> Расстояние Хеллингера
  • Матрица расстояний —> Трансформация Хеллингера

1

5 / 64

Свобода выбора коэффициентов различия

Многомерное шкалирование

PCoA — метрическое многомерное шкалирование

  • Проекционный метод подобно PCA

nMDS — неметрическое многомерное шкалирование

  • Не проекционный метод, используется информация всех изменений

1

6 / 64

Добавим внешние факторы — прямая ординация

Классический подход

RDA

  • Евклидово расстояние между объектами
  • только “короткие” градиенты; плохо работает на “длинных градиентах”, где много нулей

CCA

  • Хи-квадрат расстояние между объектами
  • и “короткие”, и “длинные” градиенты (с разным таксономическим составом на разных концах)

modified after Fig. 11.4a, p.648 in Legendre, Legendre, 2012 modified after Fig. 11.4, p.648 in Legendre, Legendre, 2012

7 / 64

А если хочется использовать другие коэффициенты?

Подход, основанный на трансформации данных

tbRDA — transformation-based RDA (Legendre, Gallagher, 2001)

  • Данные —> Расстояние Хеллингера
  • Матрица расстояний —> Трансформация Хеллингера

modified after Fig. 11.4ab, p.648 in Legendre, Legendre, 2012 modified after Fig. 11.4, p.648 in Legendre, Legendre, 2012

8 / 64

Но ещё лучше перевести всё в Евклидово пространство

Подход, основанный на расстояниях

dbRDA — distance-based RDA (Legendre, Anderson, 1999)

Можно использовать RDA для неевклидовых коэффициентов, если при помощи PCoA (Principal coordinate analysis) перевести их в Евклидово пространство.

  • Данные —> Матрица расстояний —> PCoA —> RDA

modified after Fig. 11.4ab, p.648 in Legendre, Legendre, 2012 modified after Fig. 11.4, p.648 in Legendre, Legendre, 2012

9 / 64

Все эти методы — это тот же RDA

...но есть новые для нас элементы

  • tb-RDA
    • трансформация хорды
    • трансформация Хеллингера
  • db-RDA
    • PCoA
    • проблемы с отрицательными собственными числами

modified after Fig. 11.4abс, p.648 in Legendre, Legendre, 2012 с изменениями modified after Fig. 11.4, p.648 in Legendre, Legendre, 2012

10 / 64

Длинные градиенты

Что же это значит? В чем проблема с их анализом?

11 / 64

PCA с трансформацией Хелингера

https://youtu.be/DpZpldfnqpo

13 / 64

Пример: Растительность в сосновых лесах,
где пасутся олени

16 / 64

Растительность в сосновых лесах, где пасутся олени

Фрагмент из датасета (Henry et al. 1995).

  • varespec — покрытие 44 видов на 24 участках в северной Финляндии и на Кольском полуострове.
  • varechem — 14 переменных, описывающих условия среды.

(В исходном исследовании была еще информация о выпасе оленей)

Какие факторы среды определяют облик растительного сообщества?

Finnish reindeer

Mathew Schwartz, CC BY 3.0, via Wikimedia Commons

17 / 64

Богатые лишайниками сосновые леса на песчаных почвах. Там пасутся полудомашние олени. Выпас скота влияет на растительность много где, здесь тоже.

nMDS: мхи и лишайники на противоположных концах ординации. Высокая пастбищная нагрузка - в середине.

Знакомство с данными

library("ggplot2")
theme_set(theme_minimal(base_size = 18))
library("cowplot")
library("vegan")
## Loading required package: permute
## Loading required package: lattice
## This is vegan 2.6-2
data("varespec")
data("varechem")
head(varespec, 2)
## Callvulg Empenigr Rhodtome Vaccmyrt Vaccviti Pinusylv Descflex
## 18 0.55 11.13 0 0.00 17.80 0.07 0
## 15 0.67 0.17 0 0.35 12.13 0.12 0
## Betupube Vacculig Diphcomp Dicrsp Dicrfusc Dicrpoly Hylosple
## 18 0 1.6 2.07 0.00 1.62 0.00 0
## 15 0 0.0 0.00 0.33 10.92 0.02 0
## Pleuschr Polypili Polyjuni Polycomm Pohlnuta Ptilcili Barbhatc
## 18 4.67 0.02 0.13 0 0.13 0.12 0
## 15 37.75 0.02 0.23 0 0.03 0.02 0
## Cladarbu Cladrang Cladstel Cladunci Cladcocc Cladcorn Cladgrac
## 18 21.73 21.47 3.50 0.30 0.18 0.23 0.25
## 15 12.05 8.13 0.18 2.65 0.13 0.18 0.23
## Cladfimb Cladcris Cladchlo Cladbotr Cladamau Cladsp Cetreric
## 18 0.25 0.23 0 0 0.08 0.02 0.02
## 15 0.25 1.23 0 0 0.00 0.00 0.15
## Cetrisla Flavniva Nepharct Stersp Peltapht Icmaeric Cladcerv
## 18 0.00 0.12 0.02 0.62 0.02 0 0
## 15 0.03 0.00 0.00 0.85 0.00 0 0
## Claddefo Cladphyl
## 18 0.25 0
## 15 1.00 0
sum(is.na(varespec))
## [1] 0
18 / 64

Задание 1

Сделайте PCA данных о составе сообщества

Сколько изменчивости объясняют первые две главные компоненты?

Нарисуйте график ординации

19 / 64

Решение: PCA данных о составе сообщества

mod_pca <- rda(varespec)
eigenvals(mod_pca)/sum(eigenvals(mod_pca))*100
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11
## 53.84 25.43 7.24 4.05 2.65 2.03 1.41 1.08 0.67 0.57 0.51
## PC12 PC13 PC14 PC15 PC16 PC17 PC18 PC19 PC20 PC21 PC22
## 0.15 0.13 0.08 0.07 0.04 0.02 0.01 0.01 0.00 0.00 0.00
## PC23
## 0.00
biplot(mod_pca, scaling = 2)

20 / 64

Решение: PCA данных о составе сообщества

mod_pca <- rda(varespec)
eigenvals(mod_pca)/sum(eigenvals(mod_pca))*100
## PC1 PC2 PC3 PC4 PC5 PC6 PC7 PC8 PC9 PC10 PC11
## 53.84 25.43 7.24 4.05 2.65 2.03 1.41 1.08 0.67 0.57 0.51
## PC12 PC13 PC14 PC15 PC16 PC17 PC18 PC19 PC20 PC21 PC22
## 0.15 0.13 0.08 0.07 0.04 0.02 0.01 0.01 0.00 0.00 0.00
## PC23
## 0.00
biplot(mod_pca, scaling = 2)

Хорошо заметен “эффект подковы”

20 / 64

Как исправить эффект подковы?

Все варианты основаны на выборе иного коэффициента различия вместо Евклидова расстояния:

  • Корреспондентный анализ, CA (хи-квадрат)
  • Трансформация данных
    • Расстояние Хеллингера
    • Хордальное расстояние
  • Использование другого коэффициента различия
    • Коэффициент Брея-Куртиса
21 / 64

Экологически-осмысленные трансформации

и где они обитают

22 / 64

Распределения обилия видов асимметричны

23 / 64

Широко известный факт, используется в моделях обилия видов (species-abundance models) (обзор моделей см. в работах He, Legendre, 1996, 2002).

Степенные трансформации

y=y0.5; y=y0.25; y=log(y+c), обычно c=1

24 / 64

После этих трансформаций эффект подковы “смазан”

Но он не исчез, т.к. не решена проблема двойных нулей.

op <- par(mfrow = c(1, 3), mar = c(4, 4, 1.5, 0.5), cex = 1)
mod_pca <- rda(varespec)
biplot(mod_pca, scaling = 2, main = "сырые данные")
mod_pca <- rda(sqrt(varespec))
biplot(mod_pca, scaling = 2, main = "квадратный корень")
mod_pca <- rda(log(varespec + 1))
biplot(mod_pca, scaling = 2, main = "логарифм")
par(op)

25 / 64

Хордальное расстояние

Orlóci, 1967 предложил использовать для анализа состава сообществ. Часто использовали в генетике (Cavalli-Sforza, Edwards, 1967).

D3(x1,x2)=2(1pj=1y1jy2jpj=1y21jpj=1y22j)=pj=1(y1jpj=1y21jy2jpj=1y22j)2 [*]

Chord distance

Fig.7.5 Legendre, Legendre, 2012

0D32

  • 2 — нет общих видов
  • 0 — одинаковая доля видов (но не обязательно численность)

= Евклидово расстояние после нормализации по строкам (вектор, деленный на длину вектора)


[*] — Legendre, Legendre, 2012 (коэффициент D3, формула 7.35, стр. 301).

26 / 64

Legendre, Gallagher, 2001 говорят, что лучше расстояние Хеллингера.

Расстояние Хеллингера

Описал Rao, 1995 (на основе интеграла Хеллингера, Hellinger, 1909)

D17(x1,x2)=pj=1[y1jy1+y2jy2+] [*]

0D32

Асимметричный коэффициент (нечувствителен к двойным нулям)

= хордальное расстояние, рассчитанное по корням из обилий видов


[*] — Legendre, Legendre, 2012 (коэффициент D17, формула 7.56, стр. 310)

27 / 64

Трансформация хорды

Fig. 2 in Legendre, Gallagher, 2001

Fig. 2 in Legendre, Gallagher, 2001

yij=yijpj=1y2ij

Тр. хорды + Евклидово расстояние = хордальное расстояние

Трансформация Хеллингера

Fig.7.7 in Legendre, Legendre, 2012 Fig.7.7 in Legendre, Legendre, 2012

yij=yijyi+

Тр. Хеллингера + Евклидово расстояние = расстояние Хеллингера

28 / 64

После трансформаций эффект подковы может исчезнуть

Но не обязательно, он останется, если “длинный градиент”

op <- par(mfrow = c(1, 3), mar = c(4, 4, 1.5, 0.5), cex = 1)
mod_pca <- rda(varespec)
biplot(mod_pca, scaling = 2, main = "сырые данные")
mod_pca <- rda(decostand(varespec, method = "normalize"))
biplot(mod_pca, scaling = 2, main = "хордальное расст.")
mod_pca <- rda(decostand(varespec, method = "hellinger"))
biplot(mod_pca, scaling = 2, main = "расст. Хеллингера")
par(op)

29 / 64

PCoA

Учимся использовать неевклидовы меры различий в ординации

30 / 64

Principal Coordinate Analysis, PCoA

Gower, 1966

= метрическое многомерное шкалирование, классическое шкалирование

Цель: создать Евклидово изображение неевклидова пространства, сохраняя отношения между объектами.

Потенциально можно использовать любую меру различий, даже неевклидову.

Хорошо работает, если исходный коэффициент метрический (выполняется неравенство треугольника). Если неметрический — могут быть проблемы.

31 / 64

PCoA, часть 1

PCoA

Матрицу коэффициентов различия D=[Dhi] преобразуем в матрицу A=[ahi]: ahi=12D2hi

32 / 64

PCoA, часть 2

PCoA

Центрируем матрицу A методом Говера, чтобы получить матрицу Δ1=[δhi]: δhi=ahiˉahˉai+ˉa

  • ˉah и ˉai — среднее по строке и по столбцу A,
  • ˉa — общее среднее матрицы A
33 / 64

В виде матриц это можно записать так: Δ1=(I11n)A(I11n),

  • I — единичная матрица n×n
  • 1 — единичный вектор-столбец длиной n

PCoA, часть 3

PCoA

Спектральное разложение Говеровски-центрированной матрицы Δ1:

  • собственные числа λk
  • нормализованные собственные векторы uk (матрица U)

Собственные векторы умножаются на корень из их собственных чисел. Минимум одно собственное число равно нулю (т.к. Δ1 центрирована).

Исходные переменные можно проецировать в пространство ординации.

34 / 64

После масштабирования собственные векторы длиной квадратный корень из их собственных чисел ukuk=λk.

Исходные переменные не используются в PCA, но их можно спроецировать в пространство ординации. Spc=1(n1)YcYst Uproj=n1SpcΛ0.5 Yc - центрированная матрица данных (или объясняющих переменных). ЕЕ нужно стандартизовать, если переменные в разных шкалах. Может содержать любой набор вспомогательных количественных данных. Ust - Матрица собственных векторов PCoA или ее кусочек (стандартизована по столбцам). Spc - матрица ковариаций Y и Ust Uproj - строки матрицы - это p переменных, которые нужно добавить на биплот, столбцы - это координаты.

PCoA в R

#
#
d_eucl <- vegdist(varespec, method = "euclidean")
mod_pcoa_eucl <- cmdscale(d_eucl, k = nrow(varespec) - 1, eig = TRUE)
ordiplot(mod_pcoa_eucl, type = "t")
## species scores not available

#
varespec_norm <- decostand(varespec, "normalize")
d_chord <- vegdist(varespec_norm, method = "euclidean")
mod_pcoa_chord <- cmdscale(d_chord, k = nrow(varespec) - 1, eig = TRUE)
ordiplot(mod_pcoa_chord, type = "t")
## species scores not available

#
varespec_hel <- decostand(varespec, "hellinger")
d_hel <- vegdist(varespec_hel, method = "euclidean")
mod_pcoa_hel <- cmdscale(d_hel, k = nrow(varespec) - 1, eig = TRUE)
ordiplot(mod_pcoa_hel, type = "t")
## species scores not available

d_bray <- vegdist(varespec, method = "bray")
mod_pcoa_bray <- cmdscale(d_bray, k = nrow(varespec) - 1, eig = TRUE)
## Warning in cmdscale(d_bray, k = nrow(varespec) - 1, eig = TRUE): only
## 15 of the first 23 eigenvalues are > 0
ordiplot(mod_pcoa_bray, type = "t")
## species scores not available

35 / 64

Задание 2

Получите собственные числа из анализа PCoA по матрице коэффициентов Брея-Куртиса.

36 / 64

Решение: Собственные числа

Посмотрите на них внимательно. Что в них странного?

eigenvals(mod_pcoa_bray)
## [1] 1.7552 1.1334 0.4429
## [4] 0.3698 0.2454 0.1961
## [7] 0.1751 0.1284 0.0972
## [10] 0.0760 0.0637 0.0583
## [13] 0.0395 0.0173 0.0051
## [16] 0.0000 -0.0004 -0.0065
## [19] -0.0133 -0.0254 -0.0375
## [22] -0.0480 -0.0537 -0.0741
37 / 64

Решение: Собственные числа

Посмотрите на них внимательно. Что в них странного?

eigenvals(mod_pcoa_bray)
## [1] 1.7552 1.1334 0.4429
## [4] 0.3698 0.2454 0.1961
## [7] 0.1751 0.1284 0.0972
## [10] 0.0760 0.0637 0.0583
## [13] 0.0395 0.0173 0.0051
## [16] 0.0000 -0.0004 -0.0065
## [19] -0.0133 -0.0254 -0.0375
## [22] -0.0480 -0.0537 -0.0741

Отрицательные собственные числа!

37 / 64

Отрицательные собственные числа

Что в них плохого и как с ними бороться

38 / 64

Причины появления отрицательных собственых чисел

  • Использование полуметрических или неметрических мер различия.
  • Пропущенные значения (вернее, их обработка некоторыми коэффициентами: Gower, Estabrook & Rogers, Legendre & Chodorowski)
  • Неевклидовость (non-Euclideanarity, Gower, 1982, 1985)

Отрицательные собственные числа для более высоких измерений, но хорошее отображение в первых нескольких измерениях.

39 / 64

Вспомним определения

Метрики — коэффициенты, у которых есть свойства адекватность, позитивность и симметричность, а так же выполняется неравенство треугольника.

Полуметрики — для них не выполняется неравенство треугольника

Неметрики — могут принимать отрицательные значения (не обладают свойством позитивности)

40 / 64

Вспомним определения

Метрики — коэффициенты, у которых есть свойства адекватность, позитивность и симметричность, а так же выполняется неравенство треугольника.

Полуметрики — для них не выполняется неравенство треугольника

Неметрики — могут принимать отрицательные значения (не обладают свойством позитивности)

Если у коэффициента отсутствуют какие-либо из свойств метрик, то такое пространство не получится изобразить в Евклидовом пространстве. Признаком этого являются отрицательные собственные числа.

Неевклидовы коэффициенты — пространство, описываемое неевклидовым коэффициентом, невозможно описать в Евклидовом пространстве.

40 / 64

Последствия:

Биплоты с разными поправками будут в общих чертах похожи.

Отрицательные собственные числа влияют на вероятность возникновения ошибок I рода в тестах значимости.

41 / 64

Методы коррекции pp. 502-504 in Legendre, Legendre, 2012

Боремся с отрицательными собственными числами

  • Трансформация матрицы различий.

  • Поправка к матрице различий.

42 / 64

Первый вариант — трансформировать матрицу различий

Для некоторых (даже неевклидовых) коэф. различия есть трансформации, которые переводят их в Евклидовы.

43 / 64

Первый вариант — трансформировать матрицу различий

Для некоторых (даже неевклидовых) коэф. различия есть трансформации, которые переводят их в Евклидовы.

Пример для свойств коэффициентов сходства.

Коэф. сходства D=1S D=1S
Евклид.
D=1S
метрика
D=1S
Евклид.
Simple matching метрика нет да да
Жаккард метрика нет да да
Соренсен полуметрика нет да да
Кульчинский неметрика нет нет нет
43 / 64

Первый вариант — трансформировать матрицу различий

Для некоторых (даже неевклидовых) коэф. различия есть трансформации, которые переводят их в Евклидовы.

А этот пример — для коэффициентов различия.

Коэф. различия D D
Евклид.
D
метрика
D
Евклид.
Евклидово расст. метрика да да да
Расст. по Манхеттену метрика нет да да
Расст. хорды метрика да да да
Хи-квадрат метрика да да да
Расст. Хеллингера метрика да да да
Коэф Брея-Куртиса полуметрика нет да да
44 / 64

Table 7.2 in Legendre, Legendre, 2012

Второй вариант — внести поправку

При неевклидовости можно сделать поправку к матрице различий (но не слишком большую):

Caillez correction — добавить константу к суб- и супрадиагональным элементам матрицы различий D.

Завышена вероятность ошибки I рода в ANOVA (Legendre, Anderson, 1999).

Lingoes correction — добавить константу к квадратам суб- и супрадиагональных элементов матрицы различий D.

Несмещенная вероятность ошибки I рода в ANOVA.

45 / 64

see 5.5.1 in Borcard, Legendre, 2018

Поправка Сailliez есть в vegan::cmdscale()

И эта поправка — единственная в cmdscale()

d_bray <- vegdist(varespec, method = "bray")
mod_pcoa_bray <- cmdscale(d_bray, k = nrow(varespec) - 1, eig = TRUE)
eigenvals(mod_pcoa_bray)
## [1] 1.7552 1.1334 0.4429 0.3698 0.2454 0.1961 0.1751 0.1284
## [9] 0.0972 0.0760 0.0637 0.0583 0.0395 0.0173 0.0051 0.0000
## [17] -0.0004 -0.0065 -0.0133 -0.0254 -0.0375 -0.0480 -0.0537 -0.0741
d_bray <- vegdist(varespec, method = "bray")
mod_pcoa_bray_cai <- cmdscale(d_bray, k = nrow(varespec) - 1, eig = TRUE,
add = TRUE) # <<-
eigenvals(mod_pcoa_bray_cai)
## [1] 2.6382 1.7634 0.7727 0.6529 0.4733 0.4214 0.3712 0.2990
## [9] 0.2532 0.2076 0.1932 0.1876 0.1498 0.1112 0.0981 0.0924
## [17] 0.0806 0.0684 0.0434 0.0352 0.0306 0.0209 0.0000 0.0000
46 / 64

Строим график по данным с поправкой Сailliez

Нанесем на график взвешенные средние видов.

ordiplot(scores(mod_pcoa_bray_cai, choices = c(1, 2)), type = "t")
abline(h = 0, lty = 1, lwd = 0.5)
abline(v = 0, lty = 1, lwd = 0.5)
# Взвешенные средние видов
varespec_wa <- wascores(mod_pcoa_bray_cai$points[, 1:2], varespec)
text(varespec_wa, rownames(varespec_wa), cex = 0.7, col = "red")
47 / 64

Задание 3

Нанесите на график ординации проекции переменных среды при помощи envfit().

Используйте только переменные, значимо связанные со структурой сообществ.

48 / 64

Решение: График по данным с поправкой Сailliez

На график нанесены взвешенные средние видов и проекции переменных среды.

ordiplot(scores(mod_pcoa_bray_cai, choices = c(1, 2)), type = "t")
abline(h = 0, lty = 1, lwd = 0.5)
abline(v = 0, lty = 1, lwd = 0.5)
# Взвешенные средние видов
varespec_wa <- wascores(mod_pcoa_bray_cai$points[, 1:2], varespec)
text(varespec_wa, rownames(varespec_wa), cex = 0.7, col = "red")
# Решение 3 -----------------------------------------------------
# Проекции переменных среды ->> таблица
mod_pcoa_bray_cai_env <- envfit(mod_pcoa_bray_cai, varechem)
# Значимые наносим на график
plot(mod_pcoa_bray_cai_env, p.max = 0.05, col = "darkviolet")
# --------------------------------------------------------------
mod_pcoa_bray_cai_env
##
## ***VECTORS
##
## Dim1 Dim2 r2 Pr(>r)
## N 0.135 0.991 0.23 0.059 .
## P 0.487 -0.873 0.27 0.032 *
## K 0.726 -0.687 0.16 0.158
## Ca 0.685 -0.729 0.35 0.008 **
## Mg 0.726 -0.687 0.28 0.027 *
## S 0.211 -0.977 0.11 0.292
## Al -0.987 0.159 0.52 0.002 **
## Fe -0.974 0.225 0.46 0.001 ***
## Mn 0.933 -0.360 0.44 0.004 **
## Zn 0.761 -0.649 0.19 0.114
## Mo -0.706 0.708 0.05 0.590
## Baresoil 0.950 0.312 0.25 0.046 *
## Humdepth 0.914 -0.405 0.45 0.003 **
## pH -0.992 -0.129 0.24 0.057 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## Permutation: free
## Number of permutations: 999
49 / 64

Если нужна поправка Lingoes — ape::pcoa()

library(ape) # здесь есть обе поправки к PCoA
d_bray <- vegdist(varespec, method = "bray")
mod_pcoa_raw <- pcoa(d_bray)
mod_pcoa_raw$values$Eigenvalues
## [1] 1.7552165 1.1334455 0.4429018
## [4] 0.3698054 0.2453532 0.1960921
## [7] 0.1751131 0.1284467 0.0971594
## [10] 0.0759601 0.0637178 0.0583225
## [13] 0.0394934 0.0172699 0.0051011
## [16] 0.0000000 -0.0004131 -0.0064654
## [19] -0.0133147 -0.0253944 -0.0375105
## [22] -0.0480069 -0.0537146 -0.0741390
biplot.pcoa(mod_pcoa_raw, varespec)

mod_pcoa_cai <- pcoa(d_bray,
correction = "cailliez")
mod_pcoa_cai$values$Corr_eig
## [1] 2.63820 1.76344 0.77272
## [4] 0.65286 0.47325 0.42136
## [7] 0.37118 0.29904 0.25324
## [10] 0.20761 0.19322 0.18756
## [13] 0.14980 0.11123 0.09814
## [16] 0.09244 0.08057 0.06839
## [19] 0.04338 0.03522 0.03057
## [22] 0.02086 0.00000 0.00000
biplot.pcoa(mod_pcoa_cai, varespec)

mod_pcoa_lin <- pcoa(d_bray,
correction = "lingoes")
mod_pcoa_lin$values$Corr_eig
## [1] 1.82936 1.20758 0.51704
## [4] 0.44394 0.31949 0.27023
## [7] 0.24925 0.20259 0.17130
## [10] 0.15010 0.13786 0.13246
## [13] 0.11363 0.09141 0.07924
## [16] 0.07373 0.06767 0.06082
## [19] 0.04874 0.03663 0.02613
## [22] 0.02042 0.00000 0.00000
biplot.pcoa(mod_pcoa_lin, varespec)

50 / 64

Сравнение методов непрямой ординации

PCA

  • Короткие градиенты
  • Евклидово расстояние. Нужны “осмысленные” нули (double-zero problem).
  • Представляет отношения между объектами в Евклидовом пространстве
  • Главные компоненты — функции исходных признаков

PCoA

  • “Теряет” информацию о неевклидовой части матрицы D (Legendre, Legendre, 2012)
  • Линейная трансформация расстояний между объектами: главные координаты — функции исходных признаков, выраженных посредством расстояний

CA

  • Короткие и длинные градиенты
  • Хи-квадрат

nMDS

  • Лучше отображает многомерное пространство, чем PCoA.
  • Сохраняются ранги расстояний между объектами.
  • Нелинейная трансформация между объектами.
51 / 64

Это всё была непрямая ординация

А дальше — прямая ординация

52 / 64

tbRDA

RDA по трансформированным данным

53 / 64

Transformation-based RDA, tbRDA

tbRDA

54 / 64

Функция для рисования графиков ординации в ggplot

# ordiggplot Рисует график ординации из vegan в ggplot
ordiggplot <- function(mod, lab_size = 5, lab_var_size = 6,
line_size = 0.5, point_size = 2,
plot_sites = TRUE, plot_species = TRUE,
plot_centroids = TRUE, plot_biplot = TRUE,
plot_factorbiplot = TRUE, ...){
mod_dat <- scores(mod, tidy = TRUE, ...)
ax_names <- colnames(mod_dat)[1:2]
names(mod_dat)[1:2] <- c("X", "Y")
mod_eig <- round(eigenvals(mod) / mod$tot.chi * 100, 2)
ar <- arrow(angle = 10, length = unit(2, "mm"), type = "closed")
gg <- ggplot() +
geom_hline(yintercept = 0, colour = "grey70", size = 0.25) +
geom_vline(xintercept = 0, colour = "grey70", size = 0.25)
if(any(mod_dat$score == "sites" & plot_sites)) {
gg <- gg +
geom_point(data = filter(mod_dat, score == "sites"),
aes(x = X, y = Y), size = point_size) +
geom_text(data = filter(mod_dat, score == "sites"),
aes(x = X, y = Y, label = label),
size = lab_size, hjust = -0.7,
colour = "grey40")
}
if(any(mod_dat$score == "species" & plot_species)) {
gg <- gg +
geom_segment(data = filter(mod_dat, score == "species"),
aes(x = 0, y = 0, xend = X, yend = Y),
size = line_size, colour = "orangered", arrow = ar) +
geom_text(data = filter(mod_dat, score == "species"),
aes(x = X, y = Y, label = label),
size = lab_size, hjust = 1.3, vjust = 0.4,
colour = "orangered")
}
if(any(mod_dat$score == "centroids" & plot_centroids)) {
gg <- gg + geom_point(data = filter(mod_dat, score == "centroids"),
aes(x = X, y = Y),
shape = 13, size = 3,
colour = "grey20") +
geom_text(data = filter(mod_dat, score == "centroids"),
aes(x = X, y = Y, label = label),
size = lab_var_size, hjust = -0.2,
colour = "grey20")
}
if(any(mod_dat$score == "factorbiplot" & plot_factorbiplot)) {
gg <- gg + geom_point(data = filter(mod_dat, score == "factorbiplot"),
aes(x = X, y = Y),
shape = 19, size = 0.5,
colour = "blue") +
geom_text(data = filter(mod_dat, score == "factorbiplot"),
aes(x = X, y = Y, label = label),
size = lab_var_size, hjust = -0.2,
colour = "blue")
}
if(any(mod_dat$score == "biplot" & plot_biplot)) {
gg <- gg + geom_segment(data = filter(mod_dat, score == "biplot"),
aes(x = 0, y = 0, xend = X, yend = Y),
size = line_size, colour = "blue", arrow = ar) +
geom_text(data = filter(mod_dat, score == "biplot"),
aes(x = X, y = Y, label = label),
size = lab_var_size, hjust = -0.2,
colour = "blue")
}
gg + coord_cartesian() +
labs(x = paste0(ax_names[1], " (", mod_eig[1], "%)"),
y = paste0(ax_names[2], " (", mod_eig[2], "%)"))
}
55 / 64

tbRDA с расстоянием Хеллингера

mod_tbrda <- rda(decostand(varespec, method = 'hellinger') ~
Mn + Baresoil + N, data = varechem)
eigenvals(mod_tbrda)/sum(eigenvals(mod_tbrda))
## RDA1 RDA2 RDA3 PC1 PC2 PC3 PC4 PC5
## 0.21529 0.07364 0.03424 0.22379 0.14284 0.07402 0.05034 0.04629
## PC6 PC7 PC8 PC9 PC10 PC11 PC12 PC13
## 0.02925 0.02751 0.02027 0.01602 0.01328 0.00973 0.00641 0.00517
## PC14 PC15 PC16 PC17 PC18 PC19 PC20
## 0.00351 0.00265 0.00166 0.00161 0.00120 0.00087 0.00039
# ordiggplot(mod_tbrda, scaling = 1)
ordiggplot(mod_tbrda, scaling = 2) + aes(colour = varechem$Mn)

anova(mod_tbrda, by = "mar")
## Permutation test for rda under reduced model
## Marginal effects of terms
## Permutation: free
## Number of permutations: 999
##
## Model: rda(formula = decostand(varespec, method = "hellinger") ~ Mn + Baresoil + N, data = varechem)
## Df Variance F Pr(>F)
## Mn 1 0.0492 3.99 0.004 **
## Baresoil 1 0.0303 2.46 0.036 *
## N 1 0.0225 1.83 0.112
## Residual 20 0.2468
## ---
## Signif. codes:
## 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
56 / 64

dbRDA

Карт-бланш (ну, почти) на коэффициенты различия

57 / 64

Distance-based RDA, dbRDA

Используется для анализа “неевклидовых” матриц различия

Для количественных признаков:

  • асимметричный коэф. Говера
  • коэф Уиттакера
  • расстояние Канберра
  • коэф. Брея-Куртиса, и т.п.

Для бинарных признаков:

  • коэф. Соренсена
  • коэф. Жаккара, и т.д.

Для других типов данных:

  • симметричный коэф. Говера
  • коэф. Эстабрука-Роджерса
  • обобщенное расстояние Махаланобиса для групп

dbRDA

58 / 64

Legendre, Legendre, 2012

Два варианта расчетов dbRDA в vegan

Классический вариант
(Legendre, Anderson, 1999)

vegan::capscale() — смещенная вероятность ошибки I рода в многофакторных ANOVA.

  • Caillez correctionadd = "cailliez"
  • Lingoes correctionadd = "lingoes"

Новый вариант
(McArdle, Anderson, 2001)

vegan::dbRDA() — правильная вероятность ошибки I рода в многофакторных ANOVA.

  • Виды нельзя добавить непосредственно на график.

dbRDA

59 / 64

dbRDA по матрице коэффициентов Брея-Куртиса

mod_dbrda_lingoes <- capscale(varespec ~ Mn + Baresoil + N,
distance = "bray", data = varechem, add = TRUE)
eigenvals(mod_dbrda_lingoes)/sum(eigenvals(mod_dbrda_lingoes))
## CAP1 CAP2 CAP3 MDS1 MDS2 MDS3 MDS4 MDS5
## 0.16464 0.07210 0.05017 0.16860 0.13427 0.07332 0.05147 0.04711
## MDS6 MDS7 MDS8 MDS9 MDS10 MDS11 MDS12 MDS13
## 0.03875 0.03134 0.02587 0.02299 0.02057 0.01895 0.01589 0.01378
## MDS14 MDS15 MDS16 MDS17 MDS18 MDS19 MDS20
## 0.01259 0.01080 0.00971 0.00668 0.00573 0.00339 0.00128
# ordiggplot(mod_dbrda_lingoes, scaling = 1)
ordiggplot(mod_dbrda_lingoes, scaling = 2) + aes(colour = varechem$Mn)

anova(mod_dbrda_lingoes, by = "mar")
## Permutation test for capscale under reduced model
## Marginal effects of terms
## Permutation: free
## Number of permutations: 999
##
## Model: capscale(formula = varespec ~ Mn + Baresoil + N, data = varechem, distance = "bray", add = TRUE)
## Df SumOfSqs F Pr(>F)
## Mn 1 0.70 3.16 0.003 **
## Baresoil 1 0.51 2.29 0.026 *
## N 1 0.42 1.91 0.050 *
## Residual 20 4.46
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
60 / 64

Summary

  • Данные, описывающие состав сообщества:
    • имеют асимметричное распределение,
    • содержат много нулей,
    • нули не имеют особого смысла (виды отсутствуют по разным причинам).
61 / 64

Summary

  • Данные, описывающие состав сообщества:

    • имеют асимметричное распределение,
    • содержат много нулей,
    • нули не имеют особого смысла (виды отсутствуют по разным причинам).
  • В силу этих свойств:

    • для описания сообществ не подходит Евклидово расстояние,
    • для данных, собранных вдоль длинных экологических градиентов, на ординации может возникать эффект подковы.
61 / 64

Summary

  • Данные, описывающие состав сообщества:

    • имеют асимметричное распределение,
    • содержат много нулей,
    • нули не имеют особого смысла (виды отсутствуют по разным причинам).
  • В силу этих свойств:

    • для описания сообществ не подходит Евклидово расстояние,
    • для данных, собранных вдоль длинных экологических градиентов, на ординации может возникать эффект подковы.
  • Экологические данные можно трансформировать:

    • степенные трансформации избавят от асимметрии
    • есть трансформации, позволяющие уйти от Евклидова расстояния
    • некоторые неевклидовы коэффициенты трансформируются в Евклидовы.
61 / 64

Summary

  • Данные, описывающие состав сообщества:

    • имеют асимметричное распределение,
    • содержат много нулей,
    • нули не имеют особого смысла (виды отсутствуют по разным причинам).
  • В силу этих свойств:

    • для описания сообществ не подходит Евклидово расстояние,
    • для данных, собранных вдоль длинных экологических градиентов, на ординации может возникать эффект подковы.
  • Экологические данные можно трансформировать:

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

  • Благодаря PCoA можно использовать в dbRDA любые коэффициенты различия.
61 / 64

Задание: Рыбы в реке Ду, Франция

62 / 64

Рыбы в реке Ду, Франция

Данные из Borcard et al., 2011, исходно из PhD диссертации Verneaux (1973).

Verneaux (1973) предложил использовать сообщества рыб в качестве индикаторов состояния рек и ручьев.

  • doubs$fish — Обилие 27 видов рыб в 30 точках на реке Ду
  • doubs$env — 11 характеристик условий среды
  • doubs$xy — Координаты точек

Проанализируйте, какие факторы среды определяют облик сообществ рыб в реке Ду, если удалить влияние географической близости точек сбора.

data("doubs", package = "ade4")
help("doubs", package = "ade4")

Lac des Brenets, Canton of Neuchâtel Schaffhausen, Public domain, via Wikimedia Commons

63 / 64

Река Ду - приток Соны. Находится на юго-востоке Франции (Бургундия) и западе Швейцарии. Исток в горах Юра.

По итогам диссертации Верно предложил классифицировать на 4 зоны:

  • зона форели (trout zone) — ненарушенные, хорошо оксигенированные и олиготрофные
  • grayling zone,
  • barbel zone,
  • bream zone — эвтрофные и бедные кислородом воды

Verneaux, J. (1973) Cours d’eau de Franche-Comté (Massif du Jura). Recherches écologiques sur le réseau hydrographique du Doubs. Essai de biotypologie. Thèse d’état, Besançon. 1–257.

Borcard, D., Gillet, F. & Legendre, P. (2011) Numerical Ecology with R. Springer, UseR! Edition.

Что почитать

  • Legendre P., Legendre L. (2012) Numerical ecology. Second english edition. Elsevier, Amsterdam.
  • Oksanen, J. (2022). Design decisions and implementation details in vegan. Vignette of the package vegan. R package version 2.6-2.
64 / 64

О чем эта лекция

  • Обзор и взаимосвязи методов непрямой и прямой ординации
  • Специфика данных сообществ в связи с ординацией, эффект подковы
  • Экологически-осмысленные трансформации данных
  • PCoA, отрицательные собственные числа и поправки для борьбы с ними
  • tbRDA
  • dbRDA

Вы сможете

  • Выбрать подходящий для данных метод прямой или непрямой ординации
  • Идентифицировать эффект подковы и бороться с ним разными способами
  • Проводить PCoA, tbRDA и dbRDA в R
2 / 64
Paused

Help

Keyboard shortcuts

, , Pg Up, k Go to previous slide
, , Pg Dn, Space, j Go to next slide
Home Go to first slide
End Go to last slide
Number + Return Go to specific slide
b / m / f Toggle blackout / mirrored / fullscreen mode
c Clone slideshow
p Toggle presenter mode
t Restart the presentation timer
?, h Toggle this help
oTile View: Overview of Slides
sToggle scribble toolbox
Esc Back to slideshow