我正在做一个预测伊拉克省级暴力事件的项目。我所拥有的数据是所有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
答案 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)