%\VignetteIndexEntry{Annexe Chapitre 2}
%\VignetteDepends{}
%\VignetteKeywords{ts}
%\VignettePackage{caschrono}
\documentclass{article}
\usepackage{Sweave}
\usepackage[latin1]{inputenc}
\usepackage{times}
\usepackage{mathptm}
\usepackage{hyperref}
\usepackage{natbib}
\usepackage{pratiquer}
\setkeys{Gin}{width=0.95\textwidth}
\renewcommand{\thefootnote}{\fnsymbol{footnote}}

\DeclareMathOperator*{\argmax}{argmax}
\DeclareMathOperator*{\argmin}{argmin}
\DeclareMathOperator{\BB}{BB}
\DeclareMathOperator{\BBN}{BBN}
\DeclareMathOperator{\rang}{rang}
\DeclareMathOperator{\tr}{tr}
\DeclareMathOperator{\V}{V}
\DeclareMathOperator{\C}{Cov}
\DeclareMathOperator{\Prob}{Pr}
\DeclareMathOperator{\diag}{diag}
\def\agra{\boldsymbol{a}} % a grave
%
\def\alg{\boldsymbol{\alpha}}
\def\b{\mbox{\bf b}}
%
\def\B{\mbox{\bf B}}
\def\BB#1{\mbox{BB}(0,\sigma_{#1}^2)}
\def\bm{\mbox{B}}
\def\betg{\boldsymbol{\beta}}
\def\bar#1#2{\overline{#1}_{#2}} % surlign\'e indic\'e
\def\bgr{\mbox{\bf b}}
\def\bla{\mbox{~}}
\def\blb{\mbox{~~}}
%
\def\card{\mbox{card}}
\def\corr{\mbox{corr}}
\def\cov{\mbox{\sf cov}}
\def\cv{\mbox{CV}}
%
\def\D{\mbox{\bf D}}
\def\d{\bf d}
\def\degr{^{\circ}}
\def\deltag{\boldsymbol{\delta}}
\def\Deltag{\boldsymbol{\Delta}} % ligne 64
\def\diag{\mbox{diag}}
\def\dir{\mbox{\tiny{DIR}}}
\def\dsp{\displaystyle}
%
\def\e{\mbox{\bf e}}
\def\eps{{\bf \epsilon}}
\def\esp{\mbox{\sf E}}
\def\eti{\tilde{\epsilon}}

\def\F{\mbox{\bf F}}
\def\g{\mbox{\bf g}}
\def\gamg{\boldsymbol{\Gamma}}
\def\gamgp{\boldsymbol{\gamma}}
\def\hors{\mathbin{\in\mkern-12mu/}}

