使用apply在时间序列子集上运行函数

时间:2013-12-28 21:22:44

标签: r time-series subset apply

我正在做一个预测伊拉克省级暴力事件的项目。我所拥有的数据是所有19个省的四个参数(alpha,lambda,tau和beta)的月度数据。我试图使用R中forecast包中forecast函数控制趋势和季节性组件的线性模型分别预测每个省的四个参数中的每一个(更复杂的模型来:) 。下面的示例代码显示了我对第一个省(Al-Anbar)感兴趣的代码和数量。但是,我想使用apply系列函数为所有省份(每个省的alpha,lambda,tau和beta)采用更简约的方式,而不是逐个进行每个省。例如,我想使用df_list<-split(main_data, provinces)按省对数据进行子集化。然后我想在df_list一个ts对象中声明每个省,然后使用{{1}为每个省份的每个参数(alpha,lambda,tau和beta)运行预测函数功能。有效地提出这方面的任何建议吗?谢谢!

apply

2 个答案:

答案 0 :(得分:1)

使用reshape2将数据设置为长格式,然后从plyr为每个区域应用ddply

library(reshape2)
dat.m <- melt(dat,id.vars=c('date','province'))
library(plyr)

ddply(dat.m,.(province),function(ts){
## each ts looks like this (here for alpha)
## you can process it 
# date province variable      value
# 1 2014-09-21  region1    alpha  0.3981059
# 2 2015-01-06  region1    alpha -0.6120264


})

答案 1 :(得分:0)

感谢agstudy和Roland!所以我使用了ddply的略微修改版本,并且能够使其工作。示例代码如下。再次感谢。

library(plyr)

main_data<-read.csv("Iraq_by_province_2004-2009.csv", header=TRUE)

attach(main_data)


##Alpha
alpha_function = function(x) {
   ts_alpha<-ts(x$alpha, frequency=12, start=c(2004, 7))
    fit_alpha <- tslm(ts_alpha~ trend + season, )
    return(data.frame(forecast(fit_alpha, h=4, level=c(68,95), fan=FALSE,
        ts=TRUE)))               
}

ddply(main_data, .(province), alpha_function)