Lissage d'une courbe

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

nathalie DURAND
Messages : 12
Enregistré le : 22 Sep 2008, 06:38

Lissage d'une courbe

Messagepar nathalie DURAND » 06 Oct 2008, 14:03

Bonjour tout le monde ,
J'ai une courbe à lisser et comme je ne me suis pas encore très bien familiarisée avec R, j'ai du mal à le faire d'une manère sobre.
Voici mon code

Code : Tout sélectionner

fun<-function(K){
k<-3
n<-50
m<-1
r<-1
l<-cumsum(rexp(n)/k)
L<-exp(l)
fun<-k*((log(L[r+m])-log(L[r]))/log((L[K]-L[K-k])/(L[K-k]-L[K-2*k])))
}
N<-30
S<-sapply(7:50,fun)
s1<-matrix(replicate(N,sapply(7:50,fun)),nrow=44,ncol=N)
teta.hat<-(1/44)*rowSums(s1)
teta<-matrix(rgamma(44,1,1),nrow=44,ncol=1)
MSE1<-(1/44)*rowSums(teta.hat-teta)^2
MSE<-MSE1[MSE1<0.5]
plot(MSE,type="l")




merci d'avance

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 06 Oct 2008, 15:23

Il y bcp de fonctions de lissage dans R.

* Si vous voulez interpoler des points, voir approx ou spline (la courbe passe par les points).

* Si vous voulez trouver une moyenne mobile dans un nuage de point, voir loess, lowess, smooth.spline, ou les fonctions du package mgcv (modèle additif généralisé, etc.). Il y a bien d'autres packages proposant des solutions du même ordre.

Renaud

nathalie DURAND
Messages : 12
Enregistré le : 22 Sep 2008, 06:38

Messagepar nathalie DURAND » 06 Oct 2008, 15:48

Merci Renaud.
En fait ce que je voulais c'est d'éliminer les points très loins (en haut ou en bas) qui sont pour moi des valeurs aberrantes .

Jérôme Saracino
Messages : 9
Enregistré le : 22 Fév 2008, 15:47

Messagepar Jérôme Saracino » 13 Oct 2008, 12:50

Hello, tu peux aussi utiliser la méthode Direct Filter Approach (dfa) contenue dans le package signalextraction :
Ta matrice A [N,K] avec les Si vecteurs colonnes

Code : Tout sélectionner

SF1 <- dfa(A$s1, quart=FALSE, d=0, tpfilter=TRUE, i2=TRUE, n.loops=10, verbose=1)
plot(SF1)
write(SF1$xf, file="dfa_s1.xls", ncolumns=1)

Bon courage

Guillaume Bal
Messages : 130
Enregistré le : 02 Juin 2008, 21:07

Messagepar Guillaume Bal » 13 Oct 2008, 13:10

Salut !

Pour s'affranchir des valeurs aberrantes je te conseille le lissage lowess. C'est très simple à mettre en œuvre et c'est conçu exprès pour minimiser le poids des outliers. Tu peux aussi régler intensité du lissage (qui selon moi est dès le départ plutôt bien adaptée à la plupart des cas). Cela de permettra de mettre en évidence même les tendances non linéaires.
De plus, aucune hypothèse de départ à vérifier.
Par contre c'est du visuel, tu n'auras pas d'équation de sortie. Mais pour une exploration initiale je trouve cela très bien. Après libre à toi en fonction de l'allure de la courbe obtenue de pousser plus loin les analyses.

En espérant t'avoir aidée

nathalie DURAND
Messages : 12
Enregistré le : 22 Sep 2008, 06:38

Messagepar nathalie DURAND » 13 Oct 2008, 15:06

Merci Messieurs Bal et Saracino pour les indications, je vais les essayer demain.





Nathalie


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité