\subsection{Aplicação a dados de séries temporais} 


\setkeys{Gin}{width=0.99\textwidth}

Nesta seção nós aplicamos a análise a dados de 
séries temporais. Nós tomamos como exemplo 
uma série temporal simulada de um modelo auto 
regressivo de ordem 1. Nós simulamos uma série 
de tamanho 150 com parâmetro autoregressivo igual 
a $0.5$ e com média igual a zero nos primeiros 50 valores, 
média igual a 1 nos próximos 50 valores e média igual 
a 2 nos últimos 50 valores. 

\begin{Schunk}
\begin{Sinput}
> set.seed(123)
> n <- 150
> serie <- arima.sim(list(ar = 0.5), n) + rep(0:2, each = n/3)
\end{Sinput}
\end{Schunk}
\begin{Schunk}
\begin{Sinput}
> require(spdep)
\end{Sinput}
\end{Schunk}

A estrutura de uma série temporal já define uma MST. 
Neste caso, a análise parte da definição da MST:
\begin{Schunk}
\begin{Sinput}
> mst.s <- cbind(1:(n - 1), 2:n)
\end{Sinput}
\end{Schunk}

No cálculo da homogeneidade de um grupo, a 
verossimilhança, precisamos estimar os parâmetros 
do modelo ajustado à série nesse grupo. Nós vamos 
estimar os parâmetros utilizando optimização numérica. 
Para isso, definimos a função de verossimilhança com 
o primeiro argumento da função sendo os parâmetros 
do modelo.

\begin{Schunk}
\begin{Sinput}
> f <- function(pars, x) -sum(dnorm(x[-1], cbind(1, x[-length(x)] - 
+     pars[1]) %*% pars[1:2], pars[3], log = TRUE))
\end{Sinput}
\end{Schunk}

A seguir definimos a função para o cálculo da 
verossimilhança, restrigindo que o cálculo seja feito 
apenas se houver mais de três observações no grupo. 
\begin{Schunk}
\begin{Sinput}
> llnorm <- function(x, id) {
+     id <- sort(id)
+     if (length(id) < 5) 
+         return(Inf)
+     else f(optim(c(mean(x[id]), 0, sd(x[id])), f, x = x[id])$par, 
+         x[id])
+ }
> optim(c(mean(serie), 0, sd(serie)), f, x = serie)
\end{Sinput}
\begin{Soutput}
$par
[1] 0.9669542 0.6173814 0.9752087

$value
[1] 207.6700

$counts
function gradient 
     108       NA 

$convergence
[1] 0

$message
NULL
\end{Soutput}
\end{Schunk}

Inicialmente aplicamos o SKATER para gerar cinco grupos:
\begin{Schunk}
\begin{Sinput}
> sk5 <- skater(mst.s, serie, 4, method = llnorm)
\end{Sinput}
\end{Schunk}

Após gerar cinco grupos, observamos a homogeneidade 
total a cada passo e as diferenças sucessivas.
Considerando que o modelo ajustado tem três 
parâmetros, a queda de desvios sob hipótese de que 
não é necessário fazer uma divisão a mais tem distribuição 
qui-quadrado com três graus de liberdade. 

\begin{Schunk}
\begin{Sinput}
> sk5$ssw
\end{Sinput}
\begin{Soutput}
[1] 207.6700 198.6266 190.9931 185.0074 178.2188
\end{Soutput}
\begin{Sinput}
> diff(sk5$ssw)
\end{Sinput}
\begin{Soutput}
[1] -9.043347 -7.633564 -5.985644 -6.788636
\end{Soutput}
\begin{Sinput}
> pchisq(-diff(sk5$ssw), 3, lower = FALSE)
\end{Sinput}
\begin{Soutput}
[1] 0.02872009 0.05422412 0.11231079 0.07894865
\end{Soutput}
\end{Schunk}

Observamos que a queda de desvios obtida 
de dois para três grupos não é tão significativa. 
Isso deve ser devido ao fato de que na série simulada, 
apenas o parâmetro de média é que é diferente nos 
três grupos. Poderíamos fixar o parâmetro de correlação 
e de variância e estimar apenas a média em cada passo. 
Mas poderia levar a um má desempenho no início do 
processo. A variância, por exemplo, poderia ser subestimada 
no início, fazendo com que a verossimilhança não fosse tão grande. 

A seguir, obtemos três grupos e plotamos o resultado, que 
pode ser visualizado na figura~\ref{resulttemp}. 
Nessa figura, utilizamos os valores da série como 
coordenadas do grafo. 

\begin{figure}
\centering
\begin{Schunk}
\begin{Sinput}
> sk3 <- skater(mst.s, serie, 2, method = llnorm)
> plot(sk3, cbind(1:n, serie))
\end{Sinput}
\end{Schunk}
\includegraphics{figs/fig-result}
\label{resulttemp}
\caption{Resultado do SKATER aplicado a série simulada}
\end{figure}


