微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用R数据帧,动物园和结果上的实际日期进行预测

我有一个CSV值,例如

ref_date;wings;airfoil;turbines
2015-03-31;123,22;22,77;99,0
2015-04-30;123,22;28,77;99,0
2015-05-31;123,22;22,177;02,0
2015-06-30;56,288;22,77;99,0

我读到一个数据帧,并将其转换为时间序列,

df_agg = aggregate(df$wings, by=list(date=df$ref_date), FUN=mean)
df_agg['date'] = as.Date(df_agg[['date']], format='%Y-%m-%d')
tt = xts(df_agg[,c('x')], order.by=df_agg$date)

所以现在我有了tt,一个xts对象.要使用预测包,我必须将其转换为ts对象,因此我使用zoo:

pred = forecast(zoo(tt))

df_pred = as.data.frame(pred)

但是,要想得到带有日期而不是数字序列的列的结果,我必须将其转换为

zoo(df_pred, as.Date(as.numeric(rownames(df_pred))))

现在我得到的结果是

             Forecast  Lo 80    Hi 80    Lo 95    Hi 95
2015-07-30   12          10      15      11       14
2015-08-31   13.4        11      15.4    11.2     13

有没有一种方法可以完成此任务而不必在数据框,xts,zoo,ts和Zoo之间再次来回移动?

在Python中,这类似于

 from statsmodels.api import sm
 df = pd.read_csv(file_csv)
 df.index = pd.to_datetime(df.date, format='%Y-%m-%d')
 y_pred = sm.ARIMA(df)

解决方法:

1)动物园预测软件包的开发版本具有as.ts.forecast,而Zoo的开发版本(将变为Zoo版本1.8.0)具有增强的as.zoo.ts,认情况下,ts系列使用yearmon / yearqtr,频率分别为4和12.这些都将使问题代码的编写更为紧凑.由于预测程序包没有对非ts时间序列的明确支持,因此定义了一种简单的单线Zoo方法进行预测.然后使用read.zoo读取数据.为了使结尾处的注释中的数据保持独立,我们使用text = Lines,但实际上它将被myfile.dat之类的东西代替. read.zoo命令也将yearmon类应用于索引并使用均值对其进行汇总.最后运行预测,然后将输出转换为Zoo类.这整个序列仅涉及一次转换,唯一的原因是预测仅支持ts.

library(forecast)
library(zoo)

as.zoo.forecast <- function(x, ...) as.zoo(as.ts(x))

z <- read.zoo(text = Lines, header = TRUE, sep = ";", dec = ",", 
  FUN = as.yearmon, aggregate = mean)
f <- forecast(z$wings)
as.zoo(f)

在这些新软件包版本发布之前,您可以在上述代码之前运行以下代码.在发布了新的预报和动物园软件包之后,仅上面的代码就足够了.

# taken from development verison of forecast package
as.ts.forecast <- function(x, ...){
   df <- ts(as.matrix(forecast:::as.data.frame.forecast(x)))
   tsp(df) <- tsp(x$mean)
   return(df)
}

# can use this until devel version of zoo released
as.zoo.ts <- function(x, ...) {
  z <- zoo:::as.zoo.ts(x)
  if (frequency(z) == 4) time(z) <- as.yearqtr(time(z))
  if (frequency(z) == 12) time(z) <- as.yearmon(time(z))
  z
}

2)ts另一种可能性是仅通过动物园使用“ ts”类来读取数据.使用上面的z和as.ts.forecast(如上所述,一旦预测pkg的开发版本可以省略成为当前):

tt <- as.ts(z)
f <- forecast(tt[, "wings"])
as.ts(f)

注意:上面我们使用了以下输入:

Lines <- "ref_date;wings;airfoil;turbines
2015-03-31;123,22;22,77;99,0
2015-04-30;123,22;28,77;99,0
2015-05-31;123,22;22,177;02,0
2015-06-30;56,288;22,77;99,0"

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