2010-07-29 4 views
0

J'ai un tableau avec des dates comme indices que je trace. Je voudrais tracer une courbe LOESS avec elle. Cependant, l'entrée pour loess est une formule. Y at-il un bon moyen de définir une formule de l'index de tableau à la valeur que je peux ensuite donner à la fonction loess?Conversion d'un tableau en une formule dans R

Répondre

2

Consultez la page d'aide pour loess() - il a quelques exemples de spécification de la formule. Fondamentalement, vous devez mettre vos données dans un objet data.frame avec des variables ayant des noms appropriés, puis la formule sera y ~ x, où x et y sont les noms des variables que vous voulez sur les axes x et y, respectivement.

Je préfère la fonction lowess(), qui est une alternative plus rapide et plus simple. Il a moins de paramètres réglables que loess() mais il est tout aussi bon dans de nombreuses applications. Voici somelinksdescribing les différences entre les deux fonctions.

est Ci-dessous un exemple simple pour les loess() et lowess()

## create an example data set                                 
x <- sort(rpois(100,10) + rnorm(100,0,2)) 
y <- x^2 + rnorm(100,0,7) 
df <- data.frame(x = x,y = y) 
plot(x,y) 
## fit a lowess and plot it                                 
l.fit1 <- lowess(x,y,f = 0.3) 
lines(l.fit1, col = 2,lwd = 2) 

## fit a loess and plot it                                 
l.fit2 <- loess(y ~ x, data = df) 
lines(x,predict(l.fit2,x), col = 3,lwd = 2) 
+0

Une chose qui ne figure pas dans les liens ... ou je ne l'ai pas ... est que loess retourne en fait un modèle que vous pouvez faire des prédictions avec alors LOWESS() renvoie simplement x et y valeurs. ggplot() utilise apparemment loess() et remplit beaucoup de prédicteurs intermédiaires pour faire les belles lignes douces qu'ils obtiennent. Si vous voulez autre chose que des ajustements aux prédicteurs que vous lui donnez alors loess() doit être votre commande de choix. – John

+0

Mon tableau a des dimensions 15238,1. Si je le passe en lowess je récupère une liste de longueur 2 où chaque item est une variable de longueur 15238. Qu'est-ce qui est dans les $ x et $ y que le lowess revient? –

+0

J'ai toujours pas mal de problèmes en utilisant les deux fonctions. Comment puis-je convertir mon tableau en une fonction que je peux passer en lœss. Est-ce quelque chose comme "arrayIndex ~ array [arrayIndex]"? –

0

Il y a plusieurs façons de faire ce que vous voulez; le plus simple pourrait être d'utiliser 'scatter.smooth' qui rassemble plus ou moins tout ce dont vous avez besoin (tracé de données, loess fit, et tracé de courbe) dans un seul appel fonctionnel.

data(AirPassengers)    # a monthly time series supplied w/ base R install 
scatter.smooth(x=1:length(AP), 
       y = as.vector(AP), 
       pch=20,   # this line and lines below are just aesthetics 
       col="orange", 
       lty="dotted", 
       lwd=1.5, 
       xlab="") 
+0

Merci pour la suggestion. J'aimerais vraiment avoir aussi accès aux données loess sous-jacentes et il semble que scatter.smooth ne fera que le tracer, mais bon à savoir sur n'importe quoi. –

Questions connexes