Вы находитесь на странице: 1из 23

Taller parte 1

Angie Rodriguez Alexandra Diaz David Zapata

12/9/2019
library(Kendall)

## Warning: package 'Kendall' was built under R version 3.6.1

library(quantmod)

## Warning: package 'quantmod' was built under R version 3.6.1

## Loading required package: xts

## Warning: package 'xts' was built under R version 3.6.1

## Loading required package: zoo

## Warning: package 'zoo' was built under R version 3.6.1

##
## Attaching package: 'zoo'

## The following objects are masked from 'package:base':


##
## as.Date, as.Date.numeric

## Registered S3 method overwritten by 'xts':


## method from
## as.zoo.xts zoo

## Loading required package: TTR

## Warning: package 'TTR' was built under R version 3.6.1

## Registered S3 method overwritten by 'quantmod':


## method from
## as.zoo.data.frame zoo

## Version 0.4-0 included new data defaults. See ?getSymbols.

library(readxl)

## Warning: package 'readxl' was built under R version 3.6.1

baseipc <- read_excel("C:/Users/dzapata40/Desktop/baseipc.xlsx")


View(baseipc)
B = baseipc
attach(B)

y = ts(ipc,frequency=12,start=c(2012,1))

MannKendall(ipc)

El test de MannKendall detecta la tendencia (Mann kendall prueba tipo z o sea


normal, sirve para conjuntos de datos mayor a 10).
Como conclusion, se tiene que el p valor < 0.05 entonces se rechaza la hipotesis
nula, y valido la hipotesis alternative que nos dice que hay tendencia en la serie de
tiempo:
## tau = 0.988, 2-sided pvalue =< 2.22e-16

np = length(ipc)

fecha = seq(as.Date("2012/01/01"), as.Date("2018/12/01"), by="months")


fechas = strptime(as.character(fecha), "%Y-%m-%d")

plot(fechas,ipc, xaxt="n",panel.first = grid(),type='l',ipclab='')

## Warning in plot.window(...): "ipclab" is not a graphical parameter

## Warning in plot.xy(xy, type, ...): "ipclab" is not a graphical


parameter

## Warning in axis(side, at = z, labels = labels, ...): "ipclab" is not a


## graphical parameter

## Warning in axis(side = side, at = at, labels = labels, ...): "ipclab"


is
## not a graphical parameter

## Warning in box(...): "ipclab" is not a graphical parameter

## Warning in title(...): "ipclab" is not a graphical parameter

axis.POSIXct(1, at=seq(as.Date(fechas[1]),as.Date(fechas[np]), "months"),


format="%m/%y")
axis.POSIXct(1, at=seq(as.Date(fechas[1]),as.Date(fechas[np]), "years"),
labels = FALSE, tcl = -0.2)
Según la prueba de Mankendall se rechaza la hipótesis nula que enuncia que la
serie no tiene tendencia, y se procede hacer los demás análisis.
En el grafico anterior se evidencia nuestra serie y su comportamiento en la serie
de tiempo.
A continuación, procederemos a crear la muestra para ser nuestras estimaciones:

T = length(ipc)

ipci = ts(ipc[1:(T-12)],frequency=12,start=c(2012,1))

ipcf = ts(ipc[(T-12+1):T],frequency=12,start=c(2017,7))

t = seq(1,(T-12),1)
t2 = t*t
t3 = t2*t

m.cd = lm(ipci ~ t + t2)

m.cu = lm(ipci ~ t + t2 + t3)


Al observar el P valor es significativo de nuestra muestra entre el modelo lineal y el
cuadrático se podría tomar el segundo aunque se procede a estimar el cubico, el
cual se puede inferir que será el más acertado.

summary(m.cd)

##
## Call:
## lm(formula = ipci ~ t + t2)
##
## Residuals:
## Min 1Q Median 3Q Max
## -3.2918 -0.7188 -0.0147 0.5371 3.0900
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.098e+02 4.817e-01 228.034 < 2e-16 ***
## t 1.147e-01 3.045e-02 3.767 0.000344 ***
## t2 4.637e-03 4.043e-04 11.471 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.325 on 69 degrees of freedom
## Multiple R-squared: 0.982, Adjusted R-squared: 0.9815
## F-statistic: 1886 on 2 and 69 DF, p-value: < 2.2e-16

summary(m.cu)

