In [2]:
#Carga de paquetes a utilizar en este documento
library(forecast)
library(dplyr)
library(ggplot2)
library(readr)
library(tidyr)
library(lubridate)
library(XML)

In [3]:
# Carga datos iniciales

datos<-read.table('files/MEM2.csv',header=TRUE,sep=',') #cargo la serie de datos

current_price<-datos$Precio_Corriente 
current_price<-ts(current_price,frequency = 7,start=c(1,4)) #construyo la serie corriente // start=c(num_semana,num_dia)


constant_price<-datos$Precio_Constante_2008
constant_price<-ts(constant_price,frequency = 7,start=c(1,4)) #construyo la serie constante // start=c(num_semana,num_dia)

In [4]:
#Construir un vector con la fechas de los precios
b<-strsplit(as.character(datos$Fecha),split = "/")

date<-c()#construyo un vector para almacenar las fechas
for(i in seq(1:(length(datos$Fecha)))){
    
    date<-c(date,paste(b[[i]][3],b[[i]][2],b[[i]][1],sep = "-")) #Lleno elvector en el orden YYYY-mm-dd

}
datos<-cbind(date,datos) #Uno el resultado a mi dataframe de datos

In [5]:
# Identificar los anos bisciestos y el total de semanas
last_year<-as.Date(datos$date[length(datos$date)-1])  #Doy formato de fecha al ultimo dato
last_year<-as.numeric(format(last_year,"%Y")) #extraer el año del ultimo dato
leap_years<-length(seq(from = 1996,to = last_year,by = 4)) #Total dias bisiestos de la serie

total_weeks<-round(length(constant_price+leap_years)/7,digits = 0)+1 #Totalde semanas, sabiendo que la serie empieza un miercoles

In [6]:
#Remover outliers de la serie de precios constantes
const_price_wo<-tsclean(constant_price) #Se remueven los outliers bajo el metodo de sumpsmu

#A continuacion vamos a identificar los datos que fueron tratados para esta transformacion
outliers_const_price<-rep(0,length(constant_price)) #construyo el vector para almacenar los outliers
for(item in 1:length((constant_price))){
    if(constant_price[item]!=const_price_wo[item]){
        outliers_const_price[item]<-constant_price[item]
    } 
        
}

#Agregar datos constantes sin outliers al dataset

datos$Precios_Const_wo<-const_price_wo





# Transformacion Logaritmo Natural y Remocion de outliers. 
ln_const_price<-log(constant_price) # Se transforman los datos en log natural
ln_const_wo<-tsclean(ln_const_price) #Se remueven los outliers bajo el metodo de sumpsmu
## A continuacion vamos a identificar los datos que fueron tratados para esta transformacion
outliers_ln<-rep(0,length(ln_const_price)) #construyo el vector para almacenar los outliers
for(item in 1:length((ln_const_price))){
    if(ln_const_price[item]!=ln_const_wo[item]){
        outliers_ln[item]<-ln_const_price[item]
    } 
        
}

#Agregar la transformacion Ln al dataset
datos$Ln_P<-ln_const_price
datos$Ln_Pwo<-ln_const_wo


#--------------------------------------------------------

#Transformacion Log10 y remocion outliers
log10_const_price<-log10(constant_price) # Se transforman los datos en log10
log10_const_wo<-tsclean(log10_const_price) #Se remueven los outliers bajo el metodo de sumpsmu
##A continuacion vamos a identificar los datos que fueron tratados para esta transformacion
outliers_log10<-rep(0,length(log10_const_price)) #construyo el vector para almacenar los outliers
for(item in 1:length((log10_const_price))){
    if(log10_const_price[item]!=log10_const_wo[item]){
        outliers_log10[item]<-log10_const_price[item]
    } 
        
}

#Agregar la transformacion Logaritmo Natural al dataset
datos$Log10_P<-log10_const_price
datos$Log10_Pwo<-log10_const_wo

#--------------------------------------------------------

#Transformacion raiz cuadrada y remocion outliers
sqrt_const_price<-sqrt(constant_price) # Se transforman los datos en raiz cuadrada
sqrt_const_wo<-tsclean(sqrt_const_price) #Se remueven los outliers bajo el metodo de sumpsmu

#A continuacion vamos a identificar los datos que fueron tratados para esta transformacion
outliers_sqrt<-rep(0,length(sqrt_const_price)) #construyo el vector para almacenar los outliers
for(item in 1:length((sqrt_const_price))){
    if(sqrt_const_price[item]!=sqrt_const_wo[item]){
        outliers_sqrt[item]<-sqrt_const_price[item]
    } 
        
}

#Agregar la transformacion Raiz Cuadrada al dataset
datos$Sqrt_P<-sqrt_const_price
datos$Sqrt_Pwo<-sqrt_const_wo


#-------------------------------------------------------------------
trescuartos_const_price<-(constant_price)^(3/4) # Se transforman los datos en raiz cuadrada
trescuartos_const_wo<-tsclean(trescuartos_const_price) #Se remueven los outliers bajo el metodo de sumpsmu

#A continuacion vamos a identificar los datos que fueron tratados para esta transformacion
outliers_trescuartos<-rep(0,length(trescuartos_const_price)) #construyo el vector para almacenar los outliers
for(item in 1:length((trescuartos_const_price))){
    if(trescuartos_const_price[item]!=trescuartos_const_wo[item]){
        outliers_trescuartos[item]<-trescuartos_const_price[item]
    } 
        
}

#Agregar la transformacion Elevado a la 3/4 al dataset
datos$Root4_P3<-trescuartos_const_price
datos$Root4_Pwo3<-trescuartos_const_wo

Modelo sobre toda la serie


In [12]:
m1<-auto.arima(const_price_wo,allowdrift  = TRUE)

In [13]:
m1
coefficients(m1)


Series: const_price_wo 
ARIMA(2,1,1)(2,0,0)[7]                    

Coefficients:
         ar1     ar2      ma1    sar1    sar2
      0.8014  0.0826  -0.9634  0.1451  0.1172
s.e.  0.0128  0.0118   0.0061  0.0115  0.0114

sigma^2 estimated as 122.9:  log likelihood=-30542.12
AIC=61096.25   AICc=61096.26   BIC=61138.16
ar1
0.801356796785399
ar2
0.0825550741650454
ma1
-0.963421406155061
sar1
0.14508348805542
sar2
0.11724252702671

In [30]:
plot(x=const_price_wo,y=fitted(m1),type='p',
    ylab='Forecasted',xlab='Real')
lines(x=seq(1:length(const_price_wo)),y=seq(1:length(const_price_wo)),col='red',lwd=2)



In [31]:
plot(const_price_wo,type='l')
lines(fitted(m1),col='red')



In [ ]: