Elanálisis clásico de las series de tiempo se basa en la suposición de que los valores que toma la variable de observación es la consecuencia de tres componentes, cuya actuación conjunta da como resultado los valores medidos.
Los componentes de una sere de tiempo son:
Las primeras dos son determinísticas mientras que la tercera es aleatoria.
En el modelo aditivo la serie de tiempo se puede expresar como \[X_t = T_t + S_t + I_t\]
Y en el modelo multiplicativo la serie puede expresarse como \[X_t = T_t * S_t * I_t\]
Las proximas funciones son para obtener estas componentes basándonos en alguno de estos modelos.
Ir al inicio
Función auxiliar
Para el funcionamiento de las cuatro funciones se requiere esta, la cual obtiene un vector de fechas para poder graficar las componentes de la serie de tiempo.
#Librerias
library(lubridate)
library(dplyr)
#Funcion
fecha_ts<- function(s){
if(is.ts(s)==F)stop('Serie no es un objeto del tipo ts')
if(frequency(s)==365){
inicio<-paste(start(s)[1],1,1,sep = "/") %>% ymd()+(start(s)[2]-1)
termino<-paste(end(s)[1],1,1,sep = "/") %>% ymd()+(end(s)[2]-1)
}else{
n=12/frequency(s)
inicio<- paste(start(s)[1],((start(s)[2]-1)*n+1),1,sep="/") %>% ymd()
termino<- paste(end(s)[1],((end(s)[2]-1)*n+1),1,sep="/") %>% ymd()
}
seq(from=inicio,to=termino,length.out = length(s))
}
Por último, se utilizarán las mismas tres series de ejemplo en las cuatro funciones para que se puedan comparar los resultados. Ir al inicio
Esta función sirve para graficar e interpretar la tendencia de datos del tipo ts
(time series), para obtener el vector de tendencia o para obtener la serie de tiempo sin la tendencia.
tendencia(s,n=12,g=F,detrend=F,tipo="a")
Argumentos | Descripcion |
---|---|
s | Objeto del tipo ts (time series) |
n | Número de muestra para aplicar el método de medias móviles |
g | Si se quiere la interpretación de la tendencia gráfica o solo el vector (T y F respectivamente) |
detrend | Si se quiere la serie sin la tendencia (T) o no (F) |
tipo | En caso de que se quiera la serie sin tendencia se indica si la serie es aditiva (‘a’) o multiplicativa (‘m’) |
library(ggplot2)
tendencia <- function(s,n="unidad",g=F,detrend=F, tipo="a"){
if(is.ts(s)==F)stop('Serie no es un objeto del tipo ts')
if(n=="unidad"){n<-frequency(s)}
n<-ceiling(abs(n))
if((length(s)/2)<n)stop('Use una n menor o igual a la longitud de s entre dos')
if(tipo!="a"&tipo!="m")stop('Inique si es del tipo aditivo ("a") o multiplicativo ("m")')
mm<-c()
for (i in 1:floor(length(s)/n)){
mm[i]<- mean(s[(n*(i-1)+1):(n*i)] %>% t() %>% as.vector(),na.rm = T)
}
if(length(s)%%n==0){x=seq(from=1, to=length(s), by=n)}else{
x=seq(from=1, to=length(s), by=n)[-((length(s)%/%n)+1)]}
x<-x+(n%/%2)
m<- (mm[length(mm)]-mm[1])/(x[length(x)]-x[1])
f<-approxfun(x=x,y=mm)
mm<-f(1:length(s))
if(g){
if(m>.1){tend="a la alza"}else if(m>0.002&m<.1){tend="ligeramente a la alza"
}else if(m<(-.1)){tend="a la baja"}else if(m<(-0.002)&m>(-.1)){
tend="ligeramente a la baja"}else{tend="constante"}
df<- data.frame(tiempo=fecha_ts(s),observacion=mm)
graf <- ggplot(df,aes(tiempo,observacion))+geom_line(color="blue")+
labs(title = "Tendencia de la serie",
subtitle = paste("La tendencia es",tend),
x= "Tiempo", y="Observaciones")
return(graf)}else if(detrend==F){return(mm)}else if(tipo=="a"){
return(s-mm)}else{return(s/mm)}
}
Esta función está pensada para usar el método de medias móviles para calcular la tendencia y su interpretación está dada por la pendiente de la aproximación.
n tiene que ser un entero positivo diferente de cero, y menor o igual a la longitud de la serie entre 2.
Si g es T
o TRUE
se graficará e interpretará solamente la tendencia, de lo contrario se regresará la tendencia como un vector numérico, o la serie sin la tendencia.
En caso de querer regresar la serie sin la tendencia se tiene que escoger primero detrend = T
y luego qué tipo de modelo o separación se quiere la serie de tiempo, si es aditiva tipo="a"
y si es multiplicativa tipo="m"
, la función no aceptará otros valores.
Ir al inicio
library(readr)
library(tidyr)
library(readxl)
library(stringr)
series <- read_excel("MC1001.xls")
source("functions.R")
El primer ejemplo es una serie extraída de una base de datos proporcionada en clase. Este gráfico usará las medias móviles con n default es decir 12.
serie1<-get_series(394)
tendencia(serie1,g=T)
t1<-tendencia(serie1) #El vector de tendencia de la serie
t1
## [1] NA NA NA NA NA NA 6800.250
## [8] 6819.104 6837.958 6856.812 6875.667 6894.521 6913.375 6932.229
## [15] 6951.083 6969.938 6988.792 7007.646 7026.500 7035.236 7043.972
## [22] 7052.708 7061.444 7070.181 7078.917 7087.653 7096.389 7105.125
## [29] 7113.861 7122.597 7131.333 7091.826 7052.319 7012.812 6973.306
## [36] 6933.799 6894.292 6854.785 6815.278 6775.771 6736.264 6696.757
## [43] 6657.250 6570.868 6484.486 6398.104 6311.722 6225.340 6138.958
## [50] 6052.576 5966.194 5879.812 5793.431 5707.049 5620.667 5615.104
## [57] 5609.542 5603.979 5598.417 5592.854 5587.292 5581.729 5576.167
## [64] 5570.604 5565.042 5559.479 5553.917 5612.111 5670.306 5728.500
## [71] 5786.694 5844.889 5903.083 5961.278 6019.472 6077.667 6135.861
## [78] 6194.056 6252.250 6243.708 6235.167 6226.625 6218.083 6209.542
## [85] 6201.000 6192.458 6183.917 6175.375 6166.833 6158.292 6149.750
## [92] 6100.625 6051.500 6002.375 5953.250 5904.125 5855.000 5805.875
## [99] 5756.750 5707.625 5658.500 5609.375 5560.250 5512.750 5465.250
## [106] 5417.750 5370.250 5322.750 5275.250 5227.750 5180.250 5132.750
## [113] 5085.250 5037.750 4990.250 5002.292 5014.333 5026.375 5038.417
## [120] 5050.458 5062.500 5074.542 5086.583 5098.625 5110.667 5122.708
## [127] 5134.750 5110.507 5086.264 5062.021 5037.778 5013.535 4989.292
## [134] 4965.049 4940.806 4916.562 4892.319 4868.076 4843.833 NA
## [141] NA NA NA NA NA NA NA
## [148] NA NA NA
El segundo ejemplo es la serie 655 del archivo de clase, se usará una n igual a 10 y aunque no se pueda suavizar, la tendencia es constante ya que el primer y el último dato se encuentran cerca del valor “41”.
serie2<-get_series(655)
tendencia(serie2,n = 10,g=T)
tendencia(serie2,n = 27,g=T)
Esta gráfica es de la misma serie de tiempo pero con una muestra más grande, se ve que sigue sin suavizarse la gráfica y la tendencia cambia
t2<-tendencia(serie2,n = 27) #El vector de tendencia de la serie
t2
## [1] NA NA NA NA NA NA NA
## [8] NA NA NA NA NA NA 41.68889
## [15] 41.57435 41.45981 41.34527 41.23073 41.11619 41.00165 40.88711
## [22] 40.77257 40.65802 40.54348 40.42894 40.31440 40.19986 40.08532
## [29] 39.97078 39.85624 39.74170 39.62716 39.51262 39.39808 39.28354
## [36] 39.16900 39.05446 38.93992 38.82538 38.71084 38.59630 38.61248
## [43] 38.62867 38.64486 38.66104 38.67723 38.69342 38.70960 38.72579
## [50] 38.74198 38.75816 38.77435 38.79053 38.80672 38.82291 38.83909
## [57] 38.85528 38.87147 38.88765 38.90384 38.92003 38.93621 38.95240
## [64] 38.96859 38.98477 39.00096 39.01715 39.03333 NA NA
## [71] NA NA NA NA NA NA NA
## [78] NA NA NA NA NA NA
plot(serie2)
Serie original
sdta <- tendencia(serie2,n=27,detrend = T,tipo = "a")
plot(sdta)
Serie sin tendencia, siendo esta del tipo aditivo
sdtm <- tendencia(serie2,n=27,detrend = T,tipo = "m")
plot(sdtm)
Serie sin tendencia, siendo esta del tipo multiplicativo
El tercer ejemplo es una serie de tiempo precargada en la base de R.
x<-AirPassengers
tendencia(x,g=T)
plot(x)
xdt<-tendencia(x,detrend = T,tipo = "m")
plot(xdt)#Serie sin tendencia siendo el tipo multiplicativo
Esta función sirve para obtener el vector de estacionalidad, para obtener la serie de tiempo sin la misma ó para graficar la estacionalidad de datos del tipo ts
(time series).
estacion(s,n="unidad",detrend=T, g=F,deseas=F,tipo="a")
Argumentos | Descripcion |
---|---|
s | Objeto del tipo ts (time series) |
n | Número de periodos que conformarán la estacionaliad |
detrend | Si a la serie ya se le quitó el componente tendencial (T o F) en caso de seleccionar falso se calculará con la frecuencia de la serie de tiempo original |
g | Si se quiere la gráfica o solo el vector (T y F respectivamente) |
deseas | Si se quiere la serie sin la estacionalidad (T) o no (F) |
tipo | En caso de que se quiera la serie sin estacionalidad o se le tenga que quitar la tendencia se indica si la serie es aditiva (‘a’) o multiplicativa (‘m’) |
library(ggplot2)
estacion <- function(s,n="unidad",detrend=T, g=F,deseas=F,tipo="a"){
if(is.ts(s)==F)stop('Serie no es un objeto del tipo ts')
if(n=="unidad"){n<-frequency(s)}
if(detrend==F|deseas){if(tipo!="a"&tipo!="m")stop('Indique si es del tipo aditivo ("a") o multiplicativo ("m")')}
if(detrend==F){
s <- tendencia(s,g=F,detrend = T,tipo = tipo)
}
seas <- matrix(data = s,nrow = n)
seas[-(1:length(s))]<-NA
seas <- rowMeans(seas,na.rm = T)
seas <- rep_len(seas,length.out = length(s))
if(g){
df<- data.frame(tiempo=fecha_ts(s),observacion=seas)
graf<- ggplot(df,aes(tiempo,observacion))+geom_line(color="blue")+
labs(title = "Estacionalidad de la serie", x= "Tiempo", y="Observaciones")
return(graf)
}else if(deseas==F){return(seas)}else if(tipo=="a"){
return(s-seas)}else{return(s/seas)}
}
Primero el número n
dice de cuantos periodos se quiere la estacionalidad, en la forma default la estacionalidad es la frecuencia de los datos. La máxima n debe ser la longitud de la serie de tiempo. Si g es T
o TRUE
solamente se graficará la estacionalidad, de lo contrario se regresará la misma como un vector numérico, o la serie sin estacionalidad.
En caso de querer regresar la serie sin la estación se tiene que escoger primero deseas = T
y luego qué tipo de modelo o separación se quiere la serie de tiempo, si es aditiva tipo="a"
y si es multiplicativa tipo="m"
, la función no aceptará otros valores. Nótese que si se escoge tener gráfica el valor de deseas
ya no importa.
En caso de que no se haya destendarizado la serie se escoge detrend=F
y en automático se destendarizará con una n para medias móviles igual a la frecuencia de la serie original.
En este ejemplo la tendencia tenía unos saltos cada 5 años, como los periodos son mensuales se usará una n de 60 para la estacionalidad y un modelo aditivo.
estacion(serie1-t1,60,g=T)
e1<-estacion(serie1-t1) #se guarda el vector para su uso posterior
Ir al inicio
Aquí vamos a usar el tipo multiplicativo y se selecciona el valor detrend=F
que significa que no se le ha quitado la tendencia a la serie.
estacion(serie1,60,g=T,detrend = F,tipo = "m")
En este hacemos el tipo multiplicativo así que vamos a dividir la serie entre su tendencia obtenida en la función.
estacion(serie2/t2,g=T,tipo="m")
e2<-estacion(serie2/t2,tipo="m") #se guarda el vector para su uso posterior
Ir al inicio
En este vamos a ver que sale cuando se le quita la estacionalidad (deseas=T
)
plot(estacion(serie2/t2,detrend = F,deseas = T,tipo="m"))
Aquí se vuelve a usar la función tendencia para quitarsela a AirPassengers. De ahí se usan los valores por default.
xdt<-tendencia(x,detrend = T)#se le quita la tendencia con la función anterior
estacion(xdt,g=T)
Ir al inicio
Si se quiere la componente aleatoria solo se selecciona deseas=T
.
plot(estacion(xdt,deseas = T))
Así se verá con la próxima función. Ir al inicio
Esta función saca la componente aleatoria de un objeto del tipo ts
, es decir una serie de tiempo. Puede graficar esta componente aleatoria y se puede calcular desde una serie de tiempo sin tratamiento previo o dando las componentes tendencial y estacionaria de la serie original.
aleatorio(s,vtendencial,vestacional,tipo="a",decero= F,g=F)
Argumentos | Descripcion |
---|---|
s | Objeto del tipo ts (time series) |
vtendencial | Vector de tendencia |
vestacional | Vector de estacionaliad |
tipo | Indicador de si la serie es aditiva (‘a’) o multiplicativa (‘m’) |
decero | Indicador si se tiene que hacer el cálculo ‘desde cero’ con solo la serie de tiempo original |
g | Si se quiere la gráfica o solo el vector (T y F respectivamente) |
library(ggplot2)
aleatorio<- function(s,vtendencial,vestacional,tipo="a",decero= F,g=F){
if(is.ts(s)==F)stop('Serie no es un objeto del tipo ts')
if(tipo!="a"&tipo!="m")stop('Indique si s es del tipo aditivo "s" o multiplicativo "m"')
if(decero){
a <- estacion(s,detrend = F,deseas = T,tipo = tipo)
}else if(length(s)!=length(vtendencial)||length(s)!=length(vestacional))stop('Inserte vectores válidos para la estacionalidad y tendencia')else if(tipo=="a"){a <- s-vtendencial-vestacional}else{
if(sum(vtendencial==0,na.rm = T)>0|sum(vestacional==0,na.rm = T)>0){warning('Algun(os) valores del vector aleatorio tendieron a infinito')}
a<-s/(vtendencial*vestacional)}
if(g){
df <- data.frame(tiempo=fecha_ts(s),observacion=a)
graf<- ggplot(df,aes(tiempo,observacion))+geom_line(color="blue")+
labs(title = "Componente aleatorio de la serie", x= "Tiempo", y="Observaciones")
return(graf)
}else(return(a))
}
Para usar esta función se necesitan tener la tendencia y la estacionalidad de la serie para después retirarlas de acuerdo al modelo que se esté usando, ya sea el aditivo ("a"
) o el multiplicativo ("m"
). Cuando se dan estos vectores tienen que no ser vacíos y tener la misma longitud de la serie de tiempo s
.
En caso de que no se hayan obtenido estos elementos de la serie se escoge decero=T
y en automático se destendarizará y se le quitará la estacionalida con los valores que por default vienen en la función estacion
.
Si g es T
o TRUE
solamente se graficará el componente aleatorio, de lo contrario se regresará la misma como un vector numérico.
Ir al inicio
En esta serie se guardaron la tendencia y estacionalidad obtenidos por el método aditivo así que el tipo toma el valor de "a"
.
t1<-tendencia(serie1)
e1<-estacion(serie1-t1,60)
aleatorio(serie1,t1,e1,tipo="a",g=T)
En esta serie se guardaron la tendencia y estacionalidad obtenidos por el método aditivo así que el tipo toma el valor de "m"
.
t2<-tendencia(serie2,n = 27)
e2<-estacion(serie2/t2,tipo="m")
aleatorio(serie2,t2,e2,tipo="m",g=T)
Para esta vamos a usar la opción de sacar el aleatorio desde unicamente el vector original. Se puede ver que es el mismo que salió en el mismo ejemplo de la función anterior.
aleatorio(x,tipo="a",decero = T,g=T)
Esta función saca la componente tendencial, estacionaria y aleatoria de un objeto del tipo ts
, es decir una serie de tiempo y las devuelve dentro de un objeto tipo lista. Cabe mencionar que las devuelve como objeto serie de tiempo. Además devuelve el valor del tipo de descomposición que se usó y puede agregar la grafica de s con sus componentes. Ir al inicio
descomponer(s,tipo="a",nt="unidad",ne="unidad",g=F)
Argumentos | Descripcion |
---|---|
s | Objeto del tipo ts (time series) |
tipo | Indicador de si la serie es aditiva (‘a’) o multiplicativa (‘m’) |
nt | El valor de cantidad de periodos para utilizar el método de medias móviles en la función de tendencia |
ne | Cantidad de periodos para sacar la estacionalidad |
g | Si se quiere agregar la gráfica que contiene la serie original y sus tres componentes o no (TRUE y FALSE respectivamente) a la lista |
library(ggplot2)
library(gridExtra)
library(grid)
library(dplyr)
descomponer<- function(s,tipo="a",nt=frequency(s),ne="unidad",g=F){
if(is.ts(s)==F)stop('Serie no es un objeto del tipo ts')
if(tipo!="a"&tipo!="m")stop('Indique si s es del tipo aditivo "a" o multiplicativo "m"')
fechas<-fecha_ts(s)
t<- tendencia(s,n=nt)
sdt<-tendencia(s,n=nt,detrend = T,tipo=tipo)
e<- estacion(sdt,n=ne,tipo = tipo)
a<- aleatorio(s,vtendencial=t,vestacional=e,tipo=tipo)
inicio<-start(s)
frecuencia<-frequency(s)
Original<-s
Tendencial<-ts(t,start = inicio,frequency = frecuencia)
Estacional<-ts(e,start = inicio,frequency = frecuencia)
Aleatorio<-ts(a,start = inicio,frequency = frecuencia)
if(g){
tg <- ggplot(data.frame(tiempo=fechas,observacion=t),
aes(tiempo,observacion))+geom_line(color="blue")+
labs(y= "Tendencial",x=element_blank())+theme(axis.line = element_line())
eg <- ggplot(data.frame(tiempo=fechas,observacion=e),
aes(tiempo,observacion))+geom_line(color="blue")+
labs(y = "Estacional",x=element_blank())+theme(axis.line = element_line())
ag <- ggplot(data.frame(tiempo=fechas,observacion=a),
aes(tiempo,observacion))+geom_line(color="blue")+
labs(y = "Aleatorio")+ theme(axis.line = element_line())
sg <- ggplot(data.frame(tiempo=fechas,observacion=as.vector(s)),
aes(tiempo,observacion))+geom_line(color="blue")+
labs(y = "Original",x=element_blank())+theme(axis.line = element_line())
lista<- list(ggplotGrob(sg),ggplotGrob(tg),ggplotGrob(eg),ggplotGrob(ag))
graf<-grid.arrange(grobs=lista,nrow=4,heights = unit(c(1,1,1,1.1),"null"),top="Descomposicion de la serie de tiempo")
return(list(Original=Original,Tendencial=Tendencial,Estacional=Estacional,Aleatorio=Aleatorio,Tipo=tipo,Grafica=graf))
}
return(list(Original=Original,Tendencial=Tendencial,Estacional=Estacional,Aleatorio=Aleatorio,Tipo=tipo))
}
Esta función pone por default la nt
de medias moviles para sacar la tendencia como la frecuencia de la serie de tiempo, y la ne
que es la cantidad de periodos para la que se requiere la estacionalidad está por default, que es igual la frecuencia. Estas se pueden cambiar para cuando se requiera algún resultado más exacto.
Para usar esta función se necesita saber el modelo que se esté usando, ya sea el aditivo ("a"
) o el multiplicativo ("m"
), por default viene el modelo aditivo. Si g es T
o TRUE
se agregará a la lista una gráfica donde está la serie de tiempo original y sus tres componentes en una sola columna. Debido a que esto se construyó con una grid de ggplots se tiene que volver a dibujar la gráfica con grid.draw(lista resultado$Grafica)
para que se aprecie tal cual se hizo la gráfica, en caso de llamarse con plot se verá una cuadrícula en la parte del título, esto se mostrará en los ejemplos.
Ir al inicio
Para comparar esta serie con los resultados obtenidos en las secciones anteriores se seguirá utilizando el método aditivo y se escogerá ne=60
que son la cantidad de periodos que hay en 5 años, recordando que lo que da este espaciado es la gráfica de la tendencia.
descomponer(serie1,tipo="a",ne=60,g=T)
## $Original
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
## 1975 5237 3612 4385 6479 13286 9928 6755
## 1976 5824 5433 6868 7853 5112 4082 5483 8502 11436 10313 6437
## 1977 6976 5592 6975 6659 4688 4929 6019 7140 11166 9140 7288
## 1978 5962 5861 7378 8632 6212 5906 5290 8238 12111 7127 6643
## 1979 5214 5698 6675 4775 4721 4404 5635 9111 6150 4930 4994
## 1980 4421 6296 7215 5844 8021 4090 3253 5431 4905 4671 4843
## 1981 5201 6826 8696 5730 4949 5109 5386 9204 7656 5906 5851
## 1982 5230 7409 7869 4989 6708 4389 4926 7518 7549 4405 5923
## 1983 5435 6821 8376 6154 5412 4984 5999 8686 6184 4753 5038
## 1984 4265 6484 6316 4344 5302 3566 4549 7848 4346 4553 4610
## 1985 4675 5655 6484 4405 4022 4719 5203 8333 5740 5877 4762
## 1986 4794 4473 5212 3518 2863 3955 4638 8562 5507 4898 4419
## 1987 4270 4512 5861 4255 3299 4070 5329 8180 7789 5709
## Dec
## 1975 5943
## 1976 6751
## 1977 7373
## 1978 5998
## 1979 3727
## 1980 4980
## 1981 5469
## 1982 5593
## 1983 4258
## 1984 3890
## 1985 4964
## 1986 4386
## 1987
##
## $Tendencial
## Jan Feb Mar Apr May Jun Jul
## 1975 NA NA NA
## 1976 6837.958 6856.812 6875.667 6894.521 6913.375 6932.229 6951.083
## 1977 7043.972 7052.708 7061.444 7070.181 7078.917 7087.653 7096.389
## 1978 7052.319 7012.812 6973.306 6933.799 6894.292 6854.785 6815.278
## 1979 6484.486 6398.104 6311.722 6225.340 6138.958 6052.576 5966.194
## 1980 5609.542 5603.979 5598.417 5592.854 5587.292 5581.729 5576.167
## 1981 5670.306 5728.500 5786.694 5844.889 5903.083 5961.278 6019.472
## 1982 6235.167 6226.625 6218.083 6209.542 6201.000 6192.458 6183.917
## 1983 6051.500 6002.375 5953.250 5904.125 5855.000 5805.875 5756.750
## 1984 5465.250 5417.750 5370.250 5322.750 5275.250 5227.750 5180.250
## 1985 5014.333 5026.375 5038.417 5050.458 5062.500 5074.542 5086.583
## 1986 5086.264 5062.021 5037.778 5013.535 4989.292 4965.049 4940.806
## 1987 NA NA NA NA NA NA NA
## Aug Sep Oct Nov Dec
## 1975 NA NA NA 6800.250 6819.104
## 1976 6969.938 6988.792 7007.646 7026.500 7035.236
## 1977 7105.125 7113.861 7122.597 7131.333 7091.826
## 1978 6775.771 6736.264 6696.757 6657.250 6570.868
## 1979 5879.812 5793.431 5707.049 5620.667 5615.104
## 1980 5570.604 5565.042 5559.479 5553.917 5612.111
## 1981 6077.667 6135.861 6194.056 6252.250 6243.708
## 1982 6175.375 6166.833 6158.292 6149.750 6100.625
## 1983 5707.625 5658.500 5609.375 5560.250 5512.750
## 1984 5132.750 5085.250 5037.750 4990.250 5002.292
## 1985 5098.625 5110.667 5122.708 5134.750 5110.507
## 1986 4916.562 4892.319 4868.076 4843.833 NA
## 1987 NA NA NA
##
## $Estacional
## Jan Feb Mar Apr May
## 1975 696.60417
## 1976 -591.84259 -305.11111 1025.28704 -217.31481 -1627.25000
## 1977 -536.56944 -139.16667 782.23611 -815.86111 -941.95833
## 1978 -853.40972 -166.59375 1413.72222 974.03819 -562.64583
## 1979 -1235.36806 183.07292 654.51389 -1214.54514 -695.60417
## 1980 -763.93750 660.32292 1531.08333 -197.15625 696.60417
## 1981 -591.84259 -305.11111 1025.28704 -217.31481 -1627.25000
## 1982 -536.56944 -139.16667 782.23611 -815.86111 -941.95833
## 1983 -853.40972 -166.59375 1413.72222 974.03819 -562.64583
## 1984 -1235.36806 183.07292 654.51389 -1214.54514 -695.60417
## 1985 -763.93750 660.32292 1531.08333 -197.15625 696.60417
## 1986 -591.84259 -305.11111 1025.28704 -217.31481 -1627.25000
## 1987 -536.56944 -139.16667 782.23611 -815.86111 -941.95833
## Jun Jul Aug Sep Oct
## 1975 -923.63542 -1103.37500 1547.38542 -15.35417 -67.09375
## 1976 -1570.85185 -801.45370 2767.94444 2194.00926 1015.74074
## 1977 -1981.05556 -1167.65278 688.75000 2717.15278 132.05556
## 1978 -885.32986 -641.51389 2220.30208 2950.11806 -213.06597
## 1979 -1655.16319 -481.22222 2973.21875 -191.34028 -630.89931
## 1980 -923.63542 -1103.37500 1547.38542 -15.35417 -67.09375
## 1981 -1570.85185 -801.45370 2767.94444 2194.00926 1015.74074
## 1982 -1981.05556 -1167.65278 688.75000 2717.15278 132.05556
## 1983 -885.32986 -641.51389 2220.30208 2950.11806 -213.06597
## 1984 -1655.16319 -481.22222 2973.21875 -191.34028 -630.89931
## 1985 -923.63542 -1103.37500 1547.38542 -15.35417 -67.09375
## 1986 -1570.85185 -801.45370 2767.94444 2194.00926 1015.74074
## 1987 -1981.05556 -1167.65278 688.75000 2717.15278 132.05556
## Nov Dec
## 1975 -376.30556 -551.57407
## 1976 -471.86111 -529.47222
## 1977 -35.04167 -113.22569
## 1978 -268.25000 -913.80903
## 1979 -503.45833 -1500.19792
## 1980 -376.30556 -551.57407
## 1981 -471.86111 -529.47222
## 1982 -35.04167 -113.22569
## 1983 -268.25000 -913.80903
## 1984 -503.45833 -1500.19792
## 1985 -376.30556 -551.57407
## 1986 -471.86111 -529.47222
## 1987
##
## $Aleatorio
## Jan Feb Mar Apr May
## 1975 NA
## 1976 -422.115741 -1118.701389 -1032.953704 1175.793981 -174.125000
## 1977 468.597222 -1321.541667 -868.680556 404.680556 -1448.958333
## 1978 -236.909722 -985.218750 -1009.027778 724.163194 -119.645833
## 1979 -35.118056 -883.177083 -291.236111 -235.795139 -722.354167
## 1980 -424.604167 31.697917 85.500000 448.302083 1737.104167
## 1981 122.537037 1402.611111 1884.018519 102.425926 673.166667
## 1982 -468.597222 1321.541667 868.680556 -404.680556 1448.958333
## 1983 236.909722 985.218750 1009.027778 -724.163194 119.645833
## 1984 35.118056 883.177083 291.236111 235.795139 722.354167
## 1985 424.604167 -31.697917 -85.500000 -448.302083 -1737.104167
## 1986 299.578704 -283.909722 -851.064815 -1278.219907 -499.041667
## 1987 NA NA NA NA NA
## Jun Jul Aug Sep Oct
## 1975 NA NA NA NA NA
## 1976 -1279.377315 -666.629630 -1235.881944 2253.199074 2289.613426
## 1977 -177.597222 90.263889 -653.875000 1334.986111 1885.347222
## 1978 -63.454861 -883.763889 -758.072917 2424.618056 643.309028
## 1979 6.586806 150.027778 257.968750 547.909722 -146.149306
## 1980 -568.093750 -1219.791667 -1686.989583 -644.687500 -821.385417
## 1981 718.574074 167.981481 358.388889 -673.870370 -1303.796296
## 1982 177.597222 -90.263889 653.875000 -1334.986111 -1885.347222
## 1983 63.454861 883.763889 758.072917 -2424.618056 -643.309028
## 1984 -6.586806 -150.027778 -257.968750 -547.909722 146.149306
## 1985 568.093750 1219.791667 1686.989583 644.687500 821.385417
## 1986 560.803241 498.648148 877.493056 -1579.328704 -985.817130
## 1987 NA NA NA NA NA
## Nov Dec
## 1975 331.055556 -324.530093
## 1976 -117.638889 245.236111
## 1977 191.708333 394.399306
## 1978 254.000000 340.940972
## 1979 -123.208333 -387.906250
## 1980 -334.611111 -80.537037
## 1981 70.611111 -245.236111
## 1982 -191.708333 -394.399306
## 1983 -254.000000 -340.940972
## 1984 123.208333 387.906250
## 1985 3.555556 405.067130
## 1986 47.027778 NA
## 1987
##
## $Tipo
## [1] "a"
##
## $Grafica
## TableGrob (5 x 1) "arrange": 5 grobs
## z cells name grob
## 1 1 (2-2,1-1) arrange gtable[layout]
## 2 2 (3-3,1-1) arrange gtable[layout]
## 3 3 (4-4,1-1) arrange gtable[layout]
## 4 4 (5-5,1-1) arrange gtable[layout]
## 5 5 (1-1,1-1) arrange text[GRID.text.672]
Para esta la serie se comparará con el modelo multiplicativo de los ejemplos anteriores y con una nt=27
para la tendencia.
d<-descomponer(serie2,tipo="m",nt=27,g=T)
d #la lista obtenida con la función
## $Original
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1978 42.1 45.1 44.1 43.2 45.7 36.2 32.2 38.6
## 1979 42.0 38.9 47.5 46.3 42.7 54.1 44.3 44.6 47.3 32.4 29.3 34.6
## 1980 36.8 39.6 48.6 39.7 48.1 47.4 34.2 40.1 36.3 32.0 24.8 31.7
## 1981 37.9 34.9 21.0 40.9 43.2 44.7 39.4 46.6 43.6 36.1 31.3 41.0
## 1982 43.0 39.5 41.2 41.5 44.8 43.3 41.8 41.9 43.7 35.9 24.9 36.2
## 1983 38.6 34.9 37.1 44.7 41.4 43.0 43.6 39.9 44.8 31.0 25.2 39.3
## 1984 46.6 35.4 41.5 43.0 44.5 51.2 44.2 41.8 46.6 30.1 24.1 42.3
## 1985 38.0 32.5 39.2
##
## $Tendencial
## Jan Feb Mar Apr May Jun Jul
## 1978 NA NA NA
## 1979 NA NA NA NA NA 41.68889 41.57435
## 1980 40.88711 40.77257 40.65802 40.54348 40.42894 40.31440 40.19986
## 1981 39.51262 39.39808 39.28354 39.16900 39.05446 38.93992 38.82538
## 1982 38.66104 38.67723 38.69342 38.70960 38.72579 38.74198 38.75816
## 1983 38.85528 38.87147 38.88765 38.90384 38.92003 38.93621 38.95240
## 1984 NA NA NA NA NA NA NA
## 1985 NA NA NA
## Aug Sep Oct Nov Dec
## 1978 NA NA NA NA NA
## 1979 41.45981 41.34527 41.23073 41.11619 41.00165
## 1980 40.08532 39.97078 39.85624 39.74170 39.62716
## 1981 38.71084 38.59630 38.61248 38.62867 38.64486
## 1982 38.77435 38.79053 38.80672 38.82291 38.83909
## 1983 38.96859 38.98477 39.00096 39.01715 39.03333
## 1984 NA NA NA NA NA
## 1985
##
## $Estacional
## Jan Feb Mar Apr May Jun Jul
## 1978 1.1291152 1.1686820 1.0257815
## 1979 0.9912218 0.9440437 0.9371805 1.0611152 1.1291152 1.1686820 1.0257815
## 1980 0.9912218 0.9440437 0.9371805 1.0611152 1.1291152 1.1686820 1.0257815
## 1981 0.9912218 0.9440437 0.9371805 1.0611152 1.1291152 1.1686820 1.0257815
## 1982 0.9912218 0.9440437 0.9371805 1.0611152 1.1291152 1.1686820 1.0257815
## 1983 0.9912218 0.9440437 0.9371805 1.0611152 1.1291152 1.1686820 1.0257815
## 1984 0.9912218 0.9440437 0.9371805 1.0611152 1.1291152 1.1686820 1.0257815
## 1985 0.9912218 0.9440437 0.9371805
## Aug Sep Oct Nov Dec
## 1978 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1979 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1980 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1981 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1982 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1983 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1984 1.0768834 1.0915120 0.8487176 0.6868334 0.9287301
## 1985
##
## $Aleatorio
## Jan Feb Mar Apr May Jun Jul
## 1978 NA NA NA
## 1979 NA NA NA NA NA 1.1104029 1.0387796
## 1980 0.9080100 1.0288097 1.2754597 0.9227985 1.0536938 1.0060551 0.8293668
## 1981 0.9676817 0.9383358 0.5704078 0.9840525 0.9796588 0.9822367 0.9892947
## 1982 1.1220806 1.0818066 1.1361532 1.0103384 1.0245649 0.9563344 1.0513764
## 1983 1.0022277 0.9510479 1.0179792 1.0828106 0.9420825 0.9449708 1.0911825
## 1984 NA NA NA NA NA NA NA
## 1985 NA NA NA
## Aug Sep Oct Nov Dec
## 1978 NA NA NA NA NA
## 1979 0.9989388 1.0481099 0.9258931 1.0375365 0.9086263
## 1980 0.9289457 0.8320233 0.9459985 0.9085604 0.8613443
## 1981 1.1178529 1.0349332 1.1015806 1.1797315 1.1423591
## 1982 1.0034618 1.0321128 1.0899945 0.9338129 1.0035753
## 1983 0.9508008 1.0528209 0.9365333 0.9403588 1.0840951
## 1984 NA NA NA NA NA
## 1985
##
## $Tipo
## [1] "m"
##
## $Grafica
## TableGrob (5 x 1) "arrange": 5 grobs
## z cells name grob
## 1 1 (2-2,1-1) arrange gtable[layout]
## 2 2 (3-3,1-1) arrange gtable[layout]
## 3 3 (4-4,1-1) arrange gtable[layout]
## 4 4 (5-5,1-1) arrange gtable[layout]
## 5 5 (1-1,1-1) arrange text[GRID.text.849]
Ir al inicio
En la grafica siguiente se observa que el título se ve mal si se llama con plot.
plot(d$Grafica)
En este usamos el modelo aditivo y se comparará con el sacado por la función decompose
de R usando nt
y ne
por default.
Esta es la forma correcta de llamar la gráfica de la lista.
grid.draw(descomponer(AirPassengers,g=T)$Grafica)
Esta gráfica es la obtenida por el metodo decompose de R. Por el parecido entre ellas se nota que las funciones aquí presentadas trabajan apropiadamente.
plot(decompose(AirPassengers))