Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

régression non linéaire d'une série temporelle avec le logiciel "R"



  1. #1
    tramou

    régression non linéaire d'une série temporelle avec le logiciel "R"


    ------

    Bonjour,

    J'ai un petit souci pour utiliser les fonctions de regression non linéaires de "R". Voilà mon pbm :

    j'ai une série temporelle "ventes", dont j'exprime la tendance par régression linéaire (de la forme a*t+b) par la commande :
    lm(ventes~t)
    où t représente le temps.

    J'aimerai tester une regression non linéaire de la forme at²+bt+c, et comparer les résidus obtenus par la première méthode. J'ai trouvé dans le manuel de R la commande "nls", mais je n'arrive pas à trouver la formule correcte.

    Quelqu'un peut-il m'aider ?

    Thomas

    -----

  2. Publicité
  3. #2
    tramou

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    ps : je poste cette question dans le forum mathématiques et non informatique, car ce logiciel est très spécifique aux statistiques...

  4. #3
    tramou

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    Bonjour,
    j'ai trouvé ma réponse sur ce site :
    http://zoonek2.free.fr/UNIX/48_R/all.html
    Si jamais celà peut servir à quelqu'un d'autre...

    Merci à toi, public

  5. #4
    safaa

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    Bonjour,
    merci pour le site que vous avez cité..(conernant la régression non-linéaire).
    je suis déboutante de R.
    j'ai un probléme de faire la courbe de (nls) pour mattre en jour la realtion de numéro de feuille de la palnte de tomate et son longueur.
    est ce que vous avez une idée?

  6. #5
    invite986312212
    Invité

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    Citation Envoyé par tramou Voir le message
    Bonjour,

    J'aimerai tester une regression non linéaire de la forme at²+bt+c, (...)
    Thomas
    salut,

    désolé de te contredire, mais la régression que tu veux faire n'est pas non-linéaire. Linéaire ou non-linéaire se rapporte aux coefficients du modèle (ici a,b,c) et tu peux voir que cette fonction est linéaire en a,b,c. Donc tu peux très bien utiliser la fonction lm de R.
    Les commandes R seraient par exemple:
    t2 <- t^2
    lm(ventes~t+t2)

  7. A voir en vidéo sur Futura
  8. #6
    jeanheude

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    # importer les données
    document<-read.csv("Espace sur le disque",header=T,sep=";")
    document<-ts(document,start=c(1983,1),fr eq=12)
    #restreindre la période
    document1<-window(document,start=c(1983,1 ),end=c(2006,12))
    plot(document1,xlab="Années",t ype="l",ylab="Mwh",main="Intit ulé du graphique")

  9. Publicité
  10. #7
    jeanheude

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    #aggrégation de données
    agdoc1<-aggregate(document1)
    plot(agdoc1)
    plot(agdoc1,xlab="Années",type ="l",ylab="Données agrégées",main="Evolution des données agrégées")

  11. #8
    jeanheude

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    # importer les données
    document<-read.csv("document.csv",header =T,sep=";")
    document<-ts(document,start=c(1988,1),fr eq=12)
    #restreindre la période
    document1<-window(document,start=c(1988,1 ),end=c(2001,12))
    plot(document1,xlab="Années",t ype="l",ylab="Ordonnée",main=" Intitulé du graphique")

    #aggrégation de données
    agdoc1<-aggregate(document1)
    plot(agdoc1)
    plot(agdoc1,xlab="Années",type ="l",ylab="Données agrégées",main="Evolution des données agrégées")
    #passage en log si le modèle est exponentiel
    ldoc1<-log(document1)
    agldoc1<-aggregate(ldoc1)
    plot(agldoc1) #confirmation ou non de la linéarité
    #estimation de la tendance
    t<-1:length(doc1)
    #on estime la relation doc1=a+b*t
    tend<-lm(doc1~t)
    summary(tend)
    tend$fit
    coef<-tend$coef
    coef
    coef[1]
    coef[2]
    b<-tend$coef[1]
    a<-tend$coef[2]
    b+a*t
    ts
    #on transforme la tendance en série temporelle
    T<-ts(tend$fit,start=c(1988,1),fr eq=12)
    ts.plot(T,doc1,xlab="Années",y lab="Valeur ordonnée",main="Tendance de...")

  12. #9
    jeanheude

    Re : régression non linéaire d'une série temporelle avec le logiciel "R"

    # importer les données
    document<-read.csv("document.csv",header =T,sep=";")
    document<-ts(document,start=c(1988,1),fr eq=12)
    #restreindre la période
    document1<-window(document,start=c(1988,1 ),end=c(2001,12))
    plot(document1,xlab="Années",t ype="l",ylab="Ordonnée",main=" Intitulé du graphique")

    #aggrégation de données
    agdoc1<-aggregate(document1)
    plot(agdoc1)
    plot(agdoc1,xlab="Années",type ="l",ylab="Données agrégées",main="Evolution des données agrégées")
    #passage en log si le modèle est exponentiel
    ldoc1<-log(document1)
    agldoc1<-aggregate(ldoc1)
    plot(agldoc1) #confirmation ou non de la linéarité
    #estimation de la tendance
    t<-1:length(doc1)
    #on estime la relation doc1=a+b*t
    tend<-lm(doc1~t)
    summary(tend)
    tend$fit
    coef<-tend$coef
    coef
    #on recupère les coefficients
    coef[1]
    coef[2]
    b<-tend$coef[1]
    a<-tend$coef[2]
    b+a*t
    ts
    #on transforme la tendance en série temporelle
    T<-ts(tend$fit,start=c(1988,1),fr eq=12)
    ts.plot(T,doc1,xlab="Années",y lab="Valeur ordonnée",main="Tendance de...")


    #estimation des coefficients saisonniers

    CoefSais<-numeric(0)
    ecarttendance<-document1-T
    for(i in 1:6){
    x<-window(ecarttendance,start=c(1 988,i),deltat=1)
    moyenne<-mean(x)
    CoefSais<-append(CoefSais,moy)}
    for(i in 7:12){
    x<-window(ecarttendance,start=c(1 988,i),deltat=1)
    moy<-mean(x)
    CoefSais<-append(CoefSais,moy)}
    CoefSais
    #Calcul des coefficient saisonniers corrigés
    CoefSaisCor<-round(CoefSais-mean(CoefSais),3)
    CoefSaisCor

    #estimation de la série ajustée
    lcoef1<-CoefSaisCor[1:12] #coef saisonnier pour 1988
    lcoef2<-rep(CoefSaisCor,time=8) #Coef saisonnier pour les 8 autres années
    lcoef<-c(lcoef1,lcoef2) #ensemble des coef saisonniers
    tendN<-as.numeric(T)
    doc1adj<-tendN+lcoef #calcul de la série ajustée
    doc1adj<-ts(doc1adj,start=c(1988,1),fre q=12) #conversion en série temporelle
    ts.plot(doc1,doc1adj,xlab="Ann ées",ylab="Ordonnée",main="Sér ie ajustée et série originale ",lty=c(1,2))

    # Calcul de la Somme des carrés des écarts en les obs et la série ajustée
    doc1adj<-exp(ldocc1adj) #uniquement si l'on s'est servi du LOG
    ec<-sum((doc1-doc1adj)^2) #somme des carrés des erreurs
    ecart


    tend2<-coef[1]+coef[2]*(280:320)
    tend2
    doc1prev<-tend2+CoefSaisCor[1:12]
    doc1prev
    doc1prev<-exp(doc1prev)
    obs01<-window(document,start=c(2007,1 ))
    obs01
    ecartexpost<-sum((obs01-elec1prev)^2)
    ecexpost

    # Lissage exponentiel
    doc1HW<-HoltWinters(document1,seasonal ="multiplicative ou additive",alpha=0.3,beta=0.25, gamma=0.2) # paramètre classique
    doc1HW
    #On récupère la sommes du carré des écarts EX ante
    ecart2<-doc1HW$SSE
    ecart2/length(doc1)
    ecart/length(doc1)
    # Travail sur les écart Ex post
    doc1HWprev<-predict(doc1HW,n.ahead=10) #Prévision sur les 1O mois suivant la fin des observations
    doc1HWprev
    ecartexpost<-sum((obs01-doc1HWprev)^2)
    ecartexpost

    #Estimation de tendance avec lm()
    T<-50 #simulation
    t<-1:T
    x<-10+5*t+rnorm(20,7,2)
    Plot(t,x)
    tend<-lm(x~t)
    abline(tend)
    xts<-ts(x,start=c(1990,1),freq=4)
    plot(xts)
    tend2=lm(xts~t)
    b<-tend2$coef[1]
    a<-tend2$coef[2]
    tend2$fitted
    b+a*t
    tend<-ts(tend2$fitted,start(1990,1), freq=4)
    ts.plot(tend,xts)

    # Générer une série exponentielle avec saisonnalité
    T<-130
    t<-1:T
    x<-4+20*t+rnorm(80,3,20)
    y<-exp(x/1200)
    Co<-c(0.5,1.2,0.9,0.2)
    yc<-y*Co
    yc<-ts(yc,start=c(1988,1),freq=12)
    plot(yc) #la série est exponentielle, on utilise le log
    lyc<-log(yc)
    plot(lyc)
    tend<-lm(lyc~t)
    tend
    abline(tend)
    tend2<-ts(tend$fitted,start=c(1988,1) ,freq=12)
    ts.plot(lyc,tend2)
    ty=exp(tend$fitted) #on repart sur le modèle de départ une fois la tendance trouvée
    plot(ty)
    tend2<-ts(ty,start=c(1988,1),freq=12)
    ts.plot(yc,tend2) #Graph de départ avec la tendance
    #calcul des coeff saisonniers
    tend<-lm(log(yc)~t)
    tendy<-exp(tend$fitted)
    ts.plot(yc,tendy)
    rap<-yc/tendy #car modèle exponentiel
    coefsais<-numeric(0)
    for(i in 1:12){x<-window(rap,start=c(1988,1),del tat=1)
    moy<-mean(x)
    coefsais<-append(coefsais,moy)}
    coefsais<-coefsais/mean(coefsais)

    #Prévision de la tendance
    tend<-lm(log(yc)~t)
    tendprevision<-(tend$coef[1]+tend$coef[2]*(T1:T2)) # T1:T2 période de prévision
    plot(tendprevision)
    #Prévision avec HoltWinters
    x<-rnorm(50,3,1)
    xts<-ts(x,start=c(1989,1),freq=12)
    start(xts)
    end(xts)
    plot(xts, xlab=" ", ylab=" ", main=" ")
    m1<-HoltWinters(xts,alpha=0.3,beta =0,gamma=0)
    prev1<-predict(m1,n.ahead=15)
    plot(m1)
    ts.plot(xts,prev1,lty=c(1,2))
    legend("topright",legend=c("xt s","previsions"),lty=c(1,2),bt y="n")
    m2<-(HoltWinters(xts,gamma=0,beta= 0))
    plot(m2)
    prev2<-predict(m2,n.ahead=8)
    ts.plot(xts,prev1,prev2,lt=c(1 ,2,3),col=c(1,"red","green"))
    legend("topright",legend=c("xt s","prevision 1","prevision 2"),lty=c(1,2,3),col=c(1,"red" ,"green"))

Sur le même thème :

Discussions similaires

  1. [Génétique] Spéciation "temporelle"
    Par Lampyris dans le forum Biologie
    Réponses: 5
    Dernier message: 18/09/2007, 21h14
  2. Problème avec le logiciel "Spybot"
    Par jozog47 dans le forum Logiciel - Software - Open Source
    Réponses: 15
    Dernier message: 22/10/2005, 20h00