Mi piacerebbe cambiare l'asse x quando si tracciano alcune previsioni. Il modello viene aggiornato quotidianamente tramite crontab. L'x-scala deve includere tale incremento giornaliero Data:Come regolare l'asse x usando la trama() quando l'intervallo cambia giornalmente?
Esempio dati:
# where dates changes according to Sys.Date-1
dates <- seq(as.Date("2015-01-01"), Sys.Date()-1, by = "days")
# where x is updated daily
x <- diffinv(rnorm(length(dates)-1))
df<-data.frame(dates,x)
# split data and train model
df$x<-as.ts(df$x)
# required libraries
library(caret)
library(forecast)
library(plyr)
# the time series is updated on daily basis
date1 <- strptime("2016-02-04", format="%Y-%m-%d")
date2 <- strptime(Sys.time()-1, format="%Y-%m-%d")
date3<-difftime(date2,date1,units="days")
# here I split data into time and test data according to initialWindow "2016-02-04"
timeSlices <- createTimeSlices(1:nrow(df),
initialWindow = 400, horizon = date3, fixedWindow = TRUE)
#extract data for fitting the model
trainSlices <- timeSlices[[1]]
testSlices <- timeSlices[[2]]
# here I calculate the fit and forecast
fit <- tbats(df[trainSlices[[1]],]$x, seasonal.periods=c(7,365), use.trend=TRUE, use.parallel=TRUE)
pred <- forecast(fit,h=length(df[testSlices[[1]],]$x))
# here I plot actual vs. predicted values
plot(forecast(fit,h=length(df[testSlices[[1]],]$x)),ylab = "x ",xlab="Daily units from 2015-01-01 to CurrentDate", main="Forecast", include=30)
lines(x = as.numeric(rownames(df[testSlices[[1]],])), df[testSlices[[1]],]$x, col = "red")
legend(x = "topleft", legend = c("Prediction", "Actual Data"), col = c("blue", "red"), lty = c(1, 1))
vorrei cambiare le unità di quotidiani in dates scale
alias 2015-07-01
e così via, che è anche riflessa nell'aggiornamento quotidiano. Ho cercato di usare xaxt="n"
e aggiungendo dates scale
con Sys.Date()-1
:
dates <- seq(Sys.Date()-30, Sys.Date()-1, by = "days")
plot(xaxt="n",forecast(fit,h=length(df[testSlices[[1]],]$x)),ylab = "x ",xlab="Daily units from 2015-01-01 to CurrentDate", main="Forecast", include=30)
lines(x = as.numeric(rownames(df[testSlices[[1]],])), df[testSlices[[1]],]$x, col = "red")
legend(x = "topleft", legend = c("Prediction", "Actual Data"), col = c("blue", "red"), lty = c(1, 1))
# here I wanted to add the new scale
axis(1, at = dates,labels = TRUE)
ma questo non tracciare la x-scala.
Sei limitato a basare trame o aperto anche ad una soluzione 'ggplot'? – RHA
Non sono limitato. Io uso solo base perché la 'libreria (previsione)' non supporta 'ggplot', almeno non potrei usarla. – Mamba
Vedi anche [qui] (http://davenportspatialanalytics.squarespace.com/blog/2012/3/14/plotting-forecast-objects-in-ggplot-part-1-extracting-the-da.html) e [qui ] (http://davenportspatialanalytics.squarespace.com/blog/2012/3/21/plotting-forecast-objects-in-ggplot-part-2-visualize-observa.html). – Axeman