Сравнение групп разной длины в тибле - PullRequest
0 голосов
/ 16 марта 2020

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

Вот упрощенный пример моих данных:

myData <- tibble(
  day = c(1:16),
  TWD = c(0,0,0,0.444,0.234,0.653,0,0,0.789,0.734,0.543,0.843,0,0,0,0),
  Amp = c(0.6644333,0.4990167,0.3846500,0.5285000,0.4525833,0.4143667,0.3193333,0.5690167,0.2614667,0.2646333,0.7775167,3.5411667,0.4515333,2.3781333,2.4140667,2.6979333)
)

В моих данных, TWD> 0 означает, что есть засуха, поэтому я идентифицировал эти периоды.

myData %>%
  mutate(status = case_when(TWD > 0 ~ "drought", 
                           TWD == 0 ~ "normal")) %>%
{. ->> myData} 

Я использовал следующий код, чтобы получить длину отдельных нормальных периодов и периодов засухи

myData$group <- with(myData, rep(seq_along(z<-rle(myData$status)$lengths),z))
with(myData, table(group, status))     

     status
group drought normal
    1       0      3
    2       3      0
    3       0      2
    4       4      0
    5       0      4

Вот где я застрять. В идеале я хотел бы иметь средства Amp для каждого периода засухи и сравнить их со средним значением нормального периода до и после засухи, а затем перейти к следующему периоду засухи. Как я могу сравнить дни, например, групп 1, 2 и 3? Я нашел многообещающее решение здесь Выбор определенного c диапазона дней до события в R , где использовался map(. , function(x) dat[(x-5):(x), ]), но проблема в том, что у меня нет фиксированного количества дней, которые я хочу сравнивать, так как количество дней зависит от продолжительности нормальных периодов и периодов засухи.

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

tibble(value = myData,
    group= myData$group %>%
    nest(value))

, но это создает ошибку, которую я считаю потому что я пытаюсь объединить вектор, а не тибл.

1 Ответ

0 голосов
/ 16 марта 2020

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

pairwise.wilcox.test(myData$Amp, myData$group, p.adjust.method = 'none', alternative = 'greater')

Индексы столбцов и строк - это группы, и в этом случае вы знаете, что четные группы - это периоды "засухи".

Возможно, вам потребуется исправить множественные сравнения (изучив параметр p.adjust.method).

...