Пример: Поведение песчанок в тесте открытое поле
Гипотеза: Разные виды песчанок различаются по поведению в тесте “Открытое поле”
α — это вероятность совершить ошибку первого рода при тестировании гипотезы (= вероятность отвергнуть истинную нулевую гипотезу, = вероятность найти различия там, где их нет).
Обычно принимается, что H0 отвергают на уровне значимости α=0.05.
α — это вероятность совершить ошибку первого рода при тестировании гипотезы (= вероятность отвергнуть истинную нулевую гипотезу, = вероятность найти различия там, где их нет).
Обычно принимается, что H0 отвергают на уровне значимости α=0.05.
Когда у нас два средних — все просто, сравнение всего одно.
Естественно, вероятность совершить ошибку I рода для группы сравнений αfamilywise равна уровню значимости для единственного сравнения αpercomparison.
αfamilywise=αpercomparison
Но если сравнений много, то растет вероятность совершить хотя бы одну ошибку I рода (найти различия там, где их нет).
Например, если мы хотим попарно сравнить три значения, нам понадобится сделать 3 сравнения.
Пусть мы решили, что в каждом из сравнений будем использовать уровень значимости 0.05.
Например, если мы хотим попарно сравнить три значения, нам понадобится сделать 3 сравнения.
Пусть мы решили, что в каждом из сравнений будем использовать уровень значимости 0.05.
Тогда в каждом из сравнений вероятность совершить ошибку первого рода будет αpercomparison=0.05.
Например, если мы хотим попарно сравнить три значения, нам понадобится сделать 3 сравнения.
Пусть мы решили, что в каждом из сравнений будем использовать уровень значимости 0.05.
Тогда в каждом из сравнений вероятность совершить ошибку первого рода будет αpercomparison=0.05.
Если сделать N тестов, то вероятность совершить хотя бы одну ошибку I рода в группе тестов (family-wise error rate, FWER) значительно возрастает.
αfamilywise=1−(1−αpercomparison)N
αfamilywise=1−(1−αpercomparison)N
В таблице даны значения αfamilywise для разного числа сравнений, если αpercomparison=0.05:
Число средних | Число сравнений | αfamilywise |
---|---|---|
2 | 1 | 0.050 |
3 | 3 | 0.143 |
4 | 6 | 0.265 |
5 | 10 | 0.401 |
α∗percomparison=αfamilywise/N
Это жесткий способ, т.к с возрастанием числа сравнений резко снижается уровень значимости и мощность теста. В результате растет риск не найти различий, где они есть.
Ниже αpercomparison после поправки Бонферрони, сохраняющие αfamilywise=0.05:
Число средних | Число сравнений | αper comparison |
---|---|---|
2 | 1 | 0.050 |
3 | 3 | 0.017 |
4 | 6 | 0.008 |
5 | 10 | 0.005 |
6 | 15 | 0.003 |
Метод Хольма-Бонферрони — это пошаговая процедура.
Чтобы зафиксировать FWER≤αfamilywise:
В таблице ниже даны результаты нескольких сравнений ($N = 5$). С помощью поправки Хольма-Бонферрони для каждого pj мы получим свое скорректированное значение p∗j.
Ранг(j) | pj | N−j+1 | p∗j=min{(N−j+1)⋅pj,1} | Отвергаем H0? |
---|---|---|---|---|
1 | 0.001 | 5 | 0.005 | Да |
2 | 0.010 | 4 | 0.040 | Да |
3 | 0.035 | 3 | 0.105 | Нет, и дальше везде сохраняем H0 |
4 | 0.040 | 2 | 0.080 | Нет |
5 | 0.046 | 1 | 0.046 | Нет |
Рональд Элмер Фишер
Пусть имеется несколько градаций фактора A
(например, A1...3)
Почему появляется межгрупповая изменчивость, то есть разные средние значения для групп по фактору А?
Почему появляется внутригрупповая изменчивость, то есть разные значения y в группах?
A1 | A2 | A3 | |
---|---|---|---|
y11,y12,y13,... | y21,y22,y23,... | y31,y32,y33,... | |
ˉyA1 | ˉyA2 | ˉyA3 | ˉYgen |
SStotal=SSbetween+SSwithin
Чтобы сравнить межгрупповую изменчивость ( SSbetween) и внутригрупповую ( SSwithin), Фишер предложил статистику
F=SSbetween/(a−1)SSwithin/(N−a) где a — число групп.
Если межгрупповая изменчивость равна внутригрупповой ( H0), то F принадлежит F-распределению с двумя параметрами dfbetween=a−1 и dfwithin=N−a, где a — число классов, N — общее количество объектов в анализе.
Выявляется влияние фактора А.
Выявляется влияние фактора А, B и их взаимодействия A × B.
Некоторые дискретные предикторы могут быть иерархически соподчинены.
Выявляется влияние вложенного фактора B внутри градаций фактора A.
Влияние вложенного фактора B можно оценить, но чаще всего оно не представляет интереса для исследователя.
Влияние блокриующего фактора тоже можно оценить, но часто оно не представляет интереса для исследователя. Обычно блокирующий фактор рассматривается как случайный.
Гипотеза: Разные виды песчанок различаются по поведению в тесте “Открытое поле”
Карликовая песчанка (Gerbillus gerbillus)
XV8-Crisis
Монгольская песчанка (Meriones unguiculatus)
Alastair Rae
Жирнохвостая песчанка (Pachyuromys duprasi)
P.H.J. (Peter) Maas / www.petermaas.nl
Гипотеза: Разные виды песчанок различаются по поведению в тесте “Открытое поле”
Карликовая песчанка (Gerbillus gerbillus)
XV8-Crisis
Монгольская песчанка (Meriones unguiculatus)
Alastair Rae
Жирнохвостая песчанка (Pachyuromys duprasi)
P.H.J. (Peter) Maas / www.petermaas.nl
## Данные наблюденийpesch <- read.csv("data/pesch.csv", header = TRUE, sep = ";")head(pesch)
ABCDEFGHIJ0123456789 |
Gender <chr> | Species <chr> | Time_to_entrance <int> | Urination <int> | Defecation <int> | ||
---|---|---|---|---|---|---|
1 | f | karl | 0 | 1 | 0 | |
2 | f | karl | 20 | 0 | 3 | |
3 | m | karl | 181 | 0 | 0 | |
4 | f | karl | 0 | 0 | 0 | |
5 | f | karl | 139 | 0 | 0 | |
6 | m | karl | 0 | 0 | 2 |
Поскольку измеренные признаки варьируют в разных масштабах, целесообразно логарифмировать данные.
options(digits = 4)log_pesch <- peschlog_pesch[, 3:ncol(pesch)] <- log(pesch[, 3:ncol(pesch)] + 1)head(log_pesch)
## Gender Species Time_to_entrance Urination Defecation Quadr_Number## 1 f karl 0.000 0.6931 0.000 3.871## 2 f karl 3.045 0.0000 1.386 5.762## 3 m karl 5.204 0.0000 0.000 5.182## 4 f karl 0.000 0.0000 0.000 3.497## 5 f karl 4.942 0.0000 0.000 5.328## 6 m karl 0.000 0.0000 1.099 3.664## Vert_Number Displ_Act Time_in_Centre## 1 2.485 1.609 0.000## 2 4.078 1.386 1.946## 3 4.025 1.946 1.099## 4 1.792 1.386 0.000## 5 3.401 2.398 1.386## 6 2.303 2.197 0.000
library(ggplot2)library(vegan)theme_set(theme_bw(base_size = 14))mds_pesch <- metaMDS(log_pesch[, 3:ncol(pesch)], distance = "euclidean")mds_pesch <- as.data.frame(mds_pesch$points)mds_pesch$Species <- pesch$Speciesggplot(mds_pesch, aes(x = MDS1, y = MDS2, colour = Species)) + geom_point(size = 5)
Каким способом можно ответить на этот вопрос?
Каким способом можно ответить на этот вопрос?
Каким способом можно ответить на этот вопрос?
Мы могли бы взять каждый из поведенческих признаков отдельно и провести одномерный однофакторный дисперсионный анализ.
Но нас интересует поведение в целом — нужен многомерный анализ.
Примеры:
Примеры:
Варианты решений:
Давно разработан параметрический метод MANOVA (Multivariate Analysis Of Variance). Он дает возможность проводить анализ аналогичный ANOVA. В основе MANOVA лежат представление о многомерном нормальном распределении и расстояниях между центроидами.
В MANOVA сравниваются:
Anderson, 2001
Давно разработан параметрический метод MANOVA (Multivariate Analysis Of Variance). Он дает возможность проводить анализ аналогичный ANOVA. В основе MANOVA лежат представление о многомерном нормальном распределении и расстояниях между центроидами.
В MANOVA сравниваются:
Anderson, 2001
Ограничения MANOVA:
Марти Джейн Андерсон
Сумма квадратов отклонений от центроидов равна сумме квадратов взаимных расстояний, деленной на число объектов
Для Евклидовых расстояний эта закономерность была известна давно (например, Kendall, Stuart 1963).
Anderson, 2001
В случае Евклидова расстояния (именно его имплицитно использует MANOVA) центроиды найти очень просто — это средние значения соответствующих координат. Поэтому обычно сначала непосредственно вычисляли центроиды, и затем — сумму квадратов отклонений от них.
Для других мер различия центроиды найти гораздо сложнее. Например, для коэффициента Брея-Куртиса (не метрика), среднее значение не будет соответствовать центроиду.
MANOVA (Евклидово расстояние)
Anderson, 2001
perMANOVA (любой коэффициент)
Anderson, 2001
Anderson, 2001
Пусть всего N элементов, принадлежащих a группам по n элементов в каждой, d - расстояние между i-тым и j-тым объектами, ϵ - 1 если объекты i и j из одной группы и 0, если из разных.
SStotal=1N∑∑d2ij
Сумма квадратов взаимных расстояний — это сумма квадратов субдиагональных элементов, деленная на число объектов N.
SSwithin=1n∑∑d2ij⋅ϵij
Внутригрупповая сумма квадратов — это сумма всех сумм квадратов расстояний между элементами для каждой группы, деленная на n число объектов в группе.
Тогда межгрупповая сумма квадратов SSbetween=SStotal−SSwithin
F=SSbetween/(a−1)SSwithin/(N−a)
p=NFperm≥FNpermutations
adonis()
)library(vegan)permanova_pesch <- adonis(log_pesch[3:9] ~ Species, data = log_pesch, method = "euclidean")permanova_pesch
## ## Call:## adonis(formula = log_pesch[3:9] ~ Species, data = log_pesch, method = "euclidean") ## ## Permutation: free## Number of permutations: 999## ## Terms added sequentially (first to last)## ## Df SumsOfSqs MeanSqs F.Model R2 Pr(>F) ## Species 2 60 30.02 3.58 0.237 0.012 *## Residuals 23 193 8.39 0.763 ## Total 25 253 1.000 ## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Мы видим традиционную для ANOVA таблицу результатов. Что здесь что?
## ## Call:## adonis(formula = log_pesch[3:9] ~ Species, data = log_pesch, method = "euclidean") ## ## Permutation: free## Number of permutations: 999## ## Terms added sequentially (first to last)## ## Df SumsOfSqs MeanSqs F.Model R2 Pr(>F) ## Species 2 60 30.02 3.58 0.237 0.012 *## Residuals 23 193 8.39 0.763 ## Total 25 253 1.000 ## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## ## Call:## adonis(formula = log_pesch[3:9] ~ Species, data = log_pesch, method = "euclidean") ## ## Permutation: free## Number of permutations: 999## ## Terms added sequentially (first to last)## ## Df SumsOfSqs MeanSqs F.Model R2 Pr(>F) ## Species 2 60 30.02 3.58 0.237 0.012 *## Residuals 23 193 8.39 0.763 ## Total 25 253 1.000 ## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Требуется равенство внутригрупповых дисперсий (гомоскедастичность).
Желательно использование сбалансированных данных (с равным объемом групп), т.к. этом случае perMANOVA устойчив к гетерогенности дисперсии (Anderson, Walsh, 2013).
Для проверки можно использовать функцию betadisper()
, изначально предназначенную для сравнения β-разнообразия сообществ.
Для проверки можно использовать функцию betadisper()
, изначально предназначенную для сравнения β-разнообразия сообществ.
Функция betadisper()
вычисляет внутригрупповые центроиды и координаты точек в пространстве главных координат (Principal Coordinate Analysis = PCoA = metric MDS).
Затем, значимость различий отклонений от центроидов в разных группах проверяется с помощью процедуры PERMDISP2
.
Для проверки можно использовать функцию betadisper()
, изначально предназначенную для сравнения β-разнообразия сообществ.
Функция betadisper()
вычисляет внутригрупповые центроиды и координаты точек в пространстве главных координат (Principal Coordinate Analysis = PCoA = metric MDS).
Затем, значимость различий отклонений от центроидов в разных группах проверяется с помощью процедуры PERMDISP2
.
dist_pesch <- vegdist(log_pesch[,3:ncol(pesch)], method = "euclidean")PCO_pesch <- betadisper(dist_pesch, log_pesch$Species)
Объект, возвращаемый betadisper()
, позволяет также нарисовать наши объекты в пространстве главных координат (PCoA).
plot(PCO_pesch, main = "PCoA ordination")
PERMDISP2
для проверки равенства внутригрупповых дисперсийПроцедура PERMDISP2
реализована в пакете vegan
в функции anova.betadisper()
. Это многомерный аналог теста Левина на гомогенность дисперсий в группах, который иногда используется для проверки условий применимости дисперсионного анализа.
PERMDISP2
для проверки равенства внутригрупповых дисперсийПроцедура PERMDISP2
реализована в пакете vegan
в функции anova.betadisper()
. Это многомерный аналог теста Левина на гомогенность дисперсий в группах, который иногда используется для проверки условий применимости дисперсионного анализа.
anova(PCO_pesch)
## Analysis of Variance Table## ## Response: Distances## Df Sum Sq Mean Sq F value Pr(>F)## Groups 2 9.7 4.86 2.05 0.15## Residuals 23 54.5 2.37
boxplot(PCO_pesch)
На приведенной ординации видно, что точки, соответствующие Монгольским песчанкам расположены отдельно от остальных.
Для выявления попарных различий нужны попарные сравнения.
Внимание! В пакете vegan
пост хок тест не реализован. Но мы можем сделать простейшую его версию самостоятельно.
Карликовая песчанка (Gerbillus gerbillus)
XV8-Crisis
Монгольская песчанка (Meriones unguiculatus)
Alastair Rae
Жирнохвостая песчанка (Pachyuromys duprasi)
P.H.J. (Peter) Maas / www.petermaas.nl
Проведем попарные сравнения между группами, то есть:
pairwise_permanova <- function(dat, group, strata = NULL, ...){ pair <- combn(unique(as.character(group)), 2) ncomb <- ncol(pair) res <- rep(NA, ncomb) for (i in 1:ncomb) { filter <- group %in% pair[, i] if(is.null(strata)){ posthoc <- adonis(dat[filter, ] ~ group[filter], ...)$aov.tab$Pr[1] } else { posthoc <- adonis(dat[filter, ] ~ group[filter], strata = strata[filter], ...)$aov.tab$Pr[1] } res[i] <- posthoc names(res)[i] <- paste(pair[, i], collapse = " vs. ") } return(res)}
p_vals <- pairwise_permanova( dat = log_pesch[, -c(1:2)], group = log_pesch$Species, method = "euclidean", permutations=9999)p_vals
## karl vs. mongol karl vs. zhirnokhvost mongol vs. zhirnokhvost ## 0.0011 0.4029 0.0031
Это все? Пишем статью?
Фото: (1) XV8-Crisis; (2) Alastair Rae; (3) P.H.J. (Peter) Maas / www.petermaas.nl
Мы делали три пары сравнений — нужно ввести поправку для уровня значимости. Будем считать значимыми различия в тех сравнениях, где после введения поправки p<0.05.
Можно посчитать скорректированные значения уровня значимости p с учетом поправки Хольма-Бонферрони.
p.adjust(p_vals, method = "holm")
## karl vs. mongol karl vs. zhirnokhvost mongol vs. zhirnokhvost ## 0.0033 0.4029 0.0062
Выясним, влияет ли пол и вид песчанок на поведение.
Отфильтруем исходные данные (в случае с жирнохвостыми песчанками были изучены только самки)
log_pesch2 <- log_pesch[log_pesch$Species != "zhirnokhvost", ]
Различается ли поведение песчанок в зависимости от видовой принадлежности и пола?
twofact_pesch <- adonis(log_pesch2[,3:ncol(pesch)] ~ Gender * Species, data = log_pesch2, method = "euclidean")twofact_pesch
## ## Call:## adonis(formula = log_pesch2[, 3:ncol(pesch)] ~ Gender * Species, data = log_pesch2, method = "euclidean") ## ## Permutation: free## Number of permutations: 999## ## Terms added sequentially (first to last)## ## Df SumsOfSqs MeanSqs F.Model R2 Pr(>F) ## Gender 1 7.2 7.2 1.13 0.049 0.292 ## Species 1 45.5 45.5 7.16 0.311 0.004 **## Gender:Species 1 4.5 4.5 0.72 0.031 0.529 ## Residuals 14 88.9 6.4 0.608 ## Total 17 146.1 1.000 ## ---## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Различается ли поведение самцов и самок у этих видов песчанок?
nested_pesch <- adonis(log_pesch2[, 3:ncol(pesch)] ~ Gender, data = log_pesch2, strata = log_pesch2$Species, method = "euclidean")nested_pesch
## ## Call:## adonis(formula = log_pesch2[, 3:ncol(pesch)] ~ Gender, data = log_pesch2, method = "euclidean", strata = log_pesch2$Species) ## ## Blocks: strata ## Permutation: free## Number of permutations: 999## ## Terms added sequentially (first to last)## ## Df SumsOfSqs MeanSqs F.Model R2 Pr(>F)## Gender 1 7.2 7.21 0.83 0.049 0.3## Residuals 16 138.9 8.68 0.951 ## Total 17 146.1 1.000
Внимание! Пермутации производятся только в пределах группирующего фактора (аргумент strata
)
simulated_data.csv
(Это данные симулированные по алгоритму, приведенному в справке по функции adonis()
)com <- read.csv("data/simulated_data.csv", sep = ',', header = T)# Ошибочный дизайcom_permanova <- adonis(com[,1:2] ~ com$NO3)# Правильный дизайнcom_permanova2 <- adonis(com[,1:2] ~ com$NO3, strata = com$field)
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 |
Esc | Back to slideshow |