2017-01-05 1 views
0

J'utilise le package fpp pour prévoir plusieurs séries chronologiques de différents clients en même temps. Je suis déjà capable d'extraire les prévisions ponctuelles de différentes méthodes de prévisions faciles (snaive, meanf, etc.) dans un document csv. Cependant, j'essaie toujours de comprendre comment extraire les mesures de la commande accuracy() de chaque série temporelle dans un fichier csv en même temps.Exporter l'exactitude de plusieurs prévisions de timeséries dans r dans csv-document

I construit un exemple:

# loading of the "fpp"-package into R 
install.packages("fpp") 
require("fpp") 

# Example customers 
customer1 <- c(0,3,1,3,0,5,1,4,8,9,1,0,1,2,6,0) 
customer2 <- c(1,3,0,1,7,8,2,0,1,3,6,8,2,5,0,0)  
customer3 <- c(1,6,9,9,3,1,5,0,5,2,0,3,2,6,4,2) 
customer4 <- c(1,4,8,0,3,5,2,3,0,0,0,0,3,2,4,5) 
customer5 <- c(0,0,0,0,4,9,0,1,3,0,0,2,0,0,1,3) 

#constructing the timeseries 
all <- ts(data.frame(customer1,customer2,customer3,customer4,customer5), 
      f=12, start=2015)  
train <- window(all, start=2015, end=2016-0.01) 
test <- window(all, start=2016) 
CustomerQuantity <- ncol(train) 

# Example of extracting easy forecast method into csv-document 
horizon <- 4 
fc_snaive <- matrix(NA, nrow=horizon, ncol=CustomerQuantity) 
for(i in 1:CustomerQuantity){   
    fc_snaive [,i] <- snaive (train[,i], h=horizon)$mean 
} 
write.csv2(fc_snaive, file ="fc_snaive.csv") 

La partie suivante est exactement la partie, où je avais besoin d'aide - je voudrais extraire la précision de mesures dans un fichier csv en même temps. Dans mon jeu de données réel, j'ai 4000 clients, et pas seulement 5! J'ai essayé d'utiliser des boucles et lapply(), mais malheureusement mon code n'a pas fonctionné.

accuracy(fc_snaive[,1], test[,1]) 
accuracy(fc_snaive[,2], test[,2]) 
accuracy(fc_snaive[,3], test[,3]) 
accuracy(fc_snaive[,4], test[,4]) 
accuracy(fc_snaive[,5], test[,5]) 

Répondre

2

Ce qui suit utilise lapply pour exécuter accuracy pour chaque élément de 1 au nombre de colonnes dans fc_snaive avec l'élément correspondant de test.

Puis, avec do.call, nous lier les résultats par ligne (rbind), donc nous nous retrouvons avec une matrice que nous pouvons, à son tour, l'exportation à l'aide write.csv.

new_matrix <- do.call(what = rbind, 
         args = lapply(1:ncol(fc_snaive), function(x){ 
         accuracy(fc_snaive[, x], test[, x]) 
         })) 

write.csv(x = new_matrix, 
      file = "a_filename.csv") 
+0

Merci beaucoup Juan :) !!! Votre code fonctionne parfaitement! Il n'y a qu'une petite faute dans la ligne où le nouveau fichier csv.file est écrit: utilisez "x = new.matrix" au lieu de "x = new_matrix" – Jo91

+0

Correction de la faute de frappe, merci de l'avoir signalé! –