Модель смешанных эффектов на временных рядах в R - PullRequest
1 голос
/ 04 июня 2019

Я хочу запустить модель логистической регрессии со смешанными эффектами для временного ряда в R, чтобы определить, какие переменные-предикторы являются значимыми и различаются ли они по значимости во временных рядах.У меня есть двоичные данные о том, была ли точка пожара или нет в каждом году (переменная отклика) с 1991-2001 гг. Для нескольких тысяч точек, а также некоторые непрерывные и категориальные предикторы (пример непрерывных предикторов: высота, осадки; примеркатегориального предиктора: внутри или снаружи национального леса).Я хочу включить случайный эффект сайта, поскольку в переменной ответа могут быть специфические для сайта вариации.

Я хочу знать влияние каждого предиктора на вероятность того, что сайт сгорел в каждом году,но у меня возникают проблемы с выяснением того, как 1) сделать объект временного ряда, который включает в себя категориальные переменные и несколько единиц выборки по времени, и 2) включить случайные эффекты в модель.Я пытался использовать функцию tsml () из пакета прогноза, но я открыт для других предложений!По сути, я хочу построить модель так, как я бы использовал glmer (из пакета lme4), но с временным рядом, где, как мне кажется, могут быть лаги и циклические тренды, которые я хочу уловить.

Вот некоторые смоделированные данные.Важнейшими компонентами являются то, что мои данные имеют ежегодные наблюдения для двоичной переменной отклика (независимо от того, сгорел ли сайт), переменные непрерывного предиктора, которые меняются со временем (например, количество осадков), переменные непрерывного предиктора, которые являются статическими (например, высота)и категориальная переменная-предиктор, которая является статической (где точка находится в национальном лесу) для многих сайтов (идентифицируется с помощью site_id):

### Load packages
library(forecast)
library(lme4)

### Make data
year <- rep(1991:2001, 5)
site_id <- rep(1:5, each = 11)
binary_resp <- rpois(n = 55, lambda = 0.5)
categorical_predictor <- rep(c(1, 1, 0, 1, 0), each = 11)
elevation <- rep(rnorm(n = 5, mean = 100, sd = 20), each = 11)
precipitation <- rep(rnorm(n = 55, mean = 70, sd = 10))

### Replace any value in binary_resp > 1 with 1
binary_resp <- replace(binary_resp, binary_resp > 1, 1)

### Specify factors
site_id <- factor(site_id)
categorical_predictor <- factor(categorical_predictor)

### Combine into dataframe
dat <- data.frame(year, site_id, binary_resp, categorical_predictor,
                  elevation, precipitation)

Я использовал ts () для преобразования кадра данных вобъект временного ряда.Чтобы убедиться, что категориальные переменные не становятся шаткими при переходе, я сначала конвертировал их в числовые, но я не уверен, что это правильный способ обработки, особенно для идентификаторов сайтов (гдеслучайные эффекты входят).Кроме того, мне немного неясно, может ли ts () вместить несколько единиц во времени (примеры, которые я видел, обычно имеют только одну единицу времени, а не данные панели).

### Make factors into numeric
dat$binary_resp <- as.numeric(as.character(dat$binary_resp))
dat$site_id <- as.numeric(as.character(dat$site_id))
dat$categorical_predictor <- as.numeric(as.character(dat$categorical_predictor))

### Convert to time series
dat_ts <- ts(dat, start = c(1991, 1), end = c(2001, 11), frequency = 1)

ЕслиЯ подгонял модель без компонента временного ряда (поэтому только по датам), я бы написал что-то вроде этого:

data_fit <- lmer(binary_resp ~ categorical_predictor + elevation + precipitation + (1|site_id), data = dat)

Как я могу перевести эту структуру в TSLM?Я попытался

dat_lm <- tslm(binary_resp ~ categorical_predictor + elevation + precipitation + (1|site_id), data = dat_ts)

и получил ошибку:

Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 55, 21
In addition: Warning message:
In Ops.factor(1, site_id) : ‘|’ not meaningful for factors

Как включить случайные эффекты в эту модель?

Есть идеи / предлагаемые пакеты / и т. Д.?Заранее спасибо за помощь!

...