> restart:

TP 07

Série temporelle

Rappel de consignes

(1) titre en "Times New Roman", corps 36,

NOM Prénom - groupe

TP 07 - date

(2) sauvegarder "souvent"

(3) imprimer : paginer (Format/Page_Number)

puis File/Preview.

enfin imprimer en deux colonnes

>

On charge quelques bibliothèques

Vérifier les numéros de version des bibliothèmes disponibles

> with(pldx); # il faut la version 24
ever_loaded;

`pldx v6-24  ;  author : <douillet@ensait.fr>  ;  l...

[Xtens, `convert/D2`, ever_loaded, isdiag, sinsin, ...
[Xtens, `convert/D2`, ever_loaded, isdiag, sinsin, ...
[Xtens, `convert/D2`, ever_loaded, isdiag, sinsin, ...

[` Diag`, ` Entries`, ` Evalm`, ` Matrice`, ` Tr`, ...
[` Diag`, ` Entries`, ` Evalm`, ` Matrice`, ` Tr`, ...

> with(simul); # il faut la version 16
ever_loaded;

`simul v6-16  ;  author : <douillet@ensait.fr>  ;  ...

Warning, the name ever_loaded has been redefined

[chi2_tst, ever_loaded, histo_arr, xcutn, xhisto, x...

[` Chi2`, ` Gauss`, ` IChi`, ` IGauss`, ` INorlaw`,...
[` Chi2`, ` Gauss`, ` IChi`, ` IGauss`, ` INorlaw`,...

> xima:=proc(pl); op(1,pl) : convert(%,list): map(op,%):
map2(op,2,%): max(op(%)): end:

>

Lecture du fichier

Télécharger le fichier "www.douillet.info/~douillet/mao_tp/mao_dat_07.txt"
ABS, beer.dat, from jan 1956

Déclarer le nom de la copie locale du fichier

> fich:= "F:/docs/Ensait/maotp/maotp07/dat_maotp07.txt";

fich :=

On lit tous les nombres

> lire:= table(): tmp:= 'tmp':
hdl:= fopen(fich, READ) :
for i to 5000 while tmp <> [ ] do
tmp:= fscanf(hdl,"%a");
lire[i]:= op (tmp);
od:
fclose(fich); n:= i-2 ; i:='i':

n := 476

On en fait une liste

> li:= [seq(lire[k],k=1..n)]:

>

Paramètres de dispersion

> macro(moy= stats[describe, mean] ); m:= moy(li);

moy

m := 136.3953781

> macro(var= stats[describe, variance] ); s, s2:= sqrt(var(li)), var(li);

moy, var

s, s2 := 33.70326607, 1135.910144

> macro(range= stats[describe, range] ); vals:= range(li);
macro(count= stats[describe, count] ); count(li);

moy, var, range

vals := 64.8 .. 217.8

moy, var, range, count

476

>

Visualisation

> an0:= 1956; macro(ptplo=plots[pointplot]);

an0 := 1956

moy, var, range, count, ptplo

> ptplo([seq([an0+k/12, li[k]], k=1..n)], style= line, view=[DEFAULT, 0..rhs(vals)], color=magenta); pl_data:= %:

[Maple Plot]

> pl2:= plot([m-s, m, m+s], t=an0..an0+n/12, color=red, linestyle=[8,24,8]) :

> display(pl_data, pl2);

[Maple Plot]

>

>

Auto-corrélation (E2)

> nn:=20*12:

> for j from 0 to nn-2 do
sx,sy:= add(li[k], k=1..nn-j)/(nn-j),add(li[k+j], k=1..nn-j)/(nn-j);
sxx,syy:= add(li[k]^2, k=1..nn-j)/(nn-j),add(li[k+j]^2, k=1..nn-j)/(nn-j);
sxy:= add(li[k]*li[k+j], k=1..nn-j)/(nn-j);
rr[j]:= (sxy-sx*sy)^2/(sxx-sx^2)/(syy-sy^2);
od:

> ptplo([seq([k,rr[k]], k=0..nn-2)], style=line, labels=[decalage, rr]);

[Maple Plot]

>

Transformée de Fourier

> nn:=12*2: ft:= table([]);

ft := TABLE([])

> ft:= [seq( add(li[k]*exp(2*I*evalf(Pi)*k*j/nn), k=1..nn)/nn, j=0..nn)];

ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...
ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...
ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...
ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...
ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...
ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...
ft := [86.62083333, 1.266168250-.3523403744*I, 8.79...

> ptplo( [seq([k, abs(ft[k+1])], k=0..nn)], style=line, view=[DEFAULT, 0..20]);

[Maple Plot]

>

Attention : cela dure "un certain temps"

> nn:=n : ft:= table([]);

ft := TABLE([])

> stamp:= time() :
ft:= evalf([seq( add(li[k]*exp(2*I*Pi*k*j/nn), k=1..nn)/nn, j=0..nn)]) :
elapsed_time = time() - stamp ;

elapsed_time = 27.843

> ptplo( [seq([k, abs(ft[k+1])], k=0..nn)], style=line, view=[DEFAULT, 0..20]);

[Maple Plot]

> seq([k, abs(ft[k+1])], k=37..42); pic:= add(k * abs(ft[k+1]), k=37..42)/add(abs(ft[k+1]), k=37..42);

[37, 1.127155762], [38, 1.397707770], [39, 4.298859...

pic := 39.63866158

> # pic := 39.63866159;

> n/pic; per:= round(%); lon:= floor(n/per);

12.00847811

per := 12

lon := 39

> perg := floor(per/2); perd := per-%;

perg := 6

perd := 6

>

Moyenne mobile (trend)

> moymob:= proc(ma::list, per) global perg, perd; local k, kx, mb, tmp;
kx := nops(ma):
for k from 1 to perg-1 do mb[k] := missing od:;
for k from kx-perd+1 to kx do mb[k] := missing od:
tmp := add(ma[k], k=1..per); mb[perg] := tmp/per;
for k from perg+1 to kx-perd do
tmp := tmp-ma[k-perg]+ma[k+perd]: mb[k] := %/per
od: [seq(mb[k],k=1..kx)];
end:

> trend:= moymob(li, per):

> pl_trend:= plot([seq([an0 + k/12, trend[k]],k=1..n)], color=blue):

> display(pl_data, pl_trend);

[Maple Plot]

>

>

Correction des Variations saisonnières

Méthodes possibles (E2) :

correction simple

correction logarithmique

correction trend simple

correction trend logarithmique

> for u from 1 to per do meu[u]:= moy([seq(li[u+per*j],j=0..lon-1)]); od:
meu_:= moy([seq(meu[u],u=1..per)]);
for u from 1 to per do meu[u]:= meu[u]-meu_: od:

meu_ := 136.3636752

> licor:= [seq(li[k] -meu[1+irem(k-1,per)], k=1..n)] :

> [count, moy, var](licor); [count, moy, var](li);

[476, 136.5343065, 873.6074275]

[476, 136.3953781, 1135.910144]

>

> pl_sai_sim:= plot([seq( [k/12+1956, licor[k] ], k=1..n)], linestyle=16):

> display( pl_data, pl_sai_sim);

[Maple Plot]

>

Résiduels

> resid := [missing$(perg-1), seq( licor[k] - trend[k], k=perg .. n-perd), missing$perd] : nops(%), n;

476, 476

> plot([seq( [k/12+1956, resid[k]], k=1..n)], linestyle=8) ;

[Maple Plot]

Transformée de Fourier des résiduels

Attention : cela dure "un certain temps"

> size:= 12*(lon-1) ; nn:=perg-1+size ; ftr := table([]) ;

size := 456

nn := 461

ftr := TABLE([])

> stamp:= time() :
ftr := evalf([seq( add(resid[k]*exp(2*I*Pi*k*j / size), k=perg..nn)/ size, j=0..size)]) :
elapsed_time = time() - stamp ;

elapsed_time = 45.578

> ptplo( [seq([k, abs(ftr[k+1])], k=0..size)], style=line);

[Maple Plot]

> ran:= 157..161; seq([k, abs(ftr[k+1])], k=ran);
pic2:= add(k * abs(ftr[k+1]), k=ran)/add(abs(ftr[k+1]), k=ran); LL:= size/%;

ran := 157 .. 161

[157, .6453874412], [158, 1.205865587], [159, 2.455...

pic2 := 158.8277444

LL := 2.871034917

>

> ran:= 37..40; seq([k, abs(ftr[k+1])], k=ran);
pic3:= add(k * abs(ftr[k+1]), k=ran)/add(abs(ftr[k+1]), k=ran); size/%;

ran := 37 .. 40

[37, .3457627449], [38, .2720478366], [39, 1.285902...

pic3 := 38.55649121

11.82680233

>

Modèle y = polynome + trigo (frv=8.57)

> phi:= 2*Pi/12 ;
add(a[j]*(t/12)^j, j=0..4)+ add(cos(phi*t*j)*cc[j]+sin(phi*t*j)*ss[j], j=1..4) - y :
fu:= unapply(%, t,y);
vars:= op( indets(fu(t,y), indexed) );

phi := 1/6*Pi

fu := proc (t, y) options operator, arrow; a[0]+1/1...
fu := proc (t, y) options operator, arrow; a[0]+1/1...

vars := cc[1], a[4], a[3], cc[2], ss[1], cc[3], ss[...

> Digits:=20:
chi2_f := collect(add( (evalf@fu)(k, licor[k])^2, k=1..n), [vars], distributed):
soo := solve(map2(diff,chi2_f, {vars})) : fuu := unapply(subs(%, fu(t,y)+y),t):
Digits :=10 : evalf(fuu(t));

90.69516648-.3138907340*t+.6181810321e-2*t^2-.20092...
90.69516648-.3138907340*t+.6181810321e-2*t^2-.20092...
90.69516648-.3138907340*t+.6181810321e-2*t^2-.20092...
90.69516648-.3138907340*t+.6181810321e-2*t^2-.20092...

> resid1:= [seq([k/12+1956, fuu(k)-licor[k]], k=1..n)] :

> subs(missing=NULL, moymob(resid1,12)): display(plot(%), plot(resid1, color=magenta));

[Maple Plot]

> Digits:=10:
evalf(map2(op,2,resid1)): [count, moy, var](%); frv_cor:= var(licor)/%[3];

[476, .5955882353e-7, 101.9799254]

frv_cor := 8.566464665

>

Modèle ln(y) = polynome + trigo (frv=8.57)

> phi:= 2*Pi/12 ;
add(a[j]*(t/12)^j, j=0..4)+ add(cos(phi*t*j)*cc[j]+sin(phi*t*j)*ss[j], j=1..4) - ln(y) :
gu:= unapply(%, t, y);
vars:= op( indets(gu(t,y), indexed) );

phi := 1/6*Pi

gu := proc (t, y) options operator, arrow; a[0]+1/1...
gu := proc (t, y) options operator, arrow; a[0]+1/1...

vars := cc[1], a[4], a[3], cc[2], ss[1], cc[3], ss[...

> Digits:=20:
chi2_g := collect(add( (evalf@gu)(k, licor[k])^2, k=1..n), [vars], distributed) :
sog := solve(map2(diff,chi2_g, {vars})) : guu := unapply(subs(%, gu(t,y)+ln(y)),t):
Digits :=10 : evalf(guu(t));

4.467356083-.1255081801e-2*t+.4238408724e-4*t^2-.14...
4.467356083-.1255081801e-2*t+.4238408724e-4*t^2-.14...
4.467356083-.1255081801e-2*t+.4238408724e-4*t^2-.14...
4.467356083-.1255081801e-2*t+.4238408724e-4*t^2-.14...

> resid_g:= [seq([k/12+1956, exp(guu(k)) - licor[k]], k=1..n)] :

> subs(missing=NULL, moymob(resid_g,12)): display(plot(%), plot(resid_g, color=magenta));

[Maple Plot]

[Maple Plot]

> Digits:=10:
evalf(map2(op,2,resid_g)): [count, moy, var](%); frv_cor:= var(licor)/%[3];

[476, -.3486072521, 104.2012894]

frv_cor := 8.383844696

> resid_g_ln := [seq( evalf(guu(k)) - ln(licor[k]), k=1..n)] :

> frv_cor_ln := var(map(ln, licor))/var(resid_g_ln);

frv_cor_ln := 10.93646608

>

>

>