2017-08-09 2 views
0

Je fais un modèle de prévision pour les données multidimensionnelles qui utilise des méthodes moyennes et naïves pour prévoir les dimensions avec un petit nombre d'observations. Je sauvegarde tous les résultats dans une base de données. Lorsque je tente de le faire avec le modèle snaive, je reçois une erreur:R snaive() - nombre d'éléments à remplacer n'est pas un multiple de longueur de remplacement

Error in { : task 1 failed - "number of items to replace is not a multiple of replacement length"

Ceci est la partie du code qui échoue:

if(length(timeseries) < 54){ 
     fc.resutl <- meanf(timeseries, h = 20, level = c(80, 95)) 
} else fc.result <- snaive(timeseries, h = 20, level = c(80, 95)) 

fc.result <- as.data.frame(fc.result) 

loop.output <- rbind(loop.output, fc.result) 

J'ai essayé d'imprimer les résultats des fonctions meanf et snaive et Les deux semblent être en même format:

Point Forecast Lo80 Hi80 Lo95 Hi95

Si je change à la fois à meanf, cela fonctionne très bien, ainsi que snaive retourne une erreur. Une idée de ce qui pourrait être le problème?

J'ai vérifié l'exécution du code ligne par ligne et j'ai découvert que l'erreur est bien dans snaive(). Le rétrolien d'erreur est:

9. 
.cbind.ts(list(e1, e2), c(deparse(substitute(e1))[1L], 
deparse(substitute(e2))[1L]),union = FALSE) 
8. 
Ops.ts(r, tsLag(r, -lag)) 
7. 
diff.ts(y, lag = lag) 
6. 
diff(y, lag = lag) 
5. 
is.data.frame(x) 
4. 
var(if (is.vector(x) || is.factor(x)) x else as.double(x), na.rm = na.rm) 
3. 
sd(diff(y, lag = lag), na.rm = TRUE) 
2. 
lagwalk(x, lag = frequency(x), h = h, drift = FALSE, level = level, 
    fan = fan, lambda = lambda, biasadj = biasadj) 
1. 
snaive(timeseries, h = 20, level = c(80, 95)) 
+0

Veuillez fournir un exemple reproductible minimal. –

+0

Peu importe, snaive n'accepte que les timeseries de fréquence int alors que j'ai mis le mien à 365,25/7 pour les prévisions hebdomadaires. –

Répondre

0

Sons comme vous pensé à elle, mais vous avez aussi une erreur d'orthographe dans votre code sur la ligne 2, « fc.resutl » devrait être « fc.result ».