2016-04-12 2 views
2

Comment puis-je tracer une récurrence dans R. Toute solution avec plot de base, ggplot2, treillis ou un package dédié est la bienvenue.Comment tracer des récurrences dans R

Par exemple:

Imaginez que j'ai ces données:

mydata <- data.frame(t=1:10, Y=runif(10)) 

t   Y 
1 0.3744869 
2 0.6314202 
3 0.3900789 
4 0.6896278 
5 0.6894134 
6 0.5549006 
7 0.4296244 
8 0.4527201 
9 0.3064433 
10 0.5783539 

je pourrais le transformer comme ceci:

mydata2 <- data.frame(t=c(NA,mydata$t),Y=c(NA,mydata$Y),Y2=c(mydata$Y, NA)) 

t   Y  Y2 
NA  NA 0.9103703 
1 0.9103703 0.1426041 
2 0.1426041 0.4150476 
3 0.4150476 0.2109258 
4 0.2109258 0.4287504 
5 0.4287504 0.1326900 
6 0.1326900 0.4600964 
7 0.4600964 0.9429571 
8 0.9429571 0.7619739 
9 0.7619739 0.9329098 
10 0.9329098  NA 

(ou méthodes similaires, mais je peux avoir des problèmes avec manque données) Et le tracer

plot(Y2~Y, data=mydata2) 

Je suppose que je dois utiliser une fonction de regroupement comme ave ou appliquer. Mais ce n'est pas une solution élégante, et si j'ai plus de colonnes, il peut devenir difficile de généraliser la transformation.

Par exemple

mydata3 <- data.frame(x=sample(10,100, replace=T),t=1:100, Y=2*runif(100)+1) 

Pour chaque x (ou une combinaison de valeurs sur d'autres colonnes) Je veux tracer Y_{i+1} ~ Y_i, sur la même parcelle.

D'autres outils, tels que Mathematica ont des fonctions pour tracer des séquences directement.

+0

Vous recherchez la fonction 'lag'? – cory

+0

lagging est ce que j'ai fait manuellement, mais comme je l'ai dit je cherche quelque chose de plus direct qui pourrait fonctionner même avec plus de colonnes (par groupes). Et les valeurs manquantes ne produiront pas le résultat attendu. – skan

Répondre

0

J'ai trouvé une solution, thoug pas très belle:

Pour cet échantillon de données.

mydata <- data.frame(x=sample(4,25, replace=T),t=1:25, Y=2*runif(25)+1) 

newdata <- mydata[order(mydata$x, mydata$t), ] 
newdata$prev <- ave(newdata$Y, newdata$x, FUN=function(x) c(NA,head(x,-1))) 
plot(Y~prev, data=newdata) 

Dans cet exemple, vous n'avez pas de lignes pour chaque valeur de t, vous devez d'abord générer NAs pour les valeurs manquantes. Mais c'est juste une solution rapide. Dans mes données réelles, j'ai beaucoup d'observations pour chaque t. Lag.plot peut tracer des courbes de récurrence mais pas dans chaque sous-groupe.