Tema 6
Tema 6
Tema 6
INFOX
Semana 6 - Parte 1
1 Manipulando variables de fecha
Formatos de datos temporales
Arreglando los formatos de datos temporales
5 Aplicación
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 2 / 44
Para que se pueda tomar ventajas del conjunto de funciones que trae
Stata se debe declarar previamente que el conjunto de datos son una serie
de tiempo. Previamente hemos visto algo parecido al momento de declarar
el diseño muestral de una encuesta- En este caso, la identificación es más
fácil. Necesitamos saber cuál es la frecuencia de los datos, es decir, si son
anuales, trimenstrales, mensuales, por hora, por minutos, etc. Darle
formato a la variable y usarla para declarar a los datos como de serie de
tiempo usando el comando tsset. Veamos un ejemplo con datos
simulados:
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 3 / 44
Datos de tiempo
Las series de tiempo pueden estar en distintas frecuencias, cada tipo de frecuencia puede
ser cargada en Stata bajo un formato específico. Veamos los casos más importantes,
datos trimestrales, datos mensuales y datos diarios (en el caso de datos anuales toda la
discusión se hace mucho más fácil ya que no es necesario darle un formato especial).
Como vemos cada variable mide una frecuencia distinta. La primera comienza en el
primer trimestre de 1960 (1960q1), mientras que la segunda comienza en enero de 1960
(1960m1) y la última serie comienza el primero de enero de 1960 (01jan1960, en donde
jan viene de january o enero en inglés).
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 4 / 44
Hay distintos formatos que se pueden considerar, desde milisegundos hasta años:
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 5 / 44
Cuando creamos datos desde cero solo se
generan unos valores numéricos. Para que
se vean como en las imágenes previas
tenemos que darle formato. Ahora, para
todo tipo de frecuencia el valor 0 se
establece para la primera observación de
1960. Es decir 1 en frecuencia mensual
significa 2 de enero de 1960 mientras que 1
para frecuencia mensual significa febrero de
1960. Contrariamente -1 bajo frecuencia
trimestral significaría el último trimestre de
1959. Bastante ojo con esto.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 6 / 44
tsset
Luego de crear las series usamos la nueva variable para declararla como la
variable temporal.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 7 / 44
Arreglando los formatos de datos temporales
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 8 / 44
Veamos manejar estas fechas para que tengan el formato de series diarias. Cargamos la
base con las fechas de ejemplos.
La solución para los dos primeros
casos es bastante directa, podemos
usar el comando date() para indicar
el orden de los componentes de la
fecha. Por ejemplo "MDY" para mes -
día - año (como en el formato en
inglés). Si quisieramos pasarlo al
formato usual en español
comenzaríamos indicando el día, luego
el mes y por último el año ("DMY").
En el caso de fecha3 tenemos que
hacer un paso previo. Si queremos
usar el comando date() tenemos que
tener la serie en forma string() por
lo que usamos el comando
tostring(fecha3), replace para
que reemplace la variable fecha3 con
sus mismo valores pero en string.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 9 / 44
La variable fecha4 puede ser confusa. Por
ejemplo, 202011 indicaría el primero de enero
del 2020 pero 2020111 puede ser el 11 de
enero o el 1 de noviembre. En el ejemplo
tenemos valores bastante directos, para crear la
nueva variable separamos los valores de día,
mes y año usando el comando substr(),
previamente tenemos que pasarlo a string
para que pueda ser segmentada. Con cada
elemento listo, lo volvemos a pasar a números
usando el comando destring(). Con esto,
usamos el comando mdy() parecido a date()
En todos los casos, luego de
pero en donde indicamos cada componente de
generar los valores tenemos
la fecha diaria. Ojo: Cuando tengan casos más
que darle formato usando el
confusos deben ver alguna manera de
comando format seguido por
solucionar esos problemas.
%td para indicar que son
diarios. En el último caso, tenemos las fechas en
español por lo que podemos usar el comando
subinstr() para reemplazar las iniciales de la
fecha.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 10 / 44
Hay muchas opciones funciones adicionales que se pueden usar de acuerdo a la
frecuencia de la serie.
Algunas de ellas sirven cuando tenemos los datos en formato string otros cuando los
datos están en valores numéricos. Una operación adicional que se puede hacer es crear
variables nuevas con otros formatos. Por ejemplo podemos crear una variable que
indique en qué trimestre del año se encuentra la fecha diaria. Veamos:
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 11 / 44
Veamos algunos ejemplos de como cambiar la frecuencia de la serie.
En este ejemplos hacemos algunos
cambios. Primero pasamos de dia a
trimestre, luego de dia a mes y, por
último, de dia a semana. En los dos
primeros casos usamos las siguientes
funciones: qofd() y mofd() mientras
que en en último caso usamos una
función presentado previamente, yw().
Podemos indentificar a qofd() y
mofd() a partir de la primera y última
letra. En el primer caso sería, quarter
of day y luego sería month of day.
Hay una familia extensa de este tipo
de funciones que se puede revisar si
necesita hacer algún cambio en este
sentido. Por ejemplo, aqui.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 12 / 44
Operadores de rezagos, adelantos y diferencias
Differencia: El prefijo d(1).x sirve para tomar la resta entre dos periodos distintos
Antes de presentar los ejemplos vamos a limpiar las bases de datos. Usaremos el PBI
peruano tanto en frecuencia anual como en frecuencia trimestral.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 13 / 44
Carguemos la serie anual del PBI Gasto del Perú desde la página del
BCRP. Limpiamos y ordenamos la serie y nos quedamos con los cicno
componentes del PBI Gasto: Consumo, Inversión, Gasto Público y
Exportaciones Netas.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 14 / 44
En el caso trimestral, la variable de fecha no viene en el formato deseado por lo que
tenemos que hacer una limpieza previa.
Extraemos el valor del año y el número del trimestre. Como solo se tiene dos dígitos del
año tenemos que pasarlo al valor completo agregando los números que faltan. Con el
año y el número del trimestre podemos usar una función ya conocida yq() para obtener
el valor del trimestre. Guardamos casa una de las bases para usarlas cuando lo
necesitemos. Ahora, veamos como usar rezagos. logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 15 / 44
Rezagos
El operador de rezagos permite crear o usar
un valor rezago de una variable. A partir de
los datos anuales vamos a crear series
rezagadas del PBI. Para indicar el número
de rezagos podemos agregar un número al
operador. Por ejemplo, l2.lnpbi sería el
2do rezago del logaritmo del PBI.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 16 / 44
Cuando tenemos datos trimestrales puede ser útil definir a los rezagos de una variable no
como los valores inmediatamente previos sino como los valores pasados de cada uno de
los trimestres. Por ejemplo, cuando se compara el primer trimestre del 2019 con el
primer trimestre del 2018
En este caso, para comparar los valores del primer trimestre de cada año usamos
l4.lnpbi. Si tuvieramos datos mensuales tendríamos que usar l12.lnpbi, por ejemplo.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 17 / 44
Al momento de querer graficar estas nuevas series nos topamos con un problema. Si
usamos la opción xlabel() de manera usual terminariamos con un gráfico errado. Para
que el código tenga sentida se puede agregar expresiones entre comillas con los formatos
deseados. Por ejemplo, indicamos que son quarters/trimestres ‘q()’ y luego damos
formato de trimestre.
Esta opción es, definitivamente, más compleja y extenuante. Luego veremos como
integrar los datos de series de tiempo a gráficos. Por el momento sigamos con esta
lógica.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 18 / 44
Adelantos
Con el operador de adelantos, f.var podemos tomar los valores adelantados de las
variables. Tomemos el caso de los datos trimestrales del PBI. Creamos una serie con los
valores de los mismos trimestres pero de años posteriores:
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 19 / 44
Diferencias
El operador de diferencias toma la resta de una misma variable un número de periodos
dados. Tomemos la base anual del PBI y construyamos la tasa de crecimiento usando
tanto el operador de diferencias como los operadores de rezago. Recordemos que la tasa
de crecimiento puede definirse de la siguiente manera:
Luego de crear el logaritmo del PBI, podemos crear la tasa de crecimiento tomando de
manera manual la diferencia lnpbi - l1.lnpbi o podemos usar el operador de
diferencias para obtener lo mismo, d.lnpbi. Ojo: si indicamos un número mayor de
diferencias, por ejemplo d2.lnpbi, estamos considerando la 2da diferencia del PBI es
decir:
d2.lnpbi = (ln(y )t − ln(y )t−1 ) − (ln(y )t−1 − ln(y )t−2 )
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 20 / 44
Tomemos la base trimestral y comparemos si podemos obtener la tasa de crecimiento
Q-Q usando el comando de diferencias.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 21 / 44
Gráficos de series de tiempo
Cuando declaramos la base de datos como series de tiempo podemos usar un comando
nuevo para graficar series, tsline. Este comando es similar al que ya conocimos
previamente, line, con la diferencia que ya no necesitamos indicarla fecha como 2da
variable. Grafiquemos la participación de cada componente del PBI usando tsline y
line solo para los años entre 1995 y 2015.
Por ejemplo:
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 23 / 44
Hasta este punto hemos visto como manipular las variables de tiempo y como hacer
algunos gráficos simples considerando estos datos. Ahora vamos a ver un primer
conjunto de operaciones estadísticas bastante recurrentes cuando se usan datos logoinfox.png
temporales.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 24 / 44
El concepto de filtro proviene de la literatura de la ingeniería. La idea es tomar como
insumo una serie (o una señal) y procesarla considerando los valores rezagados para
generar una nueva serie, es decir una serie filtrada. Consideremos la siguiente ecuación:
yt = ψ(L)xt
En donde ψ(L) es una función que considera los rezagos (L) de la serie insumo, xt , para
generear una serie output,yt . Esta operación puede ser muy compleja y suponer
operaciones matriciales avanzadas o ser mucho más simple como sacar los promedio de
las valores rezagados. Vamos a ver dos conjuntos de filtros. Primeros los llamados
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 25 / 44
Filtros moving-average, tssmooth
Los filtros moving average tienen la siguiente forma:
Pf
i=−l
wi xt+i
x̂t = Pf
i=−l
wi
En donde x̂t es la serie nueva, wi son pesos para cada observación y xt es la serie input.
Los valores f y l indican el número de rezagos a considerar a la derecha y a la izquierda.
Si no tenemos ponderadores el filtro solo toma un promedio simple de los datos, por
ejemplo:
Pf
i=−l
xt+i
x̂t = Pf
i=−l
Consideremos que tomamos un moving average de cinco periodo, es decir, dos periodos
previos, el periodo actual y dos periodos posteriores:
P2
i=−2
xt+i
x̂t =
5
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 26 / 44
Para implementar el moving average usamos el comando tssmooth ma
seguido por la variable. Adicionalemente debemos indicador los valor l y f
de la ecuación vista previamente. Para eso usamos la opción
window(#l,#c,#f) en donde #l indica el número de rezagos hacia atrás,
#c se reemplaza por 1 cuando se quiere considerar el valor actual y 0 en
caso contrario, #f indica los adelantos a considerar. Usemos esta función
para crear la serie moving average de cada componente del consumo
considerando una ventana de 5 periodos.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 27 / 44
La serie con linea puntada indica los valores reales en cada trimestre
mientras que la serie solida indica la nueva serie moving average. Como se
observa en el gráfico, el filtro ‘suaviza’ los valores de la serie.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 28 / 44
Otros filtros, tsfilter
A diferencia del moving average, estos filtros generan por lo menos dos
series nuevas, usualmente se identifica a estos componentes como ciclo y
tendencia. Veamos cada filtro por separado y luego comparemos los
resultados.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 29 / 44
tsfilter hp
xt = zt + τt
En donde a partir de xt , la serie inicial, se crean dos series nuevas: una tendencia, τt , y
una residuo o ciclo, zt . Para obtener estos componentes de minimiza la siguiente función
con respecto a τt
T
X
min (xt − τt )2 + λ((τt+1 − τt ) − (τt − τt−1 ))2
t=1
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 30 / 44
Vamos a descomponer o filtrar la serie trimestral del PBI en dos partes: un
ciclo (o componente residual) y una tendencia.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 31 / 44
Como vemos, el componente tendencial no tiene los picos y valles
presentes en la serie inicial. logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 32 / 44
La serie del ciclo o el residuo es igual a la resta de las series previas.
Recordemos que zt = xt − τt logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 33 / 44
tsfilter bk
En contraste al filtro HP, el filtro Baxter - King (BK) es un filtro de pase de banda
(particualrmente, de highpass). La definición estadística exacta del filtro supero los
limites del curso. A pesar de esto, podemos establecer algunos criterios para poder usar
la serie dado que hay varios componentes que se deben elegir. El comando tiene la
siguiente forma
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 34 / 44
Veamos las nuevas series generadas.
A diferencia del filtrado HP, la tendencia estimada es mucho menos suave. Esto también
logoinfox.png
se refleja en el componente cíclico.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 35 / 44
En este caso, el cíclo aparece menos volátil que en el caso HP.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 37 / 44
Al igual que el filtro Baxter King, la serie de tendencia del PBI no sale suavizada como
en el caso del filtro HP. Esto genera que tengamos una serie para el ciclo menos volatil
como en el caso HP. Comparemos los ciclos estimados bajo Christiano-Fitzgerald y bajo logoinfox.png
Baxter-King.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 38 / 44
Ambos filtron generan una serie para el ciclo de manera similar. Una
diferencia visible en el gráfico es que el filtro CF no remueve observaciones logoinfox.png
Hay más opciones de filtro de series, algunas más complejos como el filtro de Kalman u
otros más simples en adaptar a stata como el filtro de Hamilton (ssc install
hamiltonfilter).
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 40 / 44
Aplicación
Como aplicación vamos a tomar la serie de tipo de cambio nominal del sol frente al dólar
para estimar el ciclo y la tendencia usando las herramientas aprendidas. Tomamos la
serie directamente de la página del BCRP. Luego de descargarlo y limpiar ligeramente la
base necesitamos crear una variable que indique la fecha.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 41 / 44
Primero completamos los
valores para el año de
cada observación y luego
creamos una variable
nueva con el número de
cada mes de acuerdo a las
iniciales. Al final usamos
el comando ym() para
crear la variable fecha y
darle formato.
Usemos un filtro moving average de cinco ventanas junto a un filtro HP para estimar las
tendencias.
logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 42 / 44
En el gráfico obtenemos la serie original del tipo de cambio junto a la serie Mooving
Avergae (MA) y la tendencia estimada por el filtro HP. Hagamos zoom en el periodo
logoinfox.png
que empieza en el 2002.
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 43 / 44
La serie MA solo suaviza ligeramente los picos encontrados en la serie original mientras
que la tendencia HP genera una serie bastante suavizada a lo largo del periodo. logoinfox.png
José Mendoza Sánchez (INFOX) Stata: Desde básico hasta avanzando Semana 6 - Parte 1 44 / 44