##
## Call:
## lm(formula = ipci ~ t + t2 + t3)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.93317 -0.77148 0.03668 0.84054 2.18523
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 1.121e+02 5.253e-01 213.445 < 2e-16 ***
## t -2.472e-01 6.189e-02 -3.995 0.000162 ***
## t2 1.695e-02 1.963e-03 8.635 1.54e-12 ***
## t3 -1.124e-04 1.768e-05 -6.359 1.99e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.057 on 68 degrees of freedom
## Multiple R-squared: 0.9887, Adjusted R-squared: 0.9882
## F-statistic: 1989 on 3 and 68 DF, p-value: < 2.2e-16
r2 = m.cd$residuals
r3 = m.cu$residuals

f2 = m.cd$fitted.values
f3 = m.cu$fitted.values

np = length(ipci)
fecha = seq(as.Date("2012/01/01"), as.Date("2017-12-01"), by="months")
fechas = strptime(as.character(fecha), "%Y-%m-%d")

par(mfrow=c(1,1))
plot(fechas,ipci, xaxt="n",panel.first = grid(),type='l',ipclab='')

## Warning in plot.window(...): "ipclab" is not a graphical parameter

## Warning in plot.xy(xy, type, ...): "ipclab" is not a graphical


parameter

## Warning in axis(side, at = z, labels = labels, ...): "ipclab" is not a


## graphical parameter

## Warning in axis(side = side, at = at, labels = labels, ...): "ipclab"


is
## not a graphical parameter

## Warning in box(...): "ipclab" is not a graphical parameter

## Warning in title(...): "ipclab" is not a graphical parameter

axis.POSIXct(1, at=seq(as.Date(fechas[1]),as.Date(fechas[np]), "months"),


format="%m/%y")
axis.POSIXct(1, at=seq(as.Date(fechas[1]),as.Date(fechas[np]), "years"),
labels = FALSE, tcl = -0.2)

lines(fechas,f2, xaxt="n", panel.first = grid(),type='l',col='red',lwd=2)


lines(fechas,f3, xaxt="n", panel.first =
grid(),type='l',col='blue',lwd=2)
Se procede a estimar los errores de los modelos cuadráticos y cúbicos en el
grafico vemos como los mas ajustados a nuestro modelo es el cubico la línea roja,
mientras el cuadrático también es óptimo, aunque se comporta de forma constante
mientras el anterior intenta modelar algunas secciones de las perturbaciones de
mejor forma.

Como se dijo anteriormente el AIC nos indica que el mejor modelo es el


cubico y su diferencia al cuadrática es demasiado significativa.

(c(AIC(m.cd),AIC(m.cu)))

## [1] 249.7657 218.1692

par(mfrow=c(2,1))
plot(density(r2))
plot(density(r3))
Las siguientes graficas nos muestran como es el comportamiento de los modelos
estimados siguen casi de forma perfecta una normal lo cual es muy bueno para el
modelo.

qqnorm(r2)
qqline(r2)

qqnorm(r3)
q

qline(r3)
En la siguiente grafica vemos como los errores se ajustan con la distribución
normal requerida, aunque algunos datos no ajustan tanto se pueden ajustar de
mejor forma:

tt = seq((T-12+1),T,1)
tt2 = tt*tt
tt3 = tt2*tt

pr2 = predict(m.cd,
data.frame(t=tt,t2=tt2))

pr3 = predict(m.cu,
data.frame(t=tt,t2=tt2,t3=tt3))
par(mfrow=c(1,1))

plot(tt,ipcf,type='o',ipclim=c(min(ipcf),max(pr3)))

## Warning in plot.window(...): "ipclim" is not a graphical parameter

## Warning in plot.xy(xy, type, ...): "ipclim" is not a graphical


parameter

## Warning in axis(side = side, at = at, labels = labels, ...): "ipclim"


is
## not a graphical parameter

## Warning in axis(side = side, at = at, labels = labels, ...): "ipclim"


is
## not a graphical parameter

## Warning in box(...): "ipclim" is not a graphical parameter

## Warning in title(...): "ipclim" is not a graphical parameter

lines(tt,pr2,col='red')
lines(tt,pr3,col='blue')

Se presenta que las predicciones no se ajustan a el comportamiento de nuestra


serie por temas de los máximos y los mínimos:
tp = seq(T+1,T+6,1)
tp2 = tp*tp
tp3 = tp2*tp

pr = predict(m.cu,
data.frame(t=tp,t2=tp2,t3=tp3))

(c(tail(y),pr))

## 1
2
## 142.0984 142.2686 142.5033 142.6748 142.8420 143.2668 144.5141
144.6994
## 3 4 5 6
## 144.8605 144.9969 145.1078 145.1925

attach(B)

## The following object is masked from B (pos = 3):


##
## ipc

ipcw=loess(ipc ~ time(ipc))

