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
In [12]:
m1<-auto.arima(const_price_wo,allowdrift = TRUE)
In [13]:
m1
coefficients(m1)
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 [ ]: