La entrada contienen las notas de estudios sobre econometría con datos de panel y su estimación en R, basados en una primera parte en el libro de econometría de Wooldridge (capitulo 13 y 14). Los paquetes requeridos son wooldridge, tidyverse y plm, para la base de datos, la manipulación de datos y estimación de los modelos.
Generalmente estamos interesados en realizar
operaciones sobre varias variables simultáneamente, especialmente cuando estamos
frente a una data tipo wide, teniendo diversas opciones [curso de R gratis]:
i)Repetir la
orden para cada variable.
ii)Usar loops.
iii)Transformar la
data en long format y trabajar by_group la sentencia buscada.
iv)Utilizar
purr.
v)Usar la función
across.
En el tidyverso [introducción rápida a dplyr] de R,
se utiliza la función acrosspara realizar esta tarea,
por lo que, en la siguiente entrada mostramos algunos ejemplos de cómo utilizarla
usando la data Wage1 del paquete wooldridge.
across(.cols=vars,.fnd=fun,.names=nom)
La función across utiliza
dos argumentos principales: 1) una lista de variables; y, ii) la función. El
tercer argumento es opcional, el mismo se usa para colocar el nombre a las
variables creadas, en caso de omitirlo la función sustituye las mismas
variables con las que estamos trabajando.
Ejemplo
1. Obtener el promedio de una lista
de variables usando c() o !c(). Obtenemos el promedio de las variables educ, exper y tenure dentro de la base indicada. En lugar de repetir la sentencia mean(x) para cada una de las variables en una lista determinada, se utiliza across anidada en la función summarise.
## # A tibble: 1 x 4 ## wage
nonwhite female married ##
<dbl> <dbl> <dbl>
<dbl> ## 1 5.90 0.103
0.479 0.608
Ejemplo 3. Obtener el promedio de una lista de variables,
segmentado por grupo. Lo relevante ahora es que se utiliza el operador : para indicarle al programa la secuencia de
variables con las que necesitamos trabajar. Se utiliza la group_by para agrupar la data según las clases que
aparecen en la variable services. Es decir, obtener el
promedio por grupo.
Ejemplo
4. Transformar el formato de
varias variables de manera simultánea. Adicionalmente pudo usarse la función where para transformar formatos específicos, dado que esta
utiliza operadores lógicos para identificar diferentes tipos de formatos en mis
bases de datos.
Ejemplo 5. Realizar operaciones sobre una lista de
variables usando una función anónima.
En el ejemplo siguiente se obtiene el cuadrado de las variables elegidas.
~ indica que se va usar una función anónima, cuyo
argumento puede ser . o .x (particularmente prefiero usar .x porque este
facilita la lectura de terceros al momento de interpretar los códigos). Note
que en lugar de usar algunas de las funciones definidas en el paquete base de
R, algún paquete adjuntado o por el propio usuario, la misma función se define
dentro de la misma función que estamos usando.
Ejemplo 6. Por default, la función across utiliza los mismos nombres de las variables sobre
la que opera, usando “{.col}” (también se puede
asignar el nombre de la función “{.fn}”,
seguido de un número en caso de tener más de dos variables), esto facilita el
trabajo con la función, pero tiene el inconveniente que sustituye la
variable original por la trasformación sugerida, en caso de usar across dentro del comando mutate.
Para generar variables o columnas nuevas usamos el
argumento .names y anexamos extensiones al nombre por default de
las variables, podemos obtener nuevos nombres de las variables.
Ejemplo 7. Condicionando nuestras operaciones a condiciones
lógicas. En el siguiente ejemplo colocamos etiquetas sobre las variables tipo factor.
Hasta ahora, hemos
indicado una lista de variables a la función, sin embargo, en muchas ocasiones
no sabemos cuál es la lista de variables sobre las que deseamos operar, por la
que deseamos operar sobe una lista de variables usando operaciones lógicas. Es
decir, no siempre sabemos cuál es el listado de variables sobre la que deberíamos
trabajar, sino que esta sigue alguna regla lógica. Por ejemplo, usar todas las
variables tipos texto, elevar al cuadrado las variables que sumen más de 15, o
crear logaritmo sobre todas las variables numéricas. En estos casos, anidamos
la función where.
## # A tibble: 6 x 7 ## wage educ exper tenure nonwhite female married ## <dbl>
<int> <int> <int>
<fct> <fct> <fct>
## 1 3.10 11
2 0 no si
no ## 2 3.24 12
22 2 no si
si ## 3 3 11
2 0 no no
no ## 4 6 8
44 28 no no
si ## 5 5.30 12
7 2 no no
si ## 6 8.75 16
9 8 no no
si
Ejemplo
11. Aplicando varias funciones
sobre el conjunto de variables. En el siguiente ejemplo obtenemos la media y
usamos una función anónima para obtener la suma del cuadrado de las variables
incluidas en el rango educ:exper.
Ejemplo
12. Creando tasas de crecimiento
sobre todas las variables usando una función anónima. Puntualmente se calculan
las tasas y luego se asignan nombres a las variables, para evitar se sustituyan
las originales: