glmmTMB с автокорреляцией нерегулярных времен - PullRequest
0 голосов
/ 21 октября 2018

Я собираю модель glmmTMB.У меня есть данные, собранные на одном сайте в течение мая, каждый год, в течение 4 лет.Разрешение по времени в течение года может варьироваться от нескольких минут (или даже одной минуты) до нескольких дней.Ковариационная виньетка говорит, что структура ar1() требует регулярных временных рядов, но структура ou(times + 0 | group) может обрабатывать нерегулярные времена.Тем не менее, похоже, что аргумент times является фактором - как это работает с нерегулярной временной структурой?

Так, например, это правильное использование структуры ou()?

df <- structure(list(DayYear = c(234, 220, 234, 231, 243, 229, 228, 
223, 220, 218, 234, 237, 234, 231, 241, 237, 241, 241, 233, 234, 
234, 232, 218, 227, 232, 229, 220, 223, 228, 224), DateTime =     structure(c(1495477980, 
1399590540, 1495479780, 1495225920, 1464631980, 1495052760, 1463324460, 
1494525780, 1494256560, 1494088440, 1495471320, 1495730940, 1495476960, 
1495225200, 1432919940, 1495725900, 1432924200, 1432918860, 1495384020, 
1495479900, 1463848140, 1495298820, 1399420080, 1463253000, 1463692920, 
1495037040, 1494275160, 1494510780, 1463348220, 1494597180), class =     c("POSIXct", 
"POSIXt"), tzone = ""), Year = c(2017, 2014, 2017, 2017, 2016, 
2017, 2016, 2017, 2017, 2017, 2017, 2017, 2017, 2017, 2015, 2017, 
2015, 2015, 2017, 2017, 2016, 2017, 2014, 2016, 2016, 2017, 2017, 
2017, 2016, 2017), N = c(2, 2, 7, 2, 6, 4, 1, 4, 1, 3, 1, 6, 
2, 2, 2, 2, 5, 5, 3, 5, 3, 2, 4, 1, 6, 2, 2, 3, 5, 2)), row.names = c(NA, 
-30L), class = c("tbl_df", "tbl", "data.frame"))

создание коэффициента выборки в течение года

df <- df %>%
    arrange(DateTime) %>%
    group_by(Year) %>%
    mutate(times = 1:n()) %>%
    ungroup() %>%
    mutate(YearF = as.factor(Year),
            times = numFactor(times))

mod1 <- glmmTMB(N ~ DayYear + YearF + 
            ou(times + 0 | YearF),
            family = nbinom2,
            data = df)

Эта конкретная модель работает не слишком хорошо, потому что набор игрушечных данных очень мал (и, вероятно, не показывает то, что мне нужно показать) -но является ли это правильной спецификацией автокорреляционной структуры при нерегулярных временных рядах?

1 Ответ

0 голосов
/ 21 октября 2018

Нет, это не так: вы должны использовать десятичные значения времени / даты в numFactor.То, как вы это сделали, заставляет набор данных находиться на одинаковом расстоянии.Ниже я использую lubridate::decimal.date(DateTime) %% 1, чтобы получить переменную доли года, которая используется в качестве временной координаты.

library(dplyr)
library(lubridate)
library(glmmTMB)
df2 <- (df
    %>% arrange(DateTime)
    %>% group_by(Year)
    %>% mutate(times = lubridate::decimal_date(DateTime) %% 1)
    %>% ungroup()
)

df3 <- (df2
    %>% mutate(YearF = as.factor(Year),
               times = glmmTMB::numFactor(times))
    %>% select(N, DayYear, YearF, times)
)

mod1 <- glmmTMB(N ~ DayYear + YearF + 
            ou(times + 0 | YearF),
            family = nbinom2,
            data = df3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...