-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathintro_series_temporales.Rmd
More file actions
181 lines (125 loc) · 5.73 KB
/
Copy pathintro_series_temporales.Rmd
File metadata and controls
181 lines (125 loc) · 5.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
---
title: "Series temporales"
output: github_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(fpp)
library(ggplot2)
library(forecast)
```
Una serie temporal se define como una colección de observaciones (discretas o continuas) de una variable recogidas secuencialmente en el tiempo.
* El **tiempo** es una elemento natural presente en el momento en el que se genera el dato.
* **Serie** es la característica fundamental de las series temporales. Quiere decir que una observación presente es influenciada por los valores pasados de la misma (Auto correlación).
Lo modelos de series temporales usarán esta característica para predecir valores futuros.
## Ejemplos de series temporales
* Índices del tipo de interés
* Inflacción interanual en España
* Evolución del número de visitas a un sitio web
* Habitantes de un país
* Tasa de natalidad
* Evolución niveles de CO2 en Madrid
## Tipos de series temporales
Una serie temporal puede ser **discreta** o **continua** dependiendo de cómo sean las observaciones.
Series son **determinísticas**: se pueden predecir exactamente los valores ya que éstos se obtienen en función explícita del tiempo.
```{r echo=FALSE}
x=arima.sim(list(order = c(1,0,0), ar = 0.6), n = 100)
y=2+time(x)*2+x
plot(y)
```
```{r}
summary(lm(y~time(y)))
```
```{r}
kpss.test(y,null = c('T'))
```
H0: Tendencia estacionaria (Los datos siguen una tendencia lineal con el tiempo)
H1: No estacionaria
0.1 > 0.05 => No podemos rechazar H0: No hay evidencia de que la serie no sea estacionaria
**Ejemplo**
```{r echo=FALSE}
data(austa)
autoplot(austa) + xlab("Año") +
ylab("Millones de turistas") +
ggtitle("Australia: Turistas internacionales")
```
Series **estocásticas**: el futuro sólo se puede determinar de modo parcial por las observaciones pasadas y no se pueden determinar exactamente, se considera que los futuros valores tienen una **distribución de probabilidad** que está condicionada a los valores pasados.
```{r echo=FALSE}
x=arima.sim(list(order = c(0,1,1), ma = -0.7), n = 200)
plot(x)
```
```{r}
kpss.test(x,null = c('T'))
```
H0: Tendencia estacionaria (Los datos siguen una tendencia lineal con el tiempo)
H1: No estacionaria
0.01 < 0.05 => Rechazamos H0: La serie no es estacionaria
## Objetivos del análisis de series temporales
El principal objetivo es el de elaborar un modelo estadístico que describa la procencia de dicha serie.
* Descriptivos: La dibujamos y consideramos sus medidas descriptivas básicas. ¿Presentan una tendencia?. ¿Existe estacionalidad?. ¿Hay valores extremos?
* Predictivos: En ocasiones no sólo se trata de explicar los sucedido sino de ser capaces de predecir el futuro.
## Estudio descriptivo
Se basa en descomponer una serie temporal en una serie de componentes
* Tendencia: Movimiento suave de la serie a largo plazo
```{r}
data(AirPassengers)
plot(aggregate(AirPassengers,FUN=mean), main="Serie temporal con una tendencia positiva")
```
* Estacionalidad: Variaciones cada cierto periodo de tiempo (semanal, mensual, etc.). Esta estacionalidad se puede eliminar de la serie temporal para facilitarnos su análisis.
```{r}
plot(AirPassengers, main="Serie temporal con una clara estacionalidad")
```
* Componente aleatoria o ruido (random noise): Son los movimientos de la serie que quedan tras eliminar los demás componenentes. El objetivo es estudiar si existe algún modelo probabilístico que logre explicar este tipo de flutuaciones.
```{r}
set.seed(1)
plot(rnorm(100),type="l", main = "Serie temporal aleatoria")
```
> Las dos primeras componentes son determinísticas y la última es estocástica o aletaria.
Al final, una serie temporal $X_t$ se define como:
$$X_t = T_t + E_t + I_t$$
____
Dentro de cualquier análisis descriptivo, es básico dibujar la serie.
* Valores en el eje Y
* Tiempo en el eje X
A continuación debemos comprobar si la serie es **estacionaria o no estacionaria**.
* Serie estacionaria: Son series estables. Su media y su varianza son constantes a lo largo del tiempo.
* Serie no estacionaria: Son inestables, con media y varianza cambiantes a lo largo del tiempo.
> Existen métodos para transformar series no estacionarias en estacionarias.
```{r echo=FALSE}
set.seed(42)
y<- w<- rnorm(1000)
for (t in 2:1000) {
y[t]<- 0.9*y[t-1]+w[t]
}
xy.mat<- cbind(c(0,450,225,750,600,1000),c(6.5,6.5,7.5,7.5,8.5,8.5))
##Plot the series, with annotations for means and the Dicky-Fuller Test##
plot(1:length(y),y,xlab="t",ylab=expression(y[t]),type="l",ylim=c(-8,10),main="Serie temporal estacionaria")
points(xy.mat,pch=20,col="blue",cex=0.75)
for(i in c(1,3,5)) {segments(x0=xy.mat[i,1],y0=xy.mat[i,2],x1=xy.mat[i+1],lty=3,col="blue",lwd=2)}
text(125,7,labels=expression(E(y[t])==-0.220))
text(350,8,labels=expression(E(y[t])==-0.376))
text(725,9,labels=expression(E(y[t])==-0.341))
text(125,-6.5,labels=expression(ADF == -6.128));
```
La serie es estable alrededor de un valor central y la distribución bastante simétrica
```{r echo=FALSE}
hist(y, main = "Histograma de la serie estacionaria")
```
```{r echo=FALSE}
set.seed(42)
yns<- wns<- rnorm(1000)
for (t in 3:1000) {
yns[t]<-1.5*yns[t-1]-0.5*yns[t-2]+wns[t]
}
plot(1:length(yns),yns,xlab="t",ylab=expression(y[t]),type="l",ylim=c(-100,20),main="Serie temporal no estacionaria")
xyns.mat<- cbind(c(0,450,225,750,600,1000),c(10,10,0,0,-10,-10))
points(xyns.mat,pch=20,col="blue",cex=0.75)
for(i in c(1,3,5)) {segments(x0=xyns.mat[i,1],y0=xyns.mat[i,2],x1=xyns.mat[i+1],lty=3,col="blue",lwd=2)}
text(125,14,labels=expression(E(y[t])==-13.27))
text(350,4,labels=expression(E(y[t])==-27.56))
text(725,-6,labels=expression(E(y[t])==-64.51))
text(125,-60,labels=expression(ADF == -2.0251));
```
```{r echo=FALSE}
hist(yns, main = "Histograma de una serie no estacionaria", breaks = 10)
```