\def\I{\mbox{\bf I}}
\def\indic{\mathrm{I\mkern-8muI}}
\def\ie{c'est-\`a-dire}
\def\iid{\sim_{\mbox{i.i.d.}}}
\def\lm{\mbox{L}}

\def\mapsous#1{\smash{ \mathop{\longrightarrow}\limits_{#1}}} %
\def\mapsur#1{\smash{ \mathop{\longrightarrow}\limits^{#1}}}  %
\def\M{\mbox{\bf M}}
\def\mug{\boldsymbol{\mu}}
\def\nor{\mathcal{N}}
\def\nug{\boldsymbol{\nu}}
\def\Nx{\mbox{\bf N}}
\def\P{\mbox{\bf P}}
\def\Phig{\boldsymbol{\Phi}}
\def\phig{\boldsymbol{\phi}}
\def\poi{\mbox{\cal P}}
\def\pr{\mbox{Pr}}
\def\prim{^{\boldsymbol{\prime}}}
\def\px{\mbox{\bf x}}

\def\Rho{\boldsymbol{\rho}}
\def\rl{\mathbin{I\mkern-8muR}} % Reel
\def\RR{\textsf{R}\/}

\newcommand{\sig}[2]{\Sigma_{{#1},{#2}}}
\def \sitst{\textsf{SiteST}\/}
\def\SP{\texttt{S-PLUS}\/}
\def\T{\mbox{\bf T}}
\def\tr{\triangle}
\def\t{\mbox{\bf t}}
\def\tra{\mbox{tr}}

\def\U{\mbox{\bf U}}
\def\Unif{\emph{Unif}}
\def\u{\mbox{\bf u}}
\def\v{\mbox{\bf v}}

\def\w{\mbox{\bf w}}
\def\var{\mbox{\sf var}}
\def\W{\mbox{\bf W}}
\def\X{\textbf{X}}
\def\x{\textbf{x}}

\def\Y{\textbf{Y}}
\def\yg{\textbf{y}}
\def\y0{y^0}

\def\Z{\textbf{Z}}
\def\z{ \textbf{z}}
\def\zer{\large{0}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%
\urlstyle{sf}
\def\rmdefault{cmr}

%%%% pour les chiffres des \'equations
\makeatletter
\renewcommand\theequation{\thesection.\arabic{equation}}
\@addtoreset{equation}{section}
\makeatother



\title{\RR~pour les s\'eries temporelles (compl\'ements du Chapitre 2)}
\author{Yves Aragon\footnote{yves.aragon@gmail.com} \cr
{\normalsize Universit\'e Toulouse Capitole} }
\begin{document}
\SweaveOpts{concordance=TRUE}
\maketitle
\setcounter{section}{2}
\renewcommand{\thefootnote}{\arabic{footnote}}



\SweaveOpts{keep.source=TRUE}
<<echo=FALSE>>=
owidth <- getOption("width") # largeur des sorties
options(width=60, continue="+ ","warn"=-1 )
.PngNo <- 0
nom.fich = "./Figures/anx2-bitmap-"
@
%
@
%
\SweaveOpts{keep.source=TRUE}
%
% les diff\'erents types de graphiques
%  ancien
<<label=bfig,echo=FALSE,eval=FALSE>>=
.PngNo <- .PngNo + 1; file = paste(nom.fich, .PngNo, sep="")
pdf(file=paste(file,".pdf",sep=""), width = 7, height = 7, pointsize = 12, bg = "white")
@

<<label=bfigps,echo=FALSE,eval=FALSE>>=
postscript(file=paste(file,".ps",sep=""), width = 7, height = 7, pointsize = 12, bg = "white",horizontal= FALSE,paper="special")
@


% 1111111111111
<<label=bfig1,echo=FALSE,eval=FALSE>>=
.PngNo <- .PngNo + 1; file = paste(nom.fich, .PngNo, sep="")
pdf(file=paste(file,".pdf",sep=""), width = 5, height = 2, pointsize = 10, bg = "white")
@

<<label=bfigps1,echo=FALSE,eval=FALSE>>=
postscript(file=paste(file,".ps",sep=""),  width = 5, height =2, pointsize = 10, bg = "white",horizontal= FALSE,paper="special")
@
% 222222222222222
<<label=bfig2,echo=FALSE,eval=FALSE>>=
.PngNo <- .PngNo + 1; file = paste(nom.fich, .PngNo, sep="")
pdf(file=paste(file,".pdf",sep=""), width = 3.9, height = 3.1, pointsize = 10, bg = "white")
@

<<label=bfigps2,echo=FALSE,eval=FALSE>>=
postscript(file=paste(file,".ps",sep=""), width = 3.9, height = 3.1,   pointsize = 10, bg = "white",horizontal= FALSE,paper="special")
@
%   3333333333333333333333333333

<<label=bfig3,echo=FALSE,eval=FALSE>>=
.PngNo <- .PngNo + 1; file = paste(nom.fich, .PngNo, sep="")
pdf(file=paste(file,".pdf",sep=""), width = 5.92, height = 6.74, pointsize = 10, bg = "white")
@
<<label=bfigps3,echo=FALSE,eval=FALSE>>=
postscript(file=paste(file,".ps",sep=""), width = 5.92, height = 6.74, pointsize = 10, bg = "white",horizontal= FALSE,paper="special")
@

<<label=bfig4,echo=FALSE,eval=FALSE>>=
.PngNo <- .PngNo + 1; file = paste(nom.fich, .PngNo, sep="")
pdf(file=paste(file,".pdf",sep=""), width = 6, height = 6, pointsize = 10, bg = "white")
@
<<label=bfigps4,echo=FALSE,eval=FALSE>>=
postscript(file=paste(file,".ps",sep=""), width = 6, height = 6, pointsize = 10, bg = "white",horizontal= FALSE,paper="special")
@

<<label=zfig2,echo=FALSE,eval=FALSE>>=
dev.null <- dev.off()
@

<<label=zfiginclude,echo=FALSE,eval=FALSE>>=
cat("\\includegraphics[width=0.9\\textwidth]{", file, "}\n\n", sep="")
@ 

\subsection{Obtenir de l'aide sur \RR}
Le moteur de recherche int\'egr\'e \`a \RR~permet d'obtenir facilement de l'aide. On l'a indiqu\'e dans l'introduction, \RR~comporte de nombreux packages, certains font partie
de la distribution, d'autres doivent \^etre \emph{install\'es} par l'utilisateur, g\'en\'eralement depuis un site miroir de CRAN. Mais il ne peut s'en servir que s'ils sont   \emph{charg\'es} et
l'aide en ligne ne concerne que les fonctions
 des packages charg\'es.  Examinons quelques situations.
\begin{trivlist}

  \item[\textbf{1}] Si l'on conna\^it le nom de la fonction sur laquelle on veut de l'aide et si elle fait partie d'un package charg\'e
  sur la machine, on utilise indiff\'eremment \code{?} ou \code{help()}, ainsi :

{\small
<<eval=FALSE>>=
?aggregate
help(aggregate)
@
}
\noindent
donnent l'un ou l'autre la syntaxe et des exemples de   \code{aggregate()} ainsi que des liens vers des questions connexes.
Si une fonction appartient \`a un package non install\'e, il faut d'abord l'installer pour avoir de l'aide sur ses fonctions.
  \item[\textbf{2}] Si on n'a pas de nom de fonction mais qu'on veut avoir la liste des fonctions s'int\'eressant \`a une certaine
  notion, on utilise  \code{help.search()} ou \code{??}. Par exemple :

{\small
<<eval=FALSE>>=
help.search("date")
# ou
??date
@
}
\noindent
donnent la liste de toutes les fonctions, class\'ees par package, charg\'es ou seulement install\'es, o\`u "date" appara\^it.


  \item[\textbf{3}] Enfin quand on ne sait pas s'il existe une fonction pour une t\^ache, on peut,  depuis \RR, se renseigner
  sur le site de \RR. Exemple :

{\small
<<eval=FALSE>>=
RSiteSearch("gini")
@
}
\noindent
En dernier recours on peut chercher sur le Net. Ainsi en tapant  sur un moteur de recherche les mots:
\\
\verb"CRAN R date month example",
on obtient des renseignements pertinents sur la fa\c{c}on d'extraire le mois d'une date. Le mot \code{example} permet souvent de limiter les pages ;
de m\^eme
\\
\verb"CRAN package inequality"
 donne, parmi beaucoup de choses sans int\'er\^et,  la liste des packages traitant de mesures  d'in\'egalit\'e.
\end{trivlist}
Il faut syst\'ematiquement examiner l'aide en ligne des fonctions rencontr\'ees dans ce livre. M\^eme si l'usage en para\^it \'evident, la fonction a souvent des options fort utiles dans d'autres circonstances.
De plus, les exemples contenus dans l'aide  sollicitent la r\'eflexion du lecteur et sont tr\`es instructifs. On en tire le plus grand profit en les ex\'ecutant ligne \`a ligne.
\\[.3cm]
\textbf{Une erreur courante.}
Un nom de fonction est toujours suivi de parenth\`eses \verb"(...)", et inversement, \textit{seul un nom de fonction est suivi de parenth\`eses}.
Consid\'erons le code suivant  :

{\small
\begin{verbatim}
> num=which.min(lait)
> t.lait = time(lait)
> cat('temps collecte minimale : ',t.lait(num),'\n')
Erreur dans cat("temps collecte minimale : ", t.lait(num), "\n") :
  impossible de trouver la fonction "t.lait"
\end{verbatim}
}
\noindent
 Dans ce code, \code{lait} est une s\'erie temporelle \'etudi\'ee au chapitre 11. On rep\`ere le num\'ero de l'observation o\`u la  s\'erie   est minimum.
Par \code{time()}, on  extrait le temps/date de cette s\'erie et on
veut imprimer le temps du minimum, \`a savoir,  \code{t.lait[num]}. Par erreur on a tap\'e des \verb"( )" au lieu de \verb"[ ]", \RR~croit donc que \code{t.lait} est une fonction,
qu'il ne  trouve \'evidemment pas. Le message d'erreur est donc clair.



\subsection{Comprendre et changer la structure d'un objet\label{R:struct}}
Dans \RR, les donn\'ees multidimensionnelles sont stock\'ees sous diff\'erentes formes : matrice, array,   dataframe... ou sous des combinaisons de tels objets. Un dataframe
est une collection de vecteurs de m\^eme longueur qu'on peut imaginer comme une matrice dont les  colonnes peuvent \^etre de types vari\'es
 alors que les colonnes
d'une matrice doivent \^etre toutes de m\^eme type.
Une liste est une structure plus g\'en\'erale qu'un dataframe. C'est un groupe d'objets reli\'es entre eux,
qui peuvent \^etre des vecteurs, des matrices, des listes... Pour savoir les noms des objets qui composent  une liste, on utilise \code{names()}.

Les fonctions de \RR~construisent et manipulent des objets. Ils peuvent \^etre assez simples comme une matrice, un vecteur,  ou  complexes.
C'est le cas des objets  fabriqu\'es par les fonctions statistiques telles que \code{lm()},  \code{ARIMA()}, qui effectuent un ajustement
lin\'eaire,  une mod\'elisation ARIMA... Les objets en sortie de ces fonctions peuvent \^etre des listes, par exemple la liste de tous les
r\'esultats d'un ajustement lin\'eaire, ou des objets plus structur\'es appartenant  \`a    de grandes cat\'egories appel\'ees classes.
\code{plot()},  \code{summary()},  \code{print()}, \code{coef()} sont des fonctions  g\'en\'eriques, elles adaptent
leur action \`a la classe de l'objet auquel on les applique.
\code{class(a)}
donne la classe de l'objet \code{a}.
Il est parfois utile d'abandonner la classe d'un objet. On utilise pour cela   \code{unclass()}. Nous avons
 tr\`es souvent recours
 \`a \verb"str()"\index{str()@\code{str()}}, pour voir comment \RR~a import\'e un fichier de donn\'ees
 (les entiers sont-ils rest\'es des entiers, comment les dates ont-elles \'et\'e comprises....),
pour trouver facilement les composantes d'une sortie d'un traitement statistique qui nous int\'eressent.
 \code{as.vector()}, \code{as.numeric()}, \code{as.Date()}... permettent de changer la structure d'un objet,
\code{unlist()} permet d'abandonner la structure de liste d'un objet. Ces fonctions sont d'un usage fr\'equent.
Par exemple, un vecteur et une matrice colonne ne sont g\'en\'eralement pas interchangeables et on aura parfois besoin de changer leur structure, et ce genre de code est d'un emploi
fr\'equent. Dans le code ci-dessous,  \code{x} et \code{y} sont des vecteurs, et \code{xmat} une matrice colonne :

{\small
<<eval=FALSE>>=
x <- rnorm(10)
xmat <- as.matrix(x, ncol = 1)
y <- as.vector(xmat[, 1])
@
}
%%%%%%%%%%%%%%%%%%
~\\
\textbf{Classes S3.} Une liste avec un attribut \verb"class" associ\'e indiquant de quel type de liste il s'agit, est une classe S3.
 On acc\`ede aux \'el\'ements d'une classe S3 par \verb"$".
Une classe S3 est une liste avec un attribut suppl\'ementaire.
Si un objet d'une certaine classe est pass\'e comme argument \`a une fonction, \RR~cherche une fonction nomm\'ee de fa\c{c}on appropri\'ee pour les objets de cette classe.
Ainsi \code{summary()} est une fonction qui donne un r\'esum\'e adapt\'e aux sorties de diff\'erentes fonctions.
~\\
\textbf{Classes S4.}
Elles ont \'et\'e ajout\'ees assez r\'ecemment \`a \RR.
Ces classes contiennent g\'en\'eralement \`a la fois des donn\'ees et des fonctions, comme les classes S3, mais elles ont quelques avantages techniques. Pour notre usage il nous suffit de savoir
qu'on fait r\'ef\'erence \`a leurs \'el\'ements par @ et non \verb"$".  Les donn\'ees boursi\`eres 
r\'ecup\'er\'ees    \`a l'aide de \pkg{its} sont de classe S4. Nous examinons   leur structure \`a la section 2.2.
 Les s\'eries temporelles de type \texttt{timeSeries} sont des objets de classe S4, on en verra un exemple notamment au chapitre 8, \textit{Trafic mensuel de l'a\'eroport de Toulouse-Blagnac}.





\subsection{Exemple}
Nous nous int\'eresserons un peu plus loin aux structures de donn\'ees temporelles. Examinons maintenant la structure d'une sortie d'ajustement
d'un mod\`ele combinant une tendance lin\'eaire et une erreur qui a une dynamique autor\'egressive simple.
Au chapitre 1, on a utilis\'e le code suivant :

{\small
<<label=r_st.huron>>=
require("forecast")
temps <- time(LakeHuron)
mod.lac <- Arima(LakeHuron, order = c(1, 0, 0), 
                 xreg = temps, method = "ML")
@
}
\noindent
pour estimer le mod\`ele :

 \begin{eqnarray}  
 y_t &=& \beta_0 + \beta_1 x_t + u_t, \;\; t=1,\cdots,T.
\\
 u_t &=& \phi u_{t-1} + z_t,\hspace{1cm} |\phi| < 1.
 \end{eqnarray}

 On obtient les r\'esultats de l'estimation, valeur des coefficients notamment,
par \code{summary(mod.lac)}, op\'eration que nous ferons souvent ; mais ici examinons  la structure de
 l'objet \verb"mod.lac".

{\small
<<label=r_st.huron.struc>>=
str(mod.lac, width = 60, strict.width = "cut")
@
}
\noindent
\index{str()@\code{str()}}Les options \code{width=60, strict.width="cut"} limitent la largeur du texte imprim\'e ; elles ne sont l\`a que pour les besoins de la mise en page du livre et
 ne sont g\'en\'eralement pas  utilis\'ees dans la pratique.
On voit que \code{mod.lac} est une liste de 15 objets dont    \verb"mod.lac$model" est lui-m\^eme une liste. On peut alors r\'ecup\'erer une composante
de la liste,  le coefficient du temps dans la r\'egression...
On voit par exemple, que le nom de ce coefficient est \code{temps}, on peut donc, et c'est plus s\^ur que de rep\'erer la position d'un terme dans un vecteur, le r\'ecup\'erer par son nom :

{\small
<<label=r_st.huron.coef>>=
residus <- mod.lac$residuals
(coeftemps <- mod.lac$coef[names(mod.lac$coef) == "temps"])
@
}
\noindent
 \code{fitted()}, \code{residuals()}, \code{coefficients()} sont des fonctions g\'en\'eriques qui permettent \'egalement  de r\'ecup\'erer certains r\'esultats.
Il arrive que les  sorties d'une fonction soient tr\`es abondantes et    d\'epassent la capacit\'e de la console, si bien qu'on en perd le d\'ebut. \code{sink()} permet d'orienter la sortie vers un fichier.
Par exemple  :

{\small
\begin{Verbatim}
sink('d:/outmod.txt')
mod.lac
sink()
\end{Verbatim}
}
\noindent
La premi\`ere instruction  oriente la sortie vers le fichier texte \verb"outmod.txt" du r\'epertoire \verb"D:", la deuxi\`eme \'ecrit la structure de l'objet \verb"mod" dans ce fichier et la troisi\`eme, qu'il
ne faut pas oublier, redirige la sortie vers la console.


\end{document}



