Está en la página 1de 4

Curso Avanzado de Estadı́stica Curso 2009/2010

Máster en Matemáticas y Aplicaciones

Práctica 1: Comandos básicos de R para analizar series temporales

1. Definición de una serie temporal

En esta primera parte vamos a trabajar con el fichero gas6677.dat que contiene datos
mensuales del consumo de gasolina en España entre enero de 1966 y agosto de 1977. Una vez
situado el fichero en el directorio de trabajo lo leemos y creamos un vector llamado gas con el
comando gas = scan(’gas6677.dat’). Si ahora escribimos plot(gas), vemos que el gráfico
resultante no es el más apropiado para describir una serie temporal. Si queremos que R trate
a un objeto como serie temporal, tenemos que determinar apropiadamente sus caracterı́sticas
con el comando ts(). Para definir la serie correctamente escribimos

gas.ts = ts(gas, start = c(1966,1), frequency = 12).

El argumento frequency se utiliza para indicar la periodicidad de la serie (en este caso
mensual), mientras que el argumento start indica la fecha de la primera observación (enero de
1966). Si ahora escribimos print(gas.ts) y plot(gas.ts) vemos cómo el resultado depende
de las caracterı́sticas de la serie. Si queremos comparar la distribución del consumo de gasolina
para cada mes, un gráfico útil es boxplot(gas.ts ~ cycle(gas.ts)).

Ejercicio: El fichero jj.dat contiene los beneficios trimestrales de la empresa Johnson &
Johnson entre 1960 y 1980. Lee los datos, define la serie temporal y represéntala. ¿Cuál es el
valor de la serie para el tercer trimestre de 1980? ¿Cuáles son las principales caracterı́sticas
de esta serie?

2. Transformaciones básicas de una serie

En el gráfico de gas.ts se observa que la serie no es estacionaria. La serie presenta una


tendencia aparentemente lineal y una estacionalidad muy marcada (el consumo aumenta los
meses de verano). Además, la amplitud de las fluctuaciones aumenta con el tiempo por lo

1
que la variabilidad tampoco es constante. Por lo tanto, para ajustar un modelo estacionario
tenemos que transformar la serie original.

Estabilización de la varianza: Para estabilizar la variabilidad se suelen tomar logaritmos.


Esta transformación funcionará bien cuando la variabilidad es aproximadamente proporcional
al nivel de la serie. Representamos la serie transformada mediante plot(log(gas.ts)).

Eliminación de tendencia: Una forma sencilla de eliminar una tendencia aproximadamente


lineal es diferenciar la serie. Si xt es una serie contenida en x, para calcular ∇xt = (1 − B)xt =
xt − xt−1 con R basta utilizar diff(x).
En nuestro ejemplo:
x = log(gas.ts)
dif1.x = diff(x)
plot(dif1.x)

Eliminación de estacionalidad: Para eliminar la estacionalidad de una serie mensual se


pueden tomar diferencias estacionales de orden 12. Si xt es la serie que queremos desesta-
cionalizar, se trata de calcular ∇12 xt = (1 − B 12 )xt = xt − xt−12 .
Con R, el orden de la diferencia se determina con el argumento lag:
dif12.dif1.x = diff(dif1.x,lag=12)
plot(dif12.dif1.x)

Ejercicio: Aplica las transformaciones adecuadas a la serie de beneficios de la empresa


Johnson & Johnson para obtener una serie aproximadamente estacionaria.

3. Las funciones de autocovarianzas y autocorrelaciones

Hacemos y = dif12.dif1.x para llamar y a la serie de consumo de gasolina transformada


de manera que un modelo estacionario sea apropiado. Una representación de la función de au-
tocovarianzas estimadas se obtiene mediante acf(y,type=’covariance’). La representación
del correlograma se obtiene con acf(y). En este último caso, se representan con lı́nea dis-
continua las bandas de confianza de ρ(k) de nivel 95 % bajo la hipótesis de que la serie es un
ruido blanco.
Si lo que queremos obtener son los valores numéricos de las correlaciones estimadas es-
cribimos acf(y,plot=FALSE). ¿Qué diferencia hay entre el resultado del comando anterior y

2
el de acf(y)$acf?

Ejercicio: Representa el correlograma de la serie de beneficios de Johnson & Johnson trans-


formada que se ha obtenido en el ejercicio anterior. ¿Podemos decir que la serie transformada
es un ruido blanco?

Ejercicio: Escribe una función de R que tenga como argumento una serie temporal y como
salida la estimación de la autocorrelación de primer orden ρ̂(1).

4. Simulación de series correspondientes a modelos sencillos

En esta sección usamos el comando filter para generar series de algunos modelos sencil-
los. Más adelante veremos comandos más convenientes para generar series de algunos modelos
más complicados. El comando filter sirve para calcular series de la forma
p
X
yt = ψj xt−j (1)
j=−q

que resultan de aplicar un filtro lineal con pesos ψj a la serie retrasada xt−j . La sintaxis del
comando filter (junto con sus argumentos más importantes) es:

filter(x, filter, method = c("convolution", "recursive") , sides = 2)

El argumento x es la serie temporal que se va a filtrar. El vector de pesos se determina con


el argumento filter. Por defecto el método es convolution, que corresponde a la expresión
(1). Fijar sides = 2 (defecto) implica q = p en (1) mientras que si elegimos sides = 1,
entonces q = 0.
El método recursive corresponde a modelos autorregresivos de la forma:
q
X
yt = xt + ψj yt−j .
j=1

Para aclarar el uso del comando puedes probar los ejemplos siguientes:

1. Para calcular la media móvil yt = (xt−1 + xt + xt+1 )/3, a partir de una serie dada x:

> x = c(1,5,-4,7,5)
> filter(x,c(1,1,1)/3)
Time Series:
Start = 1

3
End = 5
Frequency = 1
[1] NA 0.6666667 2.6666667 2.6666667 NA

¿Qué significan los valores NA obtenidos en el resultado anterior?

2. Para calcular yt = xt + yt−1 /2 + yt−2 /2,

> x = c(1,5,-4,7,5)
> filter(x,c(0.5,0.5),method=’recursive’)
Time Series:
Start = 1
End = 5
Frequency = 1
[1] 1.0000 5.5000 -0.7500 9.3750 9.3125

¿Puedes explicar la lógica de los dos primeros valores resultantes en este segundo ejem-
plo?

Ejercicio: Sea wt un ruido blanco de media 0 y varianza 1. Genera series de tamaño 500 de
cada uno de los modelos siguientes. En cada caso, representa gráficamente la serie simulada
y el correspondiente correlograma:

1. Modelo MA(1): xt = wt − 0,5wt−1 .

2. Modelo AR(2): xt = wt + 0,5xt−1 + 0,25xt−2 .

3. Camino aleatorio con deriva: xt = 1 + xt−1 + wt .