Está en la página 1de 9

##ESTIMACION DE LA DEMANDA DE GASOLINA EN COLOMBIA MEDIANTE ESTRATEGIAS HOLT-

WINTERS##
##Y MODELO ESTRUCTURAL BASICO BSM##

##importar la bd desde gretl, recuerde guardar la bd versi�n 97_2003##


##para lectura de lo datos, una vez cargado importar a R utilizando en
herramientas##
##"INICIAR GNU - R##

##lectura de los datos en R##


gretldata

##cargar las siguientes librerias aplicables en st##


library(tseries)
library(timeSeries)
library(forecast)

##construccion de la st##

gasolina.ts<-ts(datos,start=1960,frequency=12)
gasolina.ts

length(gasolina.ts)

##ploteo de la st y su tendencia##

d<-decompose(gasolina.ts)
d
plot(gasolina.ts,type="o",pch=20,main="Colombia.Demanda de Gasolina Mensual.A�os
1960 - 1975")
lines(d$trend,lwd=2,col="red")
grid()

##descomposicion de la st en c/u de sus componentes, recuerde que la eleccion del


plot dependera##
##del metodo aplicado en excel para diferencias y cocientes estacionales##

##esquema aditivo##
plot(decompose(gasolina.ts,type="additive"))

##esquema multiplicativo##
plot(decompose(gasolina.ts,type="multiplicative"))

##estadisticos principales##

summary(gasolina.ts)

##existe evidencia de comportamiento normal en los datos##

library(tseries)
test_JB<-jarque.bera.test(gasolina.ts)
test_JB

##analisis: como p - valor<0.05 se concluye con un nivel de confianza del 95%##


##que no existe comportamiento normal de los datos##

##asimetria y curtosis##
library(psych)
asimetria<-skew(gasolina.ts)
asimetria
kurtosis<-kurtosi(gasolina.ts)
kurtosis

##ploteo de la st, histograma con comparativo de N(0,1) asi como qq-plot##


par(mfrow=c(3,1))
plot(gasolina.ts,col="blue", xlab = "per�odo", ylab = "demanda", main =
"Colombia.Demanda de Gasolina Mensual. A�os 1960 - 1975"
, type = "l")
hist(gasolina.ts, col="blue", 100, xlab = "Demanda", ylab = "Frecuencia",
main= "Histograma de la Demanda")
curve(dnorm(x, mean=mean(gasolina.ts), sd=sqrt(var(gasolina.ts))),
to=max(gasolina.ts), col = 2, lty = 2, lwd = 2, add = TRUE)
qqnorm(gasolina.ts, col="blue", main="Gr�fico de probabilidad normal")
qqline(gasolina.ts, col=2)

##ploteo de la st y correlogramas##
library(forecast)
tsdisplay(gasolina.ts)

##grafico de interacciones autocorrelacion de la st##

##nota: El codigo que se presenta a continuacion es una funcion que permite


graficar estas##
##interacciones para cualquier serie de tiempo, se coloco el nombre generico de
activacion "DATA" para que este##
##codigo sea usado en forma generica, para efectos de visualizar el grafico
cambiamos el nombre##
##de la serie bajo estudio##

DATA<-gasolina.ts
DATA

##seleccionar toda la sintaxis para visualizar el gr�fico##

JAB.TS.COR <- function(DATA){


x <- DATA;
n <- length(x)
k <- 5
m <- matrix(nr=n+k-1, nc=k)
colnames(m) <- c("x[i]", "x[i-1]", "x[i-2]", "x[i-3]", "x[i-4]")
for (i in 1:k) {
m[,i] <- c(rep(NA,i-1), x, rep(NA, k-i))
}
pairs(m,
gap = 0,
lower.panel = panel.smooth,
upper.panel = function (x,y) {
panel.smooth(x,y)
par(usr = c(0, 1, 0, 1))
a <- cor(x,y, use='pairwise.complete.obs')
text(.1,.9,
adj=c(0,1),
round(a, digits=2),
col='blue',
cex=2*a)
})
title("Autocorrelations",line = 3)
}
JAB.TS.COR(DATA)

###################################################################################
##################
################construccion del modelo HoltWinters bajo el esquema
multiplicativo####################
###################################################################################
###################
modelo_gasolina_HoltWinters<-HoltWinters(gasolina.ts,seasonal = "mult")
modelo_gasolina_HoltWinters

##estimaciones del modelo,nivel medio, tendencia y componente estacional por


HoltWinters##
modelo_gasolina_HoltWinters$fitted

##visualizacion de las estimaciones solamente##


modelo_gasolina_HoltWinters$fitted[,1]

##ploteamos los resultados de la simulacion##


plot(modelo_gasolina_HoltWinters)

##ES POSIBLE MODIFICAR LOS PARAMETROS DE SUAVIZAMIENTO PARA CREAR FAMILIAS DE


CURVAS EN LA SIMULACI�N?##

##declaraci�n del modelo modificando los parametros##

modelo_gasolina_HoltWinters_mod<-
HoltWinters(gasolina.ts,alpha=0.01,beta=0.001,gamma=0.002)
modelo_gasolina_HoltWinters_mod

##estimaciones del modelo,nivel medio, tendencia y componente estacional por


HoltWinters##
modelo_gasolina_HoltWinters_mod$fitted

##visualizacion de las estimaciones solamente##


modelo_gasolina_HoltWinters_mod$fitted[,1]

##ploteamos los resultados de la simulacion##


plot(modelo_gasolina_HoltWinters_mod)

##creamos una st multivariante con las estimaciones##

comparativo<-
data.frame(modelo_gasolina_HoltWinters$fitted[,1],modelo_gasolina_HoltWinters_mod$f
itted[,1])
comparativo

a<-ts(comparativo,star=1961,frequency=12)
a

ten1<-cbind(a)
ts.plot(ten1,col=3:8,main="Colombia.Demanda de Gasolina vs Suavizamientos
HoltWinters.A�os 1961 - 1975",ylab="demanda",xlab="a�o")
##realizamos las predicciones para 1976 con intervalos de confianza al##
##80 y 95% respectivamente##

predicciones<-forecast.HoltWinters(modelo_gasolina_HoltWinters,h=12)
predicciones

##ploteamos las predicciones y los intervalos de confianza##


plot.forecast(predicciones)

###################################################################################
###################################
####################Aplicacion del modelo estructural b�sico
BSM####################################################
###################################################################################
#################################
##nota: El modelo esta formulado bajo un esquema aditivo, para resolver el problema
se debe aplicar##
##log a la st y devolver el cambio al final con las estimaciones ya que la
aplicacion de log##
##garantiza un esquema multiplicativo##

##st en log##

loggasolina.ts<-log(gasolina.ts)
loggasolina.ts

##construccion del modelo BSM###


gasolina_BSM <- StructTS(loggasolina.ts, type= "BSM")
gasolina_BSM

##valores estimados por el modelo BSM##


gasolina_BSM$fitted

##comparativo con los datos en log##


simulacion<-gasolina_BSM$fitted[,1]
simulacion

resultados1<-data.frame(loggasolina.ts,simulacion)
resultados1

##resultado de la simulacion en valores reales##


demanda<-exp(loggasolina.ts)
demanda
estimacionBSM<-exp(simulacion)
estimacionBSM

resultados2<-data.frame(demanda,estimacionBSM)
resultados2

##como una st umtivariante##


salida<-ts(resultados2,star=1960,frequency=12)
salida

##ploteo de los resultados##

ten1<-cbind(demanda,estimacionBSM)
ts.plot(ten1,col=3:8,main="Colombia.Demanda de Gasolina vs Modelo Estructural
B�sico (BSM).A�os 1961 - 1975",ylab="demanda",xlab="a�o")
##nota: la interpretacion de la salida es la siguiente: como yt=mu(t)+gamma(t)
+epsilom(t)estas corresponden##
##con las componentes nivel, tendencia y patron estacional de la st y(t), se
observa que el reporte corresponde##
##a las estimaciones de la st dentro de la muestra (simulacion); la suma por fila
de c/u de las componentes##
##arroja como resultado las estimaciones de demanda de gasolina para el periodo
1960-1975##

####################
##clase "StructTS"##
####################

estimacionesStructTS<-fitted(gasolina_BSM)
estimacionesStructTS

##comparativo con la demanda en log##


simulacion<-estimacionesStructTS[,1]
simulacion

resultados1<-data.frame(loggasolina.ts,simulacion)
resultados1

##ploteo bajo log##

plot(cbind(loggasolina.ts, simulacion),
plot.type = "single", lty=1:4, col=1:4)

##comparativo en valores reales##


demandaG<-exp(loggasolina.ts)
demandaG

estimacionesStructTS<-exp(simulacion)
estimacionesStructTS

resultados2<-data.frame(demandaG,estimacionesStructTS)
resultados2

##como una st multivariante##

salida<-ts(resultados2,star=1960,frequency=12)
salida

##ploteo de los resultados bajo StructTS##

plot(cbind(demandaG,estimacionesStructTS),
plot.type = "single", lty=1:4, col=1:4)

####################
##clase �tsSmooth�##
####################

simulacion<-tsSmooth(gasolina_BSM)
simulacion

##comparativo con la demanda en log##


estimacionlog<-simulacion[,1]
estimacionlog

resultados1<-data.frame(loggasolina.ts,estimacionlog)
resultados1

ploteo de los resultados#

plot(cbind(loggasolina.ts, simulacion),
plot.type = "single", lty=1:4, col=1:4)

##comparativo con los datos reales##

estimacionestsSmooth<-exp(estimacionlog)
estimacionestsSmooth

resultados2<-data.frame(demandaG,estimacionestsSmooth)
resultados2

##como una st multivariante##

salida<-ts(resultados2,star=1960,frequency=12)
salida

##ploteo de los resultados##


plot(cbind(demandaG,estimacionestsSmooth),
plot.type = "single", lty=1:4, col=1:4)

##comparativo de ambas estimaciones##


par(mfrow=c(2,1))
plot(cbind(demandaG,estimacionesStructTS),
plot.type = "single", lty=1:4, col=1:4,main="Colombia.Demanda de Gasolina.A�os 1961
- 1975 vs BSM Clase StructTS")
plot(cbind(demandaG,estimacionestsSmooth),
plot.type = "single", lty=1:4, col=1:4,main="Colombia.Demanda de Gasolina.A�os 1961
- 1975vs BSM Clase tsSmooth")

##resultados finales de ambas simulaciones en el cuadro##

comparativo<-data.frame(demandaG,estimacionesStructTS,estimacionestsSmooth)
comparativo

##construccion de la st multivariante##
compilado<-ts(comparativo,star=1961,frequency=12)
compilado

##ploteo de las simulaciones bajo los distintos enfoques##


par(mfrow=c(1,1))
plot(compilado,plot.type="s",col=1:4,main="Colombia.Demanda de Gasolina.A�os 1961 -
1975vs BSM Clases StructTS y tsSmooth")

##predicciones del modelo BSM##

library(KFKSDS)
library(stsm)

y <- loggasolina.ts
m <- stsm::stsm.model(model = "BSM", y = y, transPars = "StructTS")
fit <- StructTS(y, "BSM")
m <- stsm::set.pars(m, as.vector(fit$coef[c(4,1:3)]) * 100 / var(y))
ss <- stsm::char2numeric(m, P0cov = TRUE)
res <- predict(ss, y, 12)
res

all.equal(res$pred, predict(fit, 12)$pred)


all.equal(res$se, predict(fit, 12)$se)

##valores proyectados##

proyecciones<-res$pred
proyecciones

##nota:las proyecciones mostradas estan en log10##


##en los pasos subsiguientes se devuelvwea los datos originales##
##con exp()##

#pronostics e intervalos de confianza##


expy <- exp(y)
plot(cbind(expy, exp(res$pred + 2 * res$se)), type = "n", plot.type = "single")
lines(expy)
lines(exp(res$pred), col = "blue")
lines(exp(res$pred + 2 * res$se), col = "red", lty = 2)
lines(exp(res$pred - 2 * res$se), col = "red", lty = 2)

#pronosticos de la componente tendencia##


trend <- exp(fitted(fit)[,1])
plot(cbind(trend, gasolina.ts), type = "n", plot.type = "single")
lines(gasolina.ts, col = "gray")
lines(trend)
lines(exp(res$a[,1]), col = "blue")
lines(exp(res$a[,1] + 2 * sqrt(res$P[,1])), col = "red", lty = 2)
lines(exp(res$a[,1] - 2 * sqrt(res$P[,1])), col = "red", lty = 2)

#pronosticos de la componente estacional##


seas <- exp(fitted(fit)[,3])
plot(cbind(seas, exp(res$a[,3]) + 2 * sqrt(res$P[,3])),
type = "n", plot.type = "single")
lines(seas)
lines(exp(res$a[,3]), col = "blue")
lines(exp(res$a[,3] + 2 * sqrt(res$P[,3])), col = "red", lty = 2)
lines(exp(res$a[,3] - 2 * sqrt(res$P[,3])), col = "red", lty = 2)

##############################
##AJUSTE POR REGRESI�N LOESS##
##############################

##construccion de la regresi�n local loess##


loessmod<-loess(gasolina.ts~time(gasolina.ts))
loessmod

##valores estimados por loess##


loessmod$fitted

##construccion de la bd multivariante##
base1<-data.frame(gretldata,loessmod$fitted)
base1

##construccion de la st##
serie<-ts(base1,star=1960,frequency=12)
serie

##grafico de valores reales vs regresi�n local loess##


par(mfrow=c(1,1))
plot(serie,plot.type="s",col=2:4)

######################################################
##METODO DE DESCOMPOSICION BASADA EN REGRESION LOESS##
######################################################

fit the stl model using only the s.window argument

a<-ts(gasolina.ts,star=1960,frequency=12)
a
class(a)
stlmod<-stl(x=gasolina.ts, s.window="periodic")
stlmod
plot(stlmod)

####################################
##METODO STL PARA REGRESION LOESS###
####################################

##Nota: El c�digo no lee los objetos en series de tiempo si impoetamos la


informaci�n##
##de una fuente externa, realmente no entiendo porque pasa eso, la alternativa es
cargar##
##los datos manualmente y declararlos luego como series de tiempo de manera usual##

##se cargan los datos como un vector##

gasolina<-
c(87695,86890,96442,98133,113615,123924,128924,134775,117357,114626,107677,108087,9
2188,88591,98683,99207,125485,124677,132543,140735,124008,121194,111634,111565,1010
07,94228,104255,106922,130621,125251,140318,146174,122318,128770,117518,115492,1084
97,100482,106140,118581,132371,132042,151938,150997,130931,137018,121271,123548,109
894,106061,112539,125745,136251,140892,158390,148314,144148,140138,124075,136485,10
9895,109044,122499,124264,142296,150693,163331,165837,151731,165869,173522,155828,1
53771,143963,143898,124046,121260,138870,129782,162312,167211,172897,189689,166496,
160754,155582,145936,139625,137361,138963,155301,172026,165004,185861,190270,163903
,174270,160272,165614,146182,137728,148932,156751,177998,174559,198079,189073,17570
2,180097,155202,174508,154277,144998,159644,168646,166273,190176,205541,193657,1826
17,189614,174176,184416,158167,156261,176353,175720,193939,201269,218960,209861,198
688,190474,194502,190755,166286,170699,181468,174241,175347,196265,203526,227443,23
3038,234119,255133,216478,232868,209893,194784,189756,193522,212870,248565,221532,2
52642,255007,206826,233231,212678,217173,199024,191813,195997,208684,244113,243108,
255918,244642,237579,237579,217775,227621,222698)
gasolina

##declaramos la st##

gaso.ts<-ts(gasolina,star=1960,frequency=12)
gaso.ts

##construimos la descomposicion bajo stl##


par(mfrow=c(1,1))
m1<-stl(gaso.ts,s.window="per",t.window=50,t.jump=1)
m1
St<-m1$time.series[,1]
St
Tt<-m1$time.series[,2]
Tt
et<-m1$time.series[,3]
et
plot(m1)

##NOTA: COMO AMBAS ST TIENEN DIFERENTES LONGITUD SE DEBE CREAR UNA NUEVA ST EN LOS
DATOS ORIGINALES DE##
#IGUAL LONGITUD##

length(Tt)
length(gasolina.ts)

También podría gustarte