我有2015年的每小时时间序列数据。这些数据对应于大型商业建筑的耗电量。我想使用这些数据来预测2016年的使用情况。要开发预测模型,我需要以合适的格式格式化这些数据。
我计划使用以下功能来预测2016年的使用情况:(1)一周中的某一天,(2)一天中的时间(3)温度,(4)2015年的使用情况。 我能够创建前3个功能,但第四个功能似乎很棘手。
我应该如何安排2015年的数据,以便在2016年的某一天我可以使用2015年的相应日期数据。我关注的是:
在这里,我创建了与2015年和2016年相对应的虚拟数据。
library(xts)
set.seed(123)
seq1 <- seq(as.POSIXct("2015-01-01"),as.POSIXct("2015-12-31"), by = "hour")
data1 <- xts(rnorm(length(seq1),150,5),seq1)
seq2 <- seq(as.POSIXct("2016-01-01"),as.POSIXct("2016-09-30"), by = "hour")
data2 <- xts(rnorm(length(seq2),140,5),seq2)
让我举一个例子来澄清我的问题:
lm( output ~ dayofweek + timeofday + temperature + lastyearusage, data = xxx)
dayY
onm2 oct 2015(lastyearusage
)预测2016年2月2日(dayX
)的使用情况。在此步骤中,问题是1)如果dayX
是工作日,我应该如何确保dayY
不是周末。我确信在这种情况下,如果我使用dayX
预测dayY
而不检查日期类型输出将会变得混乱。 答案 0 :(得分:0)
程序包中可能已经有一个函数可以执行此操作,但在此处发布一个自定义函数,将所有这些日历变量(包括周末信息)添加到包含日期/小时列的data.frame中。假数据:
df <- data.frame(datetime=seq(as.POSIXlt("2013/01/01 00:00:00"), as.POSIXlt("2013/12/31 23:00:00"), by="hour"), variable=rnorm(8760))
#### datetime variable
#### 1 2013-01-01 00:00:00 1.68959052
#### 2 2013-01-01 01:00:00 0.02023722
#### 3 2013-01-01 02:00:00 -0.42080942
该功能的代码:
CreateCalendarVariables = function(df, id_column=NULL) {
df <- data.frame(df)
if (is.null(id_column)) stop("Id column for the datetime variable is a mandatory argument")
temp <- df[, id_column]
if ( !(class(temp)[1] %in% c("Date", "POSIXct", "POSIXt", "POSIXlt")) ){
stop("the indicated datetime variable doesn't have the suitable format")
}
require(lubridate)
df['year'] <- year(temp)
df['.quarter'] <- quarter(temp)
df['.month'] <- month(temp)
df['.week'] <- week(temp)
df['.DMY'] <- as.Date(temp)
df['.dayinyear'] <- yday(temp)
df['.dayinmonth'] <- mday(temp)
df['.weekday'] <- wday(temp, label=T, abbr=FALSE) %>% factor(., levels=levels(.)[c(2,3,4,5,6,7,1)])
df['.is_we'] <- df$.weekday %in% c("Saturday", "Sunday")
if(class(temp)[1] != "Date"){
df['.hour'] <- factor(hour(temp))
}
return(df)
}
然后您只需指定包含日期格式的列的N°。如果您需要因子格式的模型这些变量,请随意调整代码:
CreateCalendarVariables(df, 2)
#### Error in CreateCalendarVariables(df, 2) :
#### the indicated datetime variable doesn't have the suitable format
CreateCalendarVariables(df, 1)
#### datetime variable year .quarter .month .week .DMY .dayinyear .dayinmonth .weekday .is_we .hour
#### 1 2013-01-01 00:00:00 1.68959052 2013 1 1 1 2012-12-31 1 1 Tuesday FALSE 0
#### 2 2013-01-01 01:00:00 0.02023722 2013 1 1 1 2013-01-01 1 1 Tuesday FALSE 1
要回答您的上一个问题,如果校准数据集中缺少整个级别(即一整个杂草并且您使用.Week
作为预测器),则需要先将数据归咎于此。