Descrição dos Dados

Para modelar o índice de custo de vida no Estado de São Paulo, utilizou-se o modelo de suavização exponencial de Holt. Onde os dados são referentes a 126 informações no período de Janeiro de 1970 a Junho de 1980. O modelo de suavização exponencial de Holt-Winters foi utilizado para modelar o índice de produto industrial, estes consistem em 187 observações período de Janeiro de 1985 a Julho de 2000.

##----------------------------------------------------##
##            INSERINDO O BANCO DE DADOS              ##
##----------------------------------------------------##

dados <- read.csv2(file.choose(), sep = ";", dec = ",", header = T)
attach(dados)

##----------------------------------------------------##
##            PLOTANDO A SÉRIE DOS DADOS              ##
##----------------------------------------------------##

plot(ts(ICV, start = c(1970, 1), frequency = 12), type = "l", col = "blue",
     xlab = "Ano", ylab = "Quantidade", las = 1)

abline(v = seq(1971, 1980, 2), lty = 2)

##----------------------------------------------------##
##            PLOTANDO A SÉRIE SELECIONADA            ##
##----------------------------------------------------##

plot(ts(ICV[1:114], start = c(1970, 1), frequency = 12), type = "l", col = "blue", xlab = "Ano", 
     ylab = "Quantidade", las = 1)

abline(v = seq(1971, 1979, 2), lty = 2)

##-------------------------------------------------------------##
##            MODELANDO A SÉRIE PELO MÉTODO DE HOLT            ##
##-------------------------------------------------------------##

t = ICV[1:114]
a = 0.9
c = 0.3

Test <- t
Zest <- t

for (i in 3:114) {
  Test[1] = NA
  Zest[1] = NA
  Test[2] = t[2]-t[1]
  Zest[2] = t[2]
  
  Zest[i] <- a*t[i]+(1-a)*(Zest[i-1]+Test[i-1])
  Test[i] <- c*(Zest[i]-Zest[i-1])+(1-c)*Test[i-1]
}

##---------------------------------------------------##
##            PLOTANDO A SÉRIE MODELADA              ##
##---------------------------------------------------##

plot(ICV[1:114], type = "o", xlab = "Ano", 
     ylab = "Quantidade", las = 1, ylim = c(0.84, 779),
     pch = 21, bg = "yellow", axes = F)
lines(Zest, col = "red", lwd = 2)
lines(Test, col = "green3", lwd = 2)

axis(1, at = seq(12,114,12), labels = c("1971", "1972", "1973", 
                                        "1974", "1975", "1976", 
                                        "1977", "1978", "1979"))

axis(2, seq(0,780,100), las = 1)
box()

legend(0,800, c("ICV Obsevado", "Estimativa do Nível", "Estimativa da Tendência"),
      col = c("black", "red","green3"), x.intersp = 0.3, y.intersp = 0.7, 
      bty = "n", lty = c(1,1,1), pt.bg = c("yellow",NA, NA), pch = c(21,NA,NA))

##--------------------------------------------------------------##
##            PREVISÃO DO MODELO COM BASE EM JUNHO              ##
##--------------------------------------------------------------##

h = 1:12
Zprev <- Zest[114]+h*Test[114]

##------------------------------------------------------##
##            PLOTANDO A PREVISÃO DA SÉRIE              ##
##------------------------------------------------------##

plot(ICV[115:126], type = "o", xlab = "Ano", 
     ylab = "Quantidade", las = 1, pch = 21, 
     bg = "yellow", axes = F)
lines(Zprev, col = "red")

axis(1, at = seq(1,12), labels = c("Jul/1979", "Ago/1979", "Set/1979",
                                   "Out/1979", "Nov/1979", "Dez/1979",
                                   "Jan/1980", "Fev/1980", "Ma?/1980", 
                                   "Abr/1980", "Mai/1980", "Jun/1980"))

axis(2, seq(800,1375,50), las = 1)
box()

legend(1,1350, c("ICV Observado", "ICV Previsto"), col = c("black", "red"),
        lty = c(1,1), pch = c(21, NA), pt.bg = c("yellow",NA), 
       bty = "n", x.intersp = 0.4, y.intersp = 0.8)

##---------------------------------------------------------##
##            ESTIMANDO A PREVISÃO ATUALIZADA              ##
##---------------------------------------------------------##

k <- ICV[115:126]
Azest <- k
Atest <- k
Aprev <- k

for (j in 2:12) {
  Azest[1] = a*k[1]+(1-a)*(Zest[114]+Test[114])
  Atest[1] =  c*(Azest[1]-Zest[114])+(1-c)*Test[114]
  Aprev[1] = Zest[114]+Test[114]
  
  Azest[j] <- a*k[j]+(1-a)*(Azest[j-1]+Atest[j-1])
  Atest[j] <- c*(Azest[j]-Azest[j-1])+(1-c)*Atest[j-1]
  Aprev[j] <- Azest[j-1]+Atest[j-1]
}

##-----------------------------------------------------------------##
##            PLOTANDO A PREVISÃO DA SÉRIE ATUALIZADA              ##
##-----------------------------------------------------------------##

plot(ICV[115:126], type = "o", xlab = "Ano", 
     ylab = "Quantidade", las = 1, pch = 21, 
     bg = "yellow", axes = F)
lines(Aprev, col = "red")

axis(1, at = seq(1,12), labels = c("Jul/1979", "Ago/1979", "Set/1979",
                                   "Out/1979", "Nov/1979", "Dez/1979",
                                   "Jan/1980", "Fev/1980", "Mar/1980",
                                   "Abr/1980", "Mai/1980", "Jun/1980"))

axis(2, seq(800, 1375, 50), las = 1)
box()

legend(1,1350, c("ICV Observado", "Previsão"), col = c("black", "red"),
       lty = c(1,1), pt.bg = c("yellow", NA), pch = c(21,NA), bty = "n",
       x.intersp = 0.4, y.intersp = 0.8)

##-----------------------------------------------------##
##            PLOTANDO O MODELO DA SÉRIE              ##
##-----------------------------------------------------##

Zmod <- Zest+Test
Zprev1 <- c(rep(NA,113), Zmod[114], Zprev)
plot(ICV[1:126], type = "o", xlab = "Ano", 
     ylab = "Quantidade", las = 1, 
     pch = 21, bg = "yellow", axes = F)
lines(Zmod, col = "red", lwd = 2)
lines(Zprev1, col = "green3", lwd = 2)
axis(1, at = seq(12,120,12), labels = c("1971", "1972", "1973", 
                                        "1974", "1975", "1976", 
                                        "1977", "1978", "1979",
                                        "1980"))

axis(2, seq(0,1380,100), las = 1)
box()

legend(0,1300, c("ICV Obsevado", "Modelo Estimado", "Previsão Direta"),
       col = c("black", "red","green3"), x.intersp = 0.3, y.intersp = 0.7, 
       bty = "n", lty = c(1,1,1), pt.bg = c("yellow",NA, NA), pch = c(21,NA,NA))

##----------------------------------------------------------------##
##            PLOTANDO O MODELO DA SÉRIE ATUALIZADO              ##
##----------------------------------------------------------------##

Zaprev <- c(rep(NA,113), Zmod[114], Aprev)

plot(ICV[1:126], type = "o", xlab = "Ano", 
     ylab = "Quantidade", las = 1, 
     pch = 21, bg = "yellow", axes = F)
lines(Zmod, col = "red", lwd = 2)
lines(Zaprev, col = "green3", lwd = 2)
axis(1, at = seq(12,120,12), labels = c("1971", "1972", "1973", 
                                        "1974", "1975", "1976", 
                                        "1977", "1978", "1979",
                                        "1980"))

axis(2, seq(0,1380,100), las = 1)
box()

legend(0,1300, c("ICV Obsevado", "Modelo Estimado", "Previsão Atualizada"),
       col = c("black", "red","green3"), x.intersp = 0.3, y.intersp = 0.7, 
       bty = "n", lty = c(1,1,1), pt.bg = c("yellow",NA, NA), pch = c(21,NA,NA))

##----------------------------------------------------##
##            ERRO DE PREVISÃO DO MODELO              ##
##----------------------------------------------------##

Erro <- ICV[115:126]-Zprev
Erroa <- ICV[115:126]-Aprev

par(mfrow = c(2,1))


plot(Erro, type = "o", xlab = "Ano", 
     ylab = "Erro Previsão Direta", las = 1, pch = 19, 
     col = "red", axes = F)

axis(1, at = seq(1,12), labels = c("Jul/1979", "Ago/1979", "Set/1979",
                                   "Out/1979", "Nov/1979", "Dez/1979",
                                   "Jan/1980", "Fev/1980", "Mar/1980",
                                   "Abr/1980", "Mai/1980", "Jun/1980"))

axis(2, seq(-0.40,308,80), las = 1, cex.axis = 0.7)

box()

plot(Erroa, col = "green3", type = "o", las = 1, 
     axes = F, pch = 19, xlab = "Ano", ylab = "Erro Previsão Atualizado")
abline(h = 0, lty = 2, col = "red")

axis(1, at = seq(1,12), labels = c("Jul/1979", "Ago/1979", "Set/1979",
                                  "Out/1979", "Nov/1979", "Dez/1979",
                                  "Jan/1980", "Fev/1980", "Mar/1980",
                                  "Abr/1980", "Mai/1980", "Jun/1980"))

axis(2, seq(-18,63,40), las = 1)
box()

##--------------------------------------------------------##
##             MEDIDAS DE ACURÁCIA DO MODELO              ##
##--------------------------------------------------------##

EQM <- sum((ICV[115:126]-Aprev)^2)/length(ICV[115:126])
MAPE <- (sum(abs(ICV[115:126]-Aprev)/ICV[115:126])*100)/length(ICV[115:126])
EMA <- sum(abs(ICV[115:126]-Aprev))/length(ICV[115:126])