Множественное сравнение данных неподчиняющихся нормальному закону
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 28 июл 2018, 08:40
- Репутация: 13
- Откуда: Киев
Множественное сравнение данных неподчиняющихся нормальному закону
Доброго времени!
Подскажите
1. как провести множественное сравнение данных с участков, которые не подчиняющихся нормальному закону
2. как показать пары данных, которые между собой не различаются. Аналог Tukey’s HSD
Сами данные - результаты выжигания травостоя (DNBR index). Его распределение на рис.
Подскажите
1. как провести множественное сравнение данных с участков, которые не подчиняющихся нормальному закону
2. как показать пары данных, которые между собой не различаются. Аналог Tukey’s HSD
Сами данные - результаты выжигания травостоя (DNBR index). Его распределение на рис.
- Вложения
-
- data.jpeg (75.45 КБ) 5286 просмотров
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
1) слово "сравнение" предполагает наличие групп, нормальность должна быть в группах. Для начала нужно посмотреть распределение в группах, распределение кучи ни о чем не говорит. Возможно, стоит сделать разбиение на однородные кластеры, и посмотреть распределение в них (например, сделать модель Gaussian Mixture)
2) если в группах распределение не нормальное, то есть непараметрические тесты для средних/медиан, им все равно. Плюс поправки, в простейшем случае Бонферони.
3) если распределение в группах поддается описанию (параметризации), то строится линейная модель с ссответствующим распределением, и делается ее анализ. Как минимум есть вариант "все против одного", например сравнение контрольного участка с анализируемыми.
4) данные выложите, чтобы посмотреть
2) если в группах распределение не нормальное, то есть непараметрические тесты для средних/медиан, им все равно. Плюс поправки, в простейшем случае Бонферони.
3) если распределение в группах поддается описанию (параметризации), то строится линейная модель с ссответствующим распределением, и делается ее анализ. Как минимум есть вариант "все против одного", например сравнение контрольного участка с анализируемыми.
4) данные выложите, чтобы посмотреть
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 28 июл 2018, 08:40
- Репутация: 13
- Откуда: Киев
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Заранее прошу простить за возможное некорректное использование терминологии...
1) на рис. одна группа данных.
Такое распределение обусловлено, что высокотравная растительность полегла, деформировалась очень неоднородно.
2) Я попробовал использовать Multiple pairwise-comparison between groups.
4) выкладываю
1) на рис. одна группа данных.
Такое распределение обусловлено, что высокотравная растительность полегла, деформировалась очень неоднородно.
2) Я попробовал использовать Multiple pairwise-comparison between groups.
4) выкладываю
- Вложения
-
- burned_dnestr.csv
- (856.85 КБ) 230 скачиваний
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
поля month;DNBR_03-04;DNBR_02-03;DNBR_01-02 - кто у нас кто, где группы, и чего мы хотим?
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 28 июл 2018, 08:40
- Репутация: 13
- Откуда: Киев
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Горела растительность в феврале, марте, апреле.
Поля DNBR_03-04 - результат расчета по формуле определения выгоревших и контрольных участков по месяцам когда наблюдались пожары.
Выгорел в феврале (DNBR_01-02) участок и надобно показать, что значения, которые рассчитаны для данного участка отличаются от других негоревших и горевших. Т.е. в феврале сравниваем группу month- "Feb" с остальными.
В марте -"March" (DNBR_02-03) и "April" ( DNBR_03-04) с остальными.
Сравнение несгоревших участков между собой нужно для дальнейшей оценки развития растительности в зависимости от локальных условий.
Поля DNBR_03-04 - результат расчета по формуле определения выгоревших и контрольных участков по месяцам когда наблюдались пожары.
Выгорел в феврале (DNBR_01-02) участок и надобно показать, что значения, которые рассчитаны для данного участка отличаются от других негоревших и горевших. Т.е. в феврале сравниваем группу month- "Feb" с остальными.
В марте -"March" (DNBR_02-03) и "April" ( DNBR_03-04) с остальными.
Сравнение несгоревших участков между собой нужно для дальнейшей оценки развития растительности в зависимости от локальных условий.
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
ничего понять не удалось, где группы, где контроль, чего нужно ...
DNBR_02-03 - это какие-то разности, в данном слечае между февралем и мартом. А какой смысл имеет поле month, в котором значения April, Feb, Kontrol, March ?
" Т.е. в феврале сравниваем группу month- "Feb" с остальными." - к чему относится "в феврале"? где группы, которые нужно сравнивать?
У вас есть 4 набора строк (April, Feb, Kontrol, March) и 3 столбца ("DNBR_03.04" "DNBR_02.03" "DNBR_01.02").
Я пока единственное, что могу предположить, что "в феврале" берется столбец DNBR_01.02, и сравнивается группа строк в нем для month == "Feb" с остальными 3 группами. Либо берутся данные из 3 столбцов, строки с month == "Feb". Либо еще что-то
А в данных столбцов смесь, там одна куча около 0, вторая больше нуля. Примерная картинка порождается скриптом
DNBR_02-03 - это какие-то разности, в данном слечае между февралем и мартом. А какой смысл имеет поле month, в котором значения April, Feb, Kontrol, March ?
" Т.е. в феврале сравниваем группу month- "Feb" с остальными." - к чему относится "в феврале"? где группы, которые нужно сравнивать?
У вас есть 4 набора строк (April, Feb, Kontrol, March) и 3 столбца ("DNBR_03.04" "DNBR_02.03" "DNBR_01.02").
Я пока единственное, что могу предположить, что "в феврале" берется столбец DNBR_01.02, и сравнивается группа строк в нем для month == "Feb" с остальными 3 группами. Либо берутся данные из 3 столбцов, строки с month == "Feb". Либо еще что-то
А в данных столбцов смесь, там одна куча около 0, вторая больше нуля. Примерная картинка порождается скриптом
Код: Выделить всё
fn="burned_dnestr.csv"
p=read.table(fn,header=TRUE,sep=";",dec=",",as.is=TRUE)
names(p)
str(p)
# [1] "month" "DNBR_03.04" "DNBR_02.03" "DNBR_01.02"
old.par=par(mfrow=c(1,3))
hist(p$DNBR_03.04,breaks=100,col="gray")
hist(p$DNBR_02.03,breaks=100,col="gray")
hist(p$DNBR_01.02,breaks=100,col="gray")
par(old.par)
# https://www.r-bloggers.com/2011/08/fitting-mixture-distributions-with-the-r-package-mixtools/
library(mixtools)
#========================================================================================================================
# --- распределение
#========================================================================================================================
cur.x = p$DNBR_03.04
cur.mu = c(0,0.2)
cur.sigma = c(0.05,0.05)
cur.fit1 = normalmixEM(cur.x, lambda = NULL, mu = cur.mu, sigma = cur.sigma, k = 2,
mean.constr = NULL, sd.constr = NULL,
epsilon = 1e-08, maxit = 1000, maxrestarts=20,
verb = TRUE, fast=FALSE, ECM = FALSE,
arbmean = TRUE, arbvar = TRUE)
hist(cur.x,breaks=100,col="gray",prob=TRUE)
xx=seq(-0.1,0.4,len=500)
for(i in 1:length(cur.fit1$lambda)) {
ff=cur.fit1$lambda[i]*dnorm(xx,cur.fit1$mu[i],cur.fit1$sigma[i])
points(xx,ff,type="l",col="red",lwd=3)
}
#-----------------------------------------------------------------------------------------
cur.x = p$DNBR_02.03
cur.mu = c(0,0.05,0.2)
cur.sigma = c(0.05,0.05,0.05)
cur.fit2 = normalmixEM(cur.x, lambda = NULL, mu = cur.mu, sigma = cur.sigma, k = 2,
mean.constr = NULL, sd.constr = NULL,
epsilon = 1e-08, maxit = 1000, maxrestarts=20,
verb = TRUE, fast=FALSE, ECM = FALSE,
arbmean = TRUE, arbvar = TRUE)
hist(cur.x,breaks=100,col="gray",prob=TRUE)
xx=seq(-0.4,0.4,len=500)
for(i in 1:length(cur.fit2$lambda)) {
ff=cur.fit2$lambda[i]*dnorm(xx,cur.fit2$mu[i],cur.fit2$sigma[i])
points(xx,ff,type="l",col="red",lwd=3)
}
#-----------------------------------------------------------------------------------------
cur.x = p$DNBR_01.02
cur.mu = c(0,0.2)
cur.sigma = c(0.05,0.05)
cur.fit1 = normalmixEM(cur.x, lambda = NULL, mu = cur.mu, sigma = cur.sigma, k = 2,
mean.constr = NULL, sd.constr = NULL,
epsilon = 1e-08, maxit = 1000, maxrestarts=20,
verb = TRUE, fast=FALSE, ECM = FALSE,
arbmean = TRUE, arbvar = TRUE)
hist(cur.x,breaks=100,col="gray",prob=TRUE)
xx=seq(-0.1,0.4,len=500)
for(i in 1:length(cur.fit1$lambda)) {
ff=cur.fit1$lambda[i]*dnorm(xx,cur.fit1$mu[i],cur.fit1$sigma[i])
points(xx,ff,type="l",col="red",lwd=3)
}
#========================================================================================================================
# --- Месяцы
#========================================================================================================================
table(p$month)
# April Feb Kontrol March
# 14855 3381 2211 8308
# Горела растительность в феврале, марте, апреле.
# Поля DNBR_03-04 - результат расчета по формуле определения выгоревших и контрольных участков по месяцам когда наблюдались пожары.
# Выгорел в феврале (DNBR_01-02) участок и надобно показать, что значения, которые рассчитаны для данного участка отличаются от других негоревших и горевших.
# Т.е. в феврале сравниваем группу month- "Feb" с остальными.
# В марте -"March" (DNBR_02-03) и "April" ( DNBR_03-04) с остальными.
# Сравнение несгоревших участков между собой нужно для дальнейшей оценки развития растительности в зависимости от локальных условий.
cur.month = "Feb"
ind = (p$month == cur.month)
old.par=par(mfrow=c(1,3))
hist(p$DNBR_03.04[ind],breaks=100,col="gray")
hist(p$DNBR_02.03,breaks=100,col="gray")
hist(p$DNBR_01.02,breaks=100,col="gray")
par(old.par)
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
если разложить выборку на смесь, то можно получить распределение для компонент. Насколько я понимаю, интерсует объем (доля) второй. Если есть распределение, то можно просто посчитать оценку среднего, используя как веса вероятности компонент из cur.fit$posterior. Т.е. посмитать взвешенное среднее и дисперсию, а потом сравнить. Или сделать еще сто-то, в зависимости от (пока непонятной) задачи.
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 28 июл 2018, 08:40
- Репутация: 13
- Откуда: Киев
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Их можно считать как контроли. Т.е. смысл в том, что сгоревший участок, например в феврале, сравнить со всеми остальными за этот месяц и показать, что он отличается от них и это не зависит от их местоположения. Аналогично и др. участками.
boxplot (рис1) по февралю как представляю сравнение.
Функция pairwise.wilcox.test показывает, что имеются различия между участками. Надеюсь я его правильно использую.
Возможно такое сравнение излишнее и следовало делать только контроль и сгоревший участок. Однако территория большая локальные условия могут сильно отличаться. Хотя и заняты одной растительностью. Масштаб пожара на картинке.
- Вложения
-
- Макет 1.png (557.33 КБ) 5241 просмотр
-
- pic-1.jpeg (38.19 КБ) 5241 просмотр
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
вы так ничего и не прояснили ...
1) Глядя на последний боксплот можно предположить, что сравнивать нужно группы одного столбца, задаваемые полем month. Но что сравнивать, и с чем, и зачем, непонятно.
2) Ниже скриптик, он показавает распределения по группам столбец:месяц. Они не все унимодальные, и рпспределение перекошенное. Сравнивать средние спысла нет, поскольку средние ничего не говорят о том, что и как выросло (там только столбец 3-4 более-менее унимодальный.
3) возможно, имеет смысл сформулировать задачу в смысле распределений, например сравнивать функции распределения (которые c.d.f или F). Или что-то в этом роде, сравнивая приращения. У вас же явно временной ряд, но непонятно, как получены в нем данные.
1) Глядя на последний боксплот можно предположить, что сравнивать нужно группы одного столбца, задаваемые полем month. Но что сравнивать, и с чем, и зачем, непонятно.
2) Ниже скриптик, он показавает распределения по группам столбец:месяц. Они не все унимодальные, и рпспределение перекошенное. Сравнивать средние спысла нет, поскольку средние ничего не говорят о том, что и как выросло (там только столбец 3-4 более-менее унимодальный.
Код: Выделить всё
month.list=sort(unique(p$month))
var.list = c("DNBR_03.04", "DNBR_02.03", "DNBR_01.02")
old.par=par(mfrow=c(3,4))
for(i.var in 1:3) {
cur.var = var.list[i.var]
cur.x=p[,cur.var]
for(i.month in 1:length(month.list)) {
cur.month = month.list[i.month]
cur.sel = p$month == cur.month
hist(cur.x[cur.sel],breaks=50,col="gray",main=sprintf("%s, %s",cur.var,cur.month))
}
}
par(old.par)
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 28 июл 2018, 08:40
- Репутация: 13
- Откуда: Киев
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Уважаемый gamm! Спасибо за Ваши ответы.
Однако есть некоторое разночтение задачи, ну или я ее внятно не формулирую...
Суть в том, чтобы доказать, что горевший участок отличается от несгоревших. Возможно надо упростить и для DNBR_01-02 убираем всё кроме февраля и контроля и сравниваем их. С использованием Kruskal-Wallis test-а оказываем, что участки различны.
3) В данном случае речь идет о мертвой растительности и изменения в контроле вызваны только влиянием погоды и для нас не интересны.
Для значений вегетационных индексов все, что Вы написали в п.3. будут делаться.
Однако есть некоторое разночтение задачи, ну или я ее внятно не формулирую...
Суть в том, чтобы доказать, что горевший участок отличается от несгоревших. Возможно надо упростить и для DNBR_01-02 убираем всё кроме февраля и контроля и сравниваем их. С использованием Kruskal-Wallis test-а оказываем, что участки различны.
3) В данном случае речь идет о мертвой растительности и изменения в контроле вызваны только влиянием погоды и для нас не интересны.
Для значений вегетационных индексов все, что Вы написали в п.3. будут делаться.
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Попробуйте описать процесс получения данных. Например, о каких участках речь, в присланной таблице их нет. Пока ничего понять нельзя. Обычно помогает рисование абстрактной картинки.
-
- Активный участник
- Сообщения: 190
- Зарегистрирован: 28 июл 2018, 08:40
- Репутация: 13
- Откуда: Киев
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Целью является определение влияния зимне-весеннего выжигания на динамику значений вегетационных индексов болотной растительности по данным дистанционного зондирования.
Были пожары зимой и ранней весной. По спектральным каналам космоснимков для каждого месяца были рассчитан индекс NBR (Нормализованный коэффициент выгорания), затем DNBR (разностный индекс гарей). Особенностью использования данного метода именно для болотной растительности является маленькие различия индексов между горевшей и не сгоревшей территориями. Во вторых развитие растительности на территории исследований происходит неоднородно, что тоже хочется учесть.
Первая задача - показать, что выгоревшие участки, вне зависимости от того когда это произошло, значимо отличаются от не сгоревшей территории вне зависимости от её территориального положения.
Отсюда для февральского пожара (DNBR_01-02) контролем все не сгоревшие участки - март, апрель и контроль. Март (DNBR_02-03) - апрель и контроль, апрель (DNBR_03-04) - контроль (Kontrol). И после того как показали различия между выжженной и не выжженной территориями перейду к индексам.
Были пожары зимой и ранней весной. По спектральным каналам космоснимков для каждого месяца были рассчитан индекс NBR (Нормализованный коэффициент выгорания), затем DNBR (разностный индекс гарей). Особенностью использования данного метода именно для болотной растительности является маленькие различия индексов между горевшей и не сгоревшей территориями. Во вторых развитие растительности на территории исследований происходит неоднородно, что тоже хочется учесть.
Первая задача - показать, что выгоревшие участки, вне зависимости от того когда это произошло, значимо отличаются от не сгоревшей территории вне зависимости от её территориального положения.
Отсюда для февральского пожара (DNBR_01-02) контролем все не сгоревшие участки - март, апрель и контроль. Март (DNBR_02-03) - апрель и контроль, апрель (DNBR_03-04) - контроль (Kontrol). И после того как показали различия между выжженной и не выжженной территориями перейду к индексам.
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Ответа так и нет, кто такие участки, сколько их и как связаны с таблицей. Что объединяет числа в одной строке таблицы, это один и тот же пиксель территории? Или между ними вообще ничего общего? Из данных таблицы есть 12 сочетаний month, столбец. Как они связаны с участками (пикселями территории) и последовательностью пожаров?
Если строка это пиксель, столбец разность индексов между месяцами по всей территории, а month месяц пожара (для kontrol пожара не было), то тут не сравнивать надо, а проверять гипотезу о наличии ступеньки в строке в позиции, соответствующей месяцу строки или типа того. Проблема в том, что, судя по многомодальности, горело все неоднородно, что то недогорело, или вообще не сгорело. И многое зависит от того, как очерчивали пожар.
Если строка это пиксель, столбец разность индексов между месяцами по всей территории, а month месяц пожара (для kontrol пожара не было), то тут не сравнивать надо, а проверять гипотезу о наличии ступеньки в строке в позиции, соответствующей месяцу строки или типа того. Проблема в том, что, судя по многомодальности, горело все неоднородно, что то недогорело, или вообще не сгорело. И многое зависит от того, как очерчивали пожар.
-
- Завсегдатай
- Сообщения: 345
- Зарегистрирован: 11 дек 2006, 09:46
- Репутация: 102
- Откуда: Иркутск
Re: Множественное сравнение данных неподчиняющихся нормальному закону
Исходя из постановки задачи вам вообще не надо делить по месяцам. Просто берёте участки горелые (за все месяца) и негорелые и выносите, для начала, на график в координатах [NBR, DNBR]. Если обе группы будут смешаны до неразличения - значит значимо они не различаются (для данных индексов, о чём вы и говорите), и нужно искать другой подход.
-
- Гуру
- Сообщения: 4064
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1061
- Ваше звание: программист
- Откуда: Казань
Re: Множественное сравнение данных неподчиняющихся нормальному закону
учитывая "кривизну" распределений, можно использать vegan::anosim() и подобные непапаметрические тесты сравнения значений в группах (а не средних или медиан, как упомянутые выше тесты).
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость