Un comando muy útil para bases panel o series de tiempo: carryforward

Stata es, tal vez, mi software de análisis estadístico favorito (R lo uso más para hacer gráficas que para analizar datos… y casi no lo uso para manipular datos porque a veces me saca canas -aunque debo confesar que el paquete plyr me ha hecho cambiar de parecer, pero sólo un poco. ¡Espero  poner un post sobre este paquete próximamente!).

Volviendo a Stata. Hace unos días estuve batallando con una base panel. La base de datos contiene información sobre elecciones municipales en México y una de las variables (que llame “alternancia”) es un indicador que señala los años en que ocurren elecciones y si ese año hay o no un cambio de partido en el gobierno (0 indica que no hubo un cambio de partido en el gobierno y 1  que sí hubo dicho cambio). Por ejemplo, para el municipio de Aguascalientes en el estado de Aguascalientes tengo los siguientes datos desde 1988 hasta 1998:


. list anio alternancia if cve_edo==1 & cve_mun==1, clean

anio altern~d
1.   1988  .
2.   1989  .
3.   1990  .
4.   1991  .
5.   1992  0
6.   1993  .
7.   1994  .
8.   1995  1
9.   1996  .
10.  1997  .
11.  1998  0

Mi problema era el siguiente, cómo hacer que los 0s o los 1s de esa variable se siguieran los dos años posteriores al año de la elección (lo cual podría resultar conveniente -o no, dependiendo de lo que uno quiera hacer- para hacer interacciones con otras variables y, por ejemplo, ver el comportamiento de gobiernos con o sin alternancia en los tres años correspondientes a cada gobierno municipal). En resumen, ¿cómo llenar los dos valores perdidos que siguen al año de la elección? La variable muestra que un partido (el PRI en este caso) retuvo el gobierno municipal en la elección de 1992. En la elección de 1995, sin embargo, este partido perdió y hubo una alternancia de partido en el gobierno (el partido que resultó ganador en este caso fue el PAN).

En vez de ponerme a hacer “loops” o algo por el estilo que acabara con el RAM de mi computadora, encontré un comando bien útil que resolvió mi problema: carryforward.

Veamos cómo funciona (como verán el comando sólo requiere que le asignemos un nombre a la nueva variable que queremos crear). Por supuesto, hay que ordenar los datos por el identificador del municipio –id– y por el año correspondiente –anio– para no tener problemas:


findit carryforward
bysort id (anio): carryforward alternancia, gen(alternanciaCarryFwd)

Y el resultado es el siguiente:


. list anio alternanciaCarryFwd if cve_edo==1 & cve_mun==1, clean

anio altern~d
1.   1988  .
2.   1989  .
3.   1990  .
4.   1991  .
5.   1992  0
6.   1993  0
7.   1994  0
8.   1995  1
9.   1996  1
10.  1997  1
11.  1998  0

¿Qué tal? Como se puede ver, el comando llenó de 0s los años en los que estuvo el PRI en el gobierno y de 1s los años en los que hubo alternancia y llegó al PAN al gobierno para luego regresar a 0 en 1998 (lo cual significa que no hubo alternancia y el PAN siguió en el gobierno ese año). Observen nada más que el comando llena valores hacia adelante a partir del primer valor que encuentra (en este caso un 0 en 1992). Por lo tanto, los años entre 1988 y 1991 siguen teniendo valores perdidos -si supiéramos con seguridad que partido gobernaba antes de 1992 podríamos hacer un “carryforward” hacia atrás ordenando los datos de mayor a menor año -podríamos generar una variable así gen mayor_a_menor = -anio  y posteriormente bysort id (mayor_a_menor)… etc. etc. Obviamente, esto no es recomendable (de hecho, no creo que carryforward sea útil para imputar valores perdidos así que tengan cuidado cuando lo usen -si quieren imputar datos mejor usen el comando que viene en Stata 12 llamado mi o, para versiones anteriores, el comando ice).

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: