-
11/03/2005 - 18h11 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
-
Poursuivez votre recherche
-
11/03/2005 - 18h14 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...
-
14/03/2005 - 19h11 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
-
02/10/2006 - 18h12 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?
-
03/10/2006 - 15h21
Re : régression non linéaire d'une série temporelle avec le logiciel "R"
 Envoyé par tramou 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)
-
16/03/2011 - 21h16 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")
-
16/03/2011 - 21h20 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")
-
16/03/2011 - 21h45 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...")
-
17/03/2011 - 00h27 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"))
| | |