2017-05-10 3 views
1

J'essaie de résoudre ce problème dans R. Je souhaite utiliser différents modèles de régression de l'apprentissage machine sur des données de séries chronologiques, dans le domaine de l'apprentissage supervisé. Dans ce cas, j'ai besoin d'une fonction/package qui me permette de faire un pas n en avant et en arrière, comme une fonction de fenêtre glissante. Le tableau montre les variables d'entrée (t-n) et de sortie (t + n) avec l'observation courante (t) considérée comme une sortie.Valeurs de retard pour l'apprentissage supervisé dans séquence/séries chronologiques

 var1(t-1) var2(t-1) var1(t) var2(t) var1(t+1) var2(t+1) 
1  4   69  5  70   6  71 
2  5   70  6  71   7  72 
3  6   71  7  72   8  73 
4  7   72  8  73   9  74 
5  8   73  9  74  10  75 
6  9   74  10  75  11  76 
7  10   75  11  76  12  77 
8  11   76  12  77  13  78 

Je l'ai déjà fait des recherches au sujet d'une méthode des méthodes utiles telles que le décalage (ou) le décalage() à r-blogger.com, mais ces exemples, le problème est que les valeurs manquantes généreront.

shift<-function(x,shift_by){ 
    stopifnot(is.numeric(shift_by)) 
    stopifnot(is.numeric(x)) 

    if (length(shift_by)>1) 
     return(sapply(shift_by,shift, x=x)) 

    out<-NULL 
    abs_shift_by=abs(shift_by) 
    if (shift_by > 0) 
     out<-c(tail(x,-abs_shift_by),rep(NA,abs_shift_by)) 
    else if (shift_by < 0) 
     out<-c(rep(NA,abs_shift_by), head(x,-abs_shift_by)) 
    else 
     out<-x 
    out 
} 

résultat de la fonction shift():

x df_lead2 df_lag2 
1 5  4  NA 
2 6  5  NA 
3 7  6  5 
4 8  7  6 
5 9  8  7 
6 10  9  8 
7 11  10  9 
8 12  11  10 
9 13  NA  11 
10 14  NA  12 

Ainsi sont-il des paquets ou des fonctions mises en oeuvre, qui permet de recevoir une trame de données et calculer pour chaque variable la quantité d'indique tn ou t + n?

Serait si gentil si quelqu'un peut m'aider. Merci!

Répondre

1

Vous pourriez être en mesure d'utiliser rollapply (zoo):

rollapply(iris$Sepal.Length, width = 3, by = 2, FUN = mean, align = "left") 

Vous pouvez spécifier si vous voulez calculer des valeurs (ou non) selon le cas il y a une valeur subséquente (https://rdrr.io/cran/rowr/man/rollApply.html)

+0

sur la base ce commentaire: https://stats.stackexchange.com/questions/3051/mean-of-a-sliding-window-in-r – timfaber

+0

Je ne suis pas sûr, si cette approche est la bonne. Avec la méthode rollApply, il est possible de faire glisser la fenêtre vers la gauche ou la droite, mais uniquement en calculant la moyenne. Je veux dire, pour un ensemble de données constitué de données telles que A [201, 0.1, 10, 100] et que j'utiliserais la fonction moyenne, la valeur de roulement pour le second enregistrement serait énorme, n'est-ce pas? – Daniel

+0

Je ne sais pas quel est le résultat souhaité, juste la valeur de la dérivation/retard ou toute fonction appliquée aux valeurs principales/retardées? Le calcul de la moyenne dépend toujours des valeurs aberrantes/extrêmes, mais vous pouvez le faire de plusieurs façons si vous le souhaitez. – timfaber