28 nov 2018
Un breve curso introductorio a Stata para economistas
Clase 1. Sintaxis básica, elaboración de variables y gestión de bases de datos
Clase 2. Análisis descriptivo
Clase 3. Herramientas de análisis: tablas y gráficos
Clase 4. Análisis de independencia
Clase 5. Modelos de regresión
8 nov 2018
Trabajando con fechas en R (II)
En muchas ocasiones, al trabajar con series temporales resulta de interés obtener un vector con los valores correspondientes a fechas especificas como los lunes (por ejemplo), o crear una variable binaria que corresponda a una determinada fecha. Cuando los datos han sido guardados de forma ordenada, sin omitir valores, podemos generar una secuencia repetida de 1 y 0, por ejemplo cada 7 valores, lo que nos asegura estar accediendo a cada lunes. No obstante, en muchos casos, no tenemos datos ordenados, faltando en muchas semanas datos correspondiente a fines de semanas o días festivos, por lo que sería importante obtener alguna forma alternativa de acceder a estos valores a partir de fechas especificas, no necesariamente ordenadas de forma secuencial en mis datos.
Para el siguiente ejemplo, se genera una variable aleatoria para los 365 días del 2018 (note que se utilizó la función seq para generar una secuencia de fechas, pero esta pudo haberse importado directamente de una base de datos):
x<-rnorm(365)
fechas<-seq(as.Date("2018/1/1"), by = "day", length.out = 365)
data<-data.frame(fechas,x)
head(data)
fechas x
1 2018-01-01 -0.91820518
2 2018-01-02 -1.77966799
3 2018-01-03 1.04555275
4 2018-01-04 -0.07364716
5 2018-01-05 -0.41371250
6 2018-01-06 0.90414391
Posteriormente, se crea un vector de lunes, asumiendo la siguiente idea, dentro del vector de fecha que estoy trabajando (en mi base de datos, llamada data), identifico el primer lunes, el cual corresponde a la fecha "2018/1/1", luego indico que esta secuencia se repita semanalmente (todos los lunes) [by = "week"], durante el periodo “2018/12/31". Por lo que, este vector llamado lunes, contiene todas las fechas que son lunes durante el periodo de estudio.
lunes<-seq(as.Date("2018/1/1"), as.Date("2018/12/31"), by = "week")
lunes
[1] "2018-01-01" "2018-01-08" "2018-01-15"
Recuperar un vector de valores de fechas especifica
Ahora, como tenemos identificadas las fechas de interés, utilizamos el concepto de indexación en R para acceder a los valores de interés, combinado con el operador especial %in%, que es equivalente a la igualdad del vector fecha a cada uno de los valores (también fechas) indicado en el vector lunes. Es decir, que busca en el vector de fechas de mi base de datos, todos los valores que son iguales a al menos uno de los valores contenidos en el vector lunes (verifique que el vector lunes lo puede cambiar por cualquier otro vector de fechas que le resulten de interés como podría utilizarse en la metodología de estudios de eventos, Event Study).
x[fechas %in% lunes]
[1] -0.9182051773 0.2278011059 ...
Crear una variable binaria para fechas especificas
Finalmente, podemos crear una variable binaria que sea igual a 1 para los días lunes y cero para el resto de fechas, para esto utilizamos el operador lógico especial %in% para crear una binaria que sea igual a 1 siempre que una de las fechas de las guardadas en mi base de datos, sea igual al vector de fechas de interés identificada.
dummyLunes<-as.numeric(fechas %in% lunes)
dummyLunes
[1] 1 0 0 0 0 0 0 1
Una alternativa más sencilla de generar el vector de lunes es utilizando la función weekdays y el operador lógico de igualdad.
as.numeric(weekdays(fechas)=="lunes")
Para el siguiente ejemplo, se genera una variable aleatoria para los 365 días del 2018 (note que se utilizó la función seq para generar una secuencia de fechas, pero esta pudo haberse importado directamente de una base de datos):
x<-rnorm(365)
fechas<-seq(as.Date("2018/1/1"), by = "day", length.out = 365)
data<-data.frame(fechas,x)
head(data)
fechas x
1 2018-01-01 -0.91820518
2 2018-01-02 -1.77966799
3 2018-01-03 1.04555275
4 2018-01-04 -0.07364716
5 2018-01-05 -0.41371250
6 2018-01-06 0.90414391
Posteriormente, se crea un vector de lunes, asumiendo la siguiente idea, dentro del vector de fecha que estoy trabajando (en mi base de datos, llamada data), identifico el primer lunes, el cual corresponde a la fecha "2018/1/1", luego indico que esta secuencia se repita semanalmente (todos los lunes) [by = "week"], durante el periodo “2018/12/31". Por lo que, este vector llamado lunes, contiene todas las fechas que son lunes durante el periodo de estudio.
lunes<-seq(as.Date("2018/1/1"), as.Date("2018/12/31"), by = "week")
lunes
[1] "2018-01-01" "2018-01-08" "2018-01-15"
Recuperar un vector de valores de fechas especifica
Ahora, como tenemos identificadas las fechas de interés, utilizamos el concepto de indexación en R para acceder a los valores de interés, combinado con el operador especial %in%, que es equivalente a la igualdad del vector fecha a cada uno de los valores (también fechas) indicado en el vector lunes. Es decir, que busca en el vector de fechas de mi base de datos, todos los valores que son iguales a al menos uno de los valores contenidos en el vector lunes (verifique que el vector lunes lo puede cambiar por cualquier otro vector de fechas que le resulten de interés como podría utilizarse en la metodología de estudios de eventos, Event Study).
x[fechas %in% lunes]
[1] -0.9182051773 0.2278011059 ...
Crear una variable binaria para fechas especificas
Finalmente, podemos crear una variable binaria que sea igual a 1 para los días lunes y cero para el resto de fechas, para esto utilizamos el operador lógico especial %in% para crear una binaria que sea igual a 1 siempre que una de las fechas de las guardadas en mi base de datos, sea igual al vector de fechas de interés identificada.
dummyLunes<-as.numeric(fechas %in% lunes)
dummyLunes
[1] 1 0 0 0 0 0 0 1
Una alternativa más sencilla de generar el vector de lunes es utilizando la función weekdays y el operador lógico de igualdad.
as.numeric(weekdays(fechas)=="lunes")
Suscribirse a:
Entradas (Atom)
Descomposición de una serie temporal en R: componente transitorio vs permanente
La siguiente entrada utiliza la inflación mensual de la República Dominicana para obtener una descomposición histórica de la evolución de la...
-
Missing Values (NA) in R. En la siguiente entrada se muestran algunas operaciones básicas para la identificación y tratamiento de valor...
-
Tablas de frecuencia con condicionales: tabulate Las tablas de frecuencia absoluta nos permiten contabilizar casos que cumplen con d...
-
Las series económicas pueden estar influidas por una serie de procesos no determinista, ni conocidos para el analista y que pueden incidir ...