régression non linéaire d'une série temporelle avec le logiciel "R"
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
    invite771e733b

    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. #2
    invite771e733b

    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...

  3. #3
    invite771e733b

    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

  4. #4
    invite575dcc9b

    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?

  5. A voir en vidéo sur Futura
  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. #6
    invite1e3be5d9

    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")

  8. #7
    invite1e3be5d9

    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")

  9. #8
    invite1e3be5d9

    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...")

  10. #9
    invite1e3be5d9

    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"))

Discussions similaires

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