Criando uma série temporal falsa

A série que vamos gerar segue o modelo:
\(X_t=T_t+Z_t\) onde \(T_t=\alpha_0+\alpha_1 t\) e \(Z_tS=0.5Z_{t-1}+a_t\), com \(Z_0=0\) e \(a_t\sim N(0,\sigma_b) {i.i.d.}\)

#rm(list=ls(TRUE))

set.seed(2015)

N <- 100 # quantidade de valores gerados

vari <- 1 # atribuindo variância do erro aleatório "a"
aver <- 0 # atribuindo média do erro aleatório "a"


# declarando vetores de cada componente da série temporal

z   <- rep(0,N) # componente estocástica
a   <- rep(0,N) # erro aletório gerado por uma dist. normal
tre <- rep(0,N) # tendencia 
x   <- rep(0,N) # valor fake da série 


trend <- function(j){
# Coeficientes tendencia dada pelo polinômio trend = alpha0 + alpha1*t + alpha2*(t^2)
  alpha0 <- 1
    alpha1 <- 0.5
    alpha2 <- 0

    aux <- alpha0 + alpha1*j + alpha2*(j^2)
    return(aux)
}

#trend[1] <- alpha0 + alpha1*1 + alpha2*(1^2)

# atribuindo valor à primeira posição de x

a[1]   <- rnorm(1,0,1)

z[1]   <- 0

tre[1] <- trend(1)

x[1]   <- trend(1) + z[1]

#Gerando a série temporal

for(i in 2:N){
    a[i]   <- rnorm(1,aver,vari) 
    z[i]   <- 0.5*z[i-1] + a[i]
    tre[i] <- trend(i)
    x[i]   <- tre[i] + z[i]
    #cat(i,"\n")    
}

Ficamos com a seguinte série

Implentando as funções para o filtro de médias móveis e a suavização exponencial

Médias Móveis (Moving Average)

\(T^*_t=\sum\limits_{j=-k}^kC_j X_{t+j}\)

maf <- function(t,j) {
  if(j>length(t)) return("jumento, o tamanho da média móvel nao pode ser maior que o tamanho da série")
  size <- length(t)-2*j # tamanho da nova série
    p <-j # atribuindo para nao dar problema
    aux <- rep(0,size) # criando vetor da série filtrada
    for(k in 1:size){ # gerando a série filtrada
        o <- 1
        aux[k] <- t[k+p] # atribuindo valor central
        while(o <= j){
            aux[k] <- aux[k]+t[k+p-o] + t[k+p+o] #atribuindo valores com mesma distância
            o <- o+1
        }
        aux[k] <- aux[k]/(2*j+1) # dividindo pela quantidade de valores na média móvel
    }
    return(aux) # retornando a série filtrada
}

Suavização Exponencial (Exponential Smoothing)

\(\overline{X}_t=\alpha X_t + (1-\alpha)\overline{X}_{t-1}\)

exps <- function(t,a){
  if(a<0 || a>1) return("Para de ser burro vc errou o segundo parametro da função")
  size <- length(t) # tamanho do vetor de retorno
  aux <- rep(0,size) # criando o vetor de retorno
  aux[1] <- t[1] # atribuindo o primeiro passo
  for(i in 2:size){ # calculando a suavização exponencial
    aux[i] <- a*t[i] + (1-a)*t[i-1]
  }
  return(aux) # retornando o vetor com a suavização esponencial
}

Aqui temos o gráfico com a série temporal Bjundas original, Bjundas com o filtro de médias móveis(k=2) e Bjundas com a suavização exponencial \(\alpha=0.4\)