np = length(ipc)
fecha = seq(as.Date("2012/01/01"), as.Date("2018/12/01"),
by="months")
fechas = strptime(as.character(fecha), "%Y-%m-%d")
plot(fechas,ipc, xaxt="n",panel.first = grid(),type="l",ipclab="")

## Warning in plot.window(...): "ipclab" is not a graphical parameter

## Warning in plot.xy(xy, type, ...): "ipclab" is not a graphical


parameter

## Warning in axis(side, at = z, labels = labels, ...): "ipclab" is not a


## graphical parameter

## Warning in axis(side = side, at = at, labels = labels, ...): "ipclab"


is
## not a graphical parameter

## Warning in box(...): "ipclab" is not a graphical parameter

## Warning in title(...): "ipclab" is not a graphical parameter

axis.POSIXct(1, at=seq(as.Date(fechas[1]),as.Date(fechas[np]),
"months"), format="%m/%y")
axis.POSIXct(1, at=seq(as.Date(fechas[1]),as.Date(fechas[np]),
"years"), labels = FALSE, tcl = -0.2)
lines(fechas,ipcw$fitted, xaxt="n", panel.first = grid(),
type="l",col= "red",lwd=2)

De acuerdo con el método de Loees que sirve para poder ver si nuestra serie
de tiempo tiene una regresión polinomica en forma de parabola o lineal, en
este caso es lineal (calculo de minimos cuadrados ponderados) y es la major
predicción:

plot(fechas,ipc , type="l", main="Loess suavizamiento y predicción",


xlab="Fechas", ylab="ipc")
lines(ipc, col="red")
lines(ipcw$fitted, x=fechas, col="red")
A continuación los LOEES ajustados se acoplan de forma óptima a nuestro
modelo con sus predicciones las cuales pueden estar en un buen rango de ajuste.

Taller parte 2
Alexandra Diaz Angie Rodriguez David Zapata

15/9/2019
library (fpp2)

## Warning: package 'fpp2' was built under R version 3.6.1

## Loading required package: ggplot2

## Warning: package 'ggplot2' was built under R version 3.6.1

## Loading required package: forecast

## Warning: package 'forecast' was built under R version 3.6.1


## Registered S3 method overwritten by 'xts':
## method from
## as.zoo.xts zoo

## Registered S3 method overwritten by 'quantmod':


## method from
## as.zoo.data.frame zoo

## Registered S3 methods overwritten by 'forecast':


## method from
## fitted.fracdiff fracdiff
## residuals.fracdiff fracdiff

## Loading required package: fma

## Warning: package 'fma' was built under R version 3.6.1

## Loading required package: expsmooth

## Warning: package 'expsmooth' was built under R version 3.6.1

library(quantmod)

## Warning: package 'quantmod' was built under R version 3.6.1

## Loading required package: xts

## Warning: package 'xts' was built under R version 3.6.1

## Loading required package: zoo

## Warning: package 'zoo' was built under R version 3.6.1

##
## Attaching package: 'zoo'

## The following objects are masked from 'package:base':


##
## as.Date, as.Date.numeric

## Loading required package: TTR

## Warning: package 'TTR' was built under R version 3.6.1

## Version 0.4-0 included new data defaults. See ?getSymbols.

getSymbols("COLNGDPRPCH",src="FRED")

## 'getSymbols' currently uses auto.assign=TRUE by default, but will


## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.

## [1] "COLNGDPRPCH"

y = ts(COLNGDPRPCH, frequency=4, start=c(2012,1), end=c(2018,2))

c <- COLNGDPRPCH

autoplot(y) + xlab("Year") + ylab("PIB") +


ggtitle("PIBCOL")

A continuación, de acuerdo con la base escogida anteriormente que trataba los


datos del IPC, está base que muestra información sobre el Producto Interno Bruto
de Colombia. Además, los años escogidos son de 2012 a 2018, y la variable
principal es el PIB. Como se muestra, la tendencia no es suave, al contrario se
encuentra con puntos muy altos o bajos:

Como la tendencia es más o menos volatil, lo que se busca es poder suavizarla y


para ello se crean las medias moviles que toma el promedio de nuestra base de
datos y suaviza el comportamiento de la serie del PIB:

z <- ma(COLNGDPRPCH, 5)
zz <-cbind(c,z)
autoplot(y, series="Data") +
autolayer(ma(y,5), series="5-ma") +
xlab("año") + ylab("PIB") +
ggtitle("PIBCOLD") +
scale_colour_manual(values=c("Data"="grey50","5-MA"="red"),
breaks=c("Data","5-ma"))

## Warning: Removed 26 rows containing missing values (geom_path).

Corremos una media movil de orden 4 (media movil de 4 porque los datos son
trimestrales) y luego la media movil de la media movil:

ma4 <- ma(y, order=4, centre=FALSE)


ma2x4 <- ma(ma4, order=4, centre=TRUE)

xy <- cbind(y,ma4,ma2x4)

View(xy)

library(fTrading)

## Warning: package 'fTrading' was built under R version 3.6.1

## Loading required package: timeDate

## Loading required package: timeSeries


## Warning: package 'timeSeries' was built under R version 3.6.1

##
## Attaching package: 'timeSeries'

## The following object is masked from 'package:zoo':


##
## time<-

## Loading required package: fBasics

## Warning: package 'fBasics' was built under R version 3.6.1

##
## Attaching package: 'fBasics'

## The following object is masked from 'package:TTR':


##
## volatility

##
## Attaching package: 'fTrading'

## The following object is masked from 'package:TTR':


##
## SMA

y = ts(COLNGDPRPCH)
plot(y)
lines(y, col="blue")
y = ts(COLNGDPRPCH, frequency=4, start=c(2012,1), end=c(2018,2))

library(stats)

A continuación luego de tener las medias moviles, es necesario tener en cuenta


que se hace un método de estimación en el cual los pasos son los siguientes:
1. Lo que hace este procedimiento es descomponer la serie:

decompose_y= decompose(y, "multiplicative")


plot(as.ts(decompose_y$seasonal))
Se observa la descomposición del factor estacional del PIB el cual se comporta
por causas como semana santa, diciembre y vacaciones de mitad del año de
forma constante a través del tiempo.
plot(as.ts(decompose_y$trend))

2. Extraer la tendencia de la serie con un rezago (y-t) y tomar los valores


observados menos los valores que se observaron al principio en la media
movil (este corrresponde al factor estacional y el error).
Se observa la tendencia de nuestra serie por si sola y vemos los grandes picos y
caídas que tiene ya sea por el ciclo económico a todo tipo de externalidades
internacionales o demás problemas mundiales.

plot(as.ts(decompose_y$random))

3. Se require promediar la estación de cada periodo, después de esto se


replica para la serie (es decir, nuestra serie se comporta de forma trimestral
para encontrar el factor estacional dentro del PIB de Colombia, por ello la
serie es un poco menos volatil, a diferencia de una serie que require de
cambios diarios como el valor de las acciones, para encontrar el factor
estacional). Así calcula por medio de datos una replica del factor estacional
para cada period que por supuesto es diferente.
Los errores de nuestra serie muestran se relaciona con la tendencia a mediados
del año 2013 y su escalar en la mitad del 2015 y su declive en el 2017 en gran
parte empujada por las grandes fluctuaciones de los precios de petróleo en esos
años.

plot(decompose_y)

4. Se encuentra la tendencia y el factor estacional:


Viendo todos los datos de forma separada y se ve comportamientos similares a lo
largo del tiempo como la caída tanto en 2013 como en el 2017 y el enorme pico
del 2015
En el gráfico anterior se puede observar la descomposición para la serie de
tiempo, en donde la media movil nos permitió encontrar el factor estacional y el
error.
• El primer recuadro del gráfico es la serie y, es decir el PIB. El Segundo
recuadro es el componenete estacional, que se puede ver ha sido
suavizado y no es muy volatil. El tercer recuadro es la tendencia que
muestra un comportamiento constante y el cuarto recuadro es el error.
• Para el error, este comienza donde está la tendencia y además tiene en
cuenta las perturbaciones o posibles alteraciones que no se puedan
observer en la tendencia y en el factor estacional.

library(seasonal)

## Warning: package 'seasonal' was built under R version 3.6.1

##
## Attaching package: 'seasonal'

## The following objects are masked from 'package:timeSeries':


##
## outlier, series
y %>% seas(x11="") -> fit

autoplot(fit) +
ggtitle("X11 consumer price index")

autoplot(y, series="Data") +
autolayer(trendcycle(fit), series="Trend") +
autolayer(seasadj(fit), series="Seasonally Adjusted") +
xlab("Year") + ylab("New orders index") +
ggtitle("DomesticPib") +
scale_colour_manual(values=c("orange","blue","red"),
breaks=c("Data","Seasonally Adjusted","Trend"))
library(seasonal)
y %>% seas() %>%
autoplot() +
ggtitle("DomesticPib")

En esta última gráfica despues del proceso de suavisamiento y poder encontrar la


tendencia y el factor estacional, se puede ver realmente cómo afectaba la
tendencia el PIB y el factor estacional, definiendo que el major modelo es por
SEAS.

Вам также может понравиться