11
votes

Variables à la traîne dans R

Quel est le moyen le plus efficace de faire une matrice de variables à retard dans R pour une variable arbitraire (c'est-à-dire non une série de temps régulière)

Par exemple: P>

em> strong>: p> xxx pré>

2 décalages, sortie em> fortre>: p>

[1,NA, NA]
[2, 1, NA]
[3, 2,  1]
[4, 3,  2]


0 commentaires

4 Réponses :


9
votes

Utilisez une classe appropriée pour vos objets; BASE R a TS qui comporte une fonction pour fonctionner sur. Notez que ces objets TS sont venus d'un moment où "Delta" ou "Fréquence" où constants: données mensuelles ou trimestrielles comme dans la série macroéconomique.

Pour des données irrégulières telles que (business-) quotidiennement, utilisez le zoo ou < Un href = "http://cran.r-project.org/package=xts" rel = "noreferrer"> XTS packages qui peuvent également traiter (très bien!) avec des retards. Pour aller plus loin de là, vous pouvez utiliser des packages tels que dynlm ou DLM permet des modèles de régression dynamiques avec des retards.

Les vues de la tâche sur la série temporelle, les économétriques, les finances ont tous d'autres pointeurs.


0 commentaires

2
votes

La fonction exécutée dans le package gtools fait plus ou moins ce que vous voulez: xxx


2 commentaires

Mais James voulait une matrice pas une liste. Vous pouvez emballer le résultat à l'aide de matrice (ecriste (...)) mais la fonction incorporée () le fait en une étape.


Totalement à droite, c'est pourquoi j'ai suscité la solution intégrée () quand elle est sortie =). Mais «courir» est toujours une fonction utile que je pense - la plupart du temps où je voulais créer la matrice James demandée, ce que je voulais vraiment faire était de courir s'appliquer dessus.



21
votes

Vous pouvez y parvenir en utilisant la fonction intégrée incorporée () code>, dans laquelle son deuxième argument de "dimension" est équivalent à ce que vous avez appelé "Lag":

x <- c(NA,NA,1,2,3,4)
embed(x,3)

## returns
     [,1] [,2] [,3]
[1,]    1   NA   NA
[2,]    2    1   NA
[3,]    3    2    1
[4,]    4    3    2


2 commentaires

Plus généralement: LagMatrix <- Fonction (x, max.lag) {incorporé (C (na, max.lag), x), max.lag + 1)} Utilisez ensuite LagMatrix (1: 4,2)


Merci pour le pointeur à la fonction incorporée. Cela a sauvé une quantité massive de temps de calcul pour moi.



1
votes

la méthode qui fonctionne mieux pour moi est d'utiliser la fonction code> à partir du package code> dplyr code>.

Exemple: P>

> require(dplyr)
> lag(1:10, 1)
 [1] NA  1  2  3  4  5  6  7  8  9
> lag(1:10, 2)
 [1] NA NA  1  2  3  4  5  6  7  8


0 commentaires