R

时间:2019-06-04 19:11:52

标签: r time-series logistic-regression lme4 forecast

我想在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()将数据帧转换为时间序列对象。为确保分类变量在过渡过程中不会出现混乱,我一直先将其转换为数字,但是我不确定这是否是处理它们的正确方法,尤其是对于网站ID(在哪里)随机效果出现)。另外,我还不清楚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)

如果我要拟合的模型没有时间序列成分(所以只是在dat上),我会写这样的东西:

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

如何将随机效应纳入该模型?

有什么想法/建议的包/等吗?预先感谢您的帮助!

0 个答案:

没有答案