12 nov 2016

Ejemplos de tablas en Stata




Las tablas de frecuencia absoluta nos permiten contabilizar casos que cumplen con determinadas condiciones, Stata genera este tipo de tablas mediante diversas formas, una de ella es mediante el comando tabulate, en el mismo, tal como muestran los siguientes ejemplos, podemos además introducir filtros, condicionales, factores de expansión y las demás bondades de Stata (Alonso Borrego & Sánchez Mangas) .

* Tabla de frecuencia absoluta, relativa y relativa acumulada
. tabulate foreign

   Car type |      Freq.     Percent        Cum.
------------+-----------------------------------
   Domestic |         52       70.27       70.27
    Foreign |         22       29.73      100.00
------------+-----------------------------------
      Total |         74      100.00

Especificándole dos variables, también podemos obtener una tabla de contingencia cruzada:

. tabulate mpg  foreign

   Mileage |       Car type
     (mpg) |  Domestic    Foreign |     Total
-----------+----------------------+----------
        12 |         2          0 |         2
        14 |         5          1 |         6
        15 |         2          0 |         2
        16 |         4          0 |         4
        17 |         2          2 |         4
      ...
        41 |         0          1 |         1
-----------+----------------------+----------
     Total |        52         22 |        74

También podemos introducir filtros o condicionales a nuestras tablas, esto resulta interesante cuando deseamos restringir nuestro análisis a solo un grupo especial de la población. El próximo comando muestra la tabla de frecuencias de las variables sólo para las observaciones que cumplen la expresión especificada después del if.


Los estadísticos descriptivos constituyen una de las primeras miradas brindada a nuestra base de datos,  Utilizando las especificaciones de contenido, se obtiene la tabla, conteniendo la deviación y la media de los precios según el origen de producción de los coches.

. table foreign, contents (n price mean price sd  price )

-------------------------------------------------
 Car type |    N(price)  mean(price)    sd(price)
----------+--------------------------------------
 Domestic |          52      6,072.4     3097.104
  Foreign |          22      6,384.7     2621.915
-------------------------------------------------

“Añadiendo además la opción row (col), la tabla incluirá una fila (columna) adicional con los valores totales, para cada valor de las opciones que aparecen”.

table foreign, contents (n price mean price sd  price ) row

-------------------------------------------------
 Car type |    N(price)  mean(price)    sd(price)
----------+--------------------------------------
 Domestic |          52      6,072.4     3097.104
  Foreign |          22      6,384.7     2621.915
          |
    Total |          74      6,165.3     2949.496

Podemos también solicitar as estadísticas para diversas variables, pero también podemos obtener muchos otros estadísticos descriptivos (Gresia, 2012), como por ejemplo:

tabstat price length weight if foreign == 1, s(count min max mean sd cv sk p50 p50 p75 p90)

   stats |     price    length    weight
---------+------------------------------
       N |        22        22        22
     min |      3748       142      1760
     max |     12990       193      3420
    mean |  6384.682  168.5455  2315.909
      sd |  2621.915  13.68255  433.0035
      cv |  .4106571  .0811802  .1869691
skewness |  1.215236  .0809646  1.056582
     p50 |      5759       170      2180
     p50 |      5759       170      2180
     p75 |      7140       175      2650
     p90 |      9735       189      2830
----------------------------------------


tabulate foreign, summarize( price)

            |          Summary of Price
   Car type |        Mean   Std. Dev.       Freq.
------------+------------------------------------
   Domestic |   6,072.423   3,097.104          52
    Foreign |   6,384.682   2,621.915          22
------------+------------------------------------
      Total |   6,165.257   2,949.496          74


El comando table, también nos permite utilizar una cantidad importante de comandos. Los ejemplos de esta sección utilizan la Encuesta Nacional de Fuerza de Trabajo (ENFT) correspondientes al mes de Abril2010 para generar tabulados.

Ejemplo 1. Población por rango de edad:
En muchas ocasiones necesitaremos re-codificar variables cuantitativas, para obtener grupos de la mismas, por tanto antes de usar el comando table debemos re-codificar las variables de nuestro interés. Además, aprovechemos el presente ejemplo para explicar el uso del Script.

/*
Autor: Nerys
Versión: 12/11/2016
Descripción: explica como realizar tabulados
usando encuestas de hogares de la real real
*/

clear all
  cd "C:\Users\Nerys Ramierz\Dropbox\Materia, Seminario de la Investigación\Documentos compartidos Seminario\Nivelación STATA"
       capture log using "Results_table", t replace
       set more off

       *carga la base de datos
       use ENFTAbril2010
      
       *Ejemplo 1
       recode eft_edad (1/14=0 "Niños") (15/64=1 "PET") (else=3 "adultosM"), into(edadR)
       table edadR

----------------------
RECODE of |
eft_edad  |
(EFT_EDAD |
)         |      Freq.
----------+-----------
    Niños |      8,655
      PET |     19,034
 adultosM |      2,804
----------------------

Observe que en el ejemplo anterior obtuvimos el número de personas presente en la encuesta, por lo que nuestro objetivo es obtener el dato de la población en total, en tal sentido necesitaremos utilizar el factor de expansión presente en la encuesta. Si recordamos la sintaxis del programa solo debemos modificar levemente el comando anterior:

table edadR [fw=eft_factor_exp]

----------------------
|(EFT_EDAD |
)         |      Freq.
----------+-----------
    Niños |    2663955
      PET |    6259825
 adultosM |    829,277
----------------------

Pero observe que no siempre los datos son arrojados en el formato que deseamos, Stata permite especificarle al programa el tipo de datos en que deseamos se imprima nuestra tabla en la pantalla de resultados. Note que mediante la opción format podemos acceder a una cantidad importante de formatos en nuestras tablas.

table edadR [fw=eft_factor_exp], format(%10.0fc)

----------------------
RECODE of |
eft_edad  |
(EFT_EDAD |
)         |      Freq.
----------+-----------
    Niños |  2,663,955
      PET |  6,259,825
 adultosM |    829,277
----------------------

El comando table también nos permite cruzar nuestra información según otros tipos de variables categóricas como el sexo o el estado civil, solo especificando el nombre de las variables:

Ejemplo 2. Población por sexo, según rango de edad
Note en este ejemplo que es necesario muchas veces recodificar las variables originales de nuestra base de datos, de forma tal que en los resultados nos salgan las etiquetas de los valores y no los valores como tal.

table edadR sexo [fw=eft_factor_exp], format(%10.0gc)

----------------------------------
RECODE of |
eft_edad  |   RECODE of eft_sexo 
(EFT_EDAD |       (EFT_SEXO)     
)         |     hombre       mujer
----------+-----------------------
    Niños |    1339490     1324465
      PET |    3121364     3138461
 adultosM |    395,444     433,833
----------------------------------

También podemos adherir las marginales (totales) a las tablas anteriores:

table edadR sexo [fw=eft_factor_exp], row col format(%13.0gc)

-------------------------------------------------------
RECODE of |
eft_edad  |
(EFT_EDAD |        RECODE of eft_sexo (EFT_SEXO)      
)         |        hombre          mujer          Total
----------+--------------------------------------------
    Niños |     1,339,490      1,324,465      2,663,955
      PET |     3,121,364      3,138,461      6,259,825
 adultosM |       395,444        433,833        829,277
          |
    Total |     4,856,298      4,896,759      9,753,057
-------------------------------------------------------


En muchas ocasiones preferiremos obtener los resultados en términos relativos, es decir expresados en porcentajes. En el ejemplo anterior obtuvimos la población por sexo, según grandes grupos de edad, pero suponga que necesitamos saber cómo se distribuyen esos grupos de edad según sexo, esto se puede lograr utilizando el comando tabulate.

Ejemplo 3. Distribución de la población por sexo, según rango de edad
Note en la siguiente tabla que obtuvimos la distribución de la población por sexo, según rango de edad, en tal sentido se puede interpretar como que el 27.05% de la población femenina del país tienen menos de 15 años. (Según sean filas o columnas nos indica relativo a que variables esta expresado el porcentaje)

tab edadR sexo [fw=eft_factor_exp], nofreq col

 RECODE of |  RECODE of eft_sexo
  eft_edad |      (EFT_SEXO)
(EFT_EDAD) |    hombre      mujer |     Total
-----------+----------------------+----------
     Niños |     27.58      27.05 |     27.31
       PET |     64.27      64.09 |     64.18
  adultosM |      8.14       8.86 |      8.50
-----------+----------------------+----------
     Total |    100.00     100.00 |    100.00

También podemos estar interesados en conocer qué porcentaje de la población es varón o hembra en cada grupo de edad, en tal sentido necesitamos establecer el porcentaje en referencia a las filas, lo anterior se logra de manera fácil insertando la opción row en el comando anterior.

Ejemplo 4. Distribución de la población por sexo, según rango de edad
tab edadR sexo [fw=eft_factor_exp], nofreq row

 RECODE of |  RECODE of eft_sexo
  eft_edad |      (EFT_SEXO)
(EFT_EDAD) |    hombre      mujer |     Total
-----------+----------------------+----------
     Niños |     50.28      49.72 |    100.00
       PET |     49.86      50.14 |    100.00
  adultosM |     47.69      52.31 |    100.00
-----------+----------------------+----------
     Total |     49.79      50.21 |    100.00

También el comando tabulate permite realizar tablas en frecuencia relativa al total.

tab edadR sexo [fw=eft_factor_exp], nofreq cell

 RECODE of |  RECODE of eft_sexo
  eft_edad |      (EFT_SEXO)
(EFT_EDAD) |    hombre      mujer |     Total
-----------+----------------------+----------
     Niños |     13.73      13.58 |     27.31
       PET |     32.00      32.18 |     64.18
  adultosM |      4.05       4.45 |      8.50
-----------+----------------------+----------
     Total |     49.79      50.21 |    100.00

Por último, tenga pendiente que podemos incorporar todas o muchas de las opciones anteriores en una misma tabla modificando levemente el comando anterior. Evitaremos utilizar este tipo de tablas debido a que la lectura puede llevar a confusiones.

tab edadR sexo [fw=eft_factor_exp], row col

+-------------------+
| Key               |
|-------------------|
|     frequency     |
|  row percentage   |
| column percentage |
+-------------------+

 RECODE of |  RECODE of eft_sexo
  eft_edad |      (EFT_SEXO)
(EFT_EDAD) |    hombre      mujer |     Total
-----------+----------------------+----------
     Niños | 1,339,490  1,324,465 | 2,663,955
           |     50.28      49.72 |    100.00
           |     27.58      27.05 |     27.31
-----------+----------------------+----------
       PET | 3,121,364  3,138,461 | 6,259,825
           |     49.86      50.14 |    100.00
           |     64.27      64.09 |     64.18
-----------+----------------------+----------
  adultosM |   395,444    433,833 |   829,277
           |     47.69      52.31 |    100.00
           |      8.14       8.86 |      8.50
-----------+----------------------+----------
     Total | 4,856,298  4,896,759 | 9,753,057
           |     49.79      50.21 |    100.00
           |    100.00     100.00 |    100.00

 
Observe que en las tablas anteriores deseamos contabilizar el número de personas en cada caso, no obstante puede ser que estemos interesados en obtener estadísticos como la edad  promedio de cada grupo cruzado, el índice académico promedio de algún grupo de la población o así sucesivamente, la edad máxima, la edad mínimo, la mediana… etc. Con este tipo de tablas nos ayuda el comando table, veamos algunos ejemplos.

Ejemplo 5. Edad promedio de la población por sexo, según grupo de edad
En el ejemplo siguiente observe nos amparamos del comando contents para especificarle que deseamos obtener en el cuerpo del cuadro. Tenga presente que en muchas ocasiones necesitamos modificar el formato en como aparecen nuestros datos.

table edadR sexo [fw=eft_factor_exp], contents(mean eft_edad ) row col format(%2.1gc)

----------------------------------
RECODE of |
eft_edad  |   RECODE of eft_sexo 
(EFT_EDAD |       (EFT_SEXO)     
)         | hombre   mujer   Total
----------+-----------------------
    Niños |    7.9     7.8     7.9
      PET |     34      35      34
 adultosM |     60      62      61
          |
    Total |     29      30      29
----------------------------------

Respecto a los estadísticos que puede contener el comando table, debemos verificar la ayuda del probrama.

help table

freq                 frequency
      mean varname         mean of varname
      sd varname           standard deviation
      semean varname       standard error of the mean (sd/sqrt(n))
      sebinomial varname   standard error of the mean, binomial distribution (sqrt(p(1-p)/n))
      sepoisson varname    standard error of the mean, Poisson distribution (sqrt(mean))
      sum varname          sum
      rawsum varname       sums ignoring optionally specified weight
      count varname        count of nonmissing observations
      n varname            same as count
      max varname          maximum
      min varname          minimum
      median varname       median
      p1 varname           1st percentile
      p2 varname           2nd percentile
      ...                  3rd-49th percentile
      p50 varname          50th percentile (median)
      ...                  51st-97th percentile
      p98 varname          98th percentile
      p99 varname          99th percentile
      iqr varname          interquartile range


Esta sentencia permite realizar tablas cruzadas por más de 4 variables. Ya anteriormente utilizamos el siguiente comando para obtener los resultados mostrados en la siguiente tabla, ahora usaremos el comando by, para repetir la instrucción ya sea por provincia, por zona de residencia, por sexo… o así sucesivamente.

table edadR sexo [fw=eft_factor_exp], row col format(%13.0gc)

-------------------------------------------------------
RECODE of |
eft_edad  |
(EFT_EDAD |        RECODE of eft_sexo (EFT_SEXO)      
)         |        hombre          mujer          Total
----------+--------------------------------------------
    Niños |     1,339,490      1,324,465      2,663,955
      PET |     3,121,364      3,138,461      6,259,825
 adultosM |       395,444        433,833        829,277
          |
    Total |     4,856,298      4,896,759      9,753,057
-------------------------------------------------------

Para hacer lo anterior, por ejemplo por zona nos amparamos de la opción by() en el comando table:
  
Ejemplo 4. Distribución de la población por sexo, según rango de edad
table edadR sexo [fw=eft_factor_exp], by(zona) row col format(%13.0gc)

-------------------------------------------------------
zona and  |
RECODE of |
eft_edad  |
(EFT_EDAD |        RECODE of eft_sexo (EFT_SEXO)      
)         |        hombre          mujer          Total
----------+--------------------------------------------
Urbano    |
    Niños |       857,642        873,543      1,731,185
      PET |     2,099,006      2,214,729      4,313,735
 adultosM |       231,353        289,649        521,002
          |
    Total |     3,188,001      3,377,921      6,565,922
----------+--------------------------------------------
Rural     |
    Niños |       481,848        450,922        932,770
      PET |     1,022,358        923,732      1,946,090
 adultosM |       164,091        144,184        308,275
          |
    Total |     1,668,297      1,518,838      3,187,135
-------------------------------------------------------


En la parte interna del comando by(zona) podemos colocar otras variables:

table edadR sexo [fw=eft_factor_exp], by(zona eft_computadora) row col format(%13.0gc)

Los resultados anteriores son sumamente útil cuando nos ayudan a resumir la cantidad de veces que repetiremos un comando en nuestro scritp. Pero también se puede obtener dicho resultado en una sola tabla solo re-ordenando el comando table.

table edadR sexo zona [fweight = eft_factor_exp], row col format(%12.0fc)

------------------------------------------------------------------------------------------------
RECODE of |
eft_edad  |                        zona and RECODE of eft_sexo (EFT_SEXO)                      
(EFT_EDAD | ---------------- Urbano ----------------    ----------------- Rural ----------------
)         |       hombre         mujer         Total          hombre         mujer         Total
----------+-------------------------------------------------------------------------------------
    Niños |      857,642       873,543     1,731,185         481,848       450,922       932,770
      PET |    2,099,006     2,214,729     4,313,735       1,022,358       923,732     1,946,090
 adultosM |      231,353       289,649       521,002         164,091       144,184       308,275
          |
    Total |    3,188,001     3,377,921     6,565,922       1,668,297     1,518,838     3,187,135
------------------------------------------------------------------------------------------------

 En el caso anterior debemos agregar la obpcion scol al final, para obtener la suma total, equivalente a la población en general.





16 feb 2016

Cálculos de probabilidades a partir de las funciones de una variable aleatoria



Ejercicio de García Donato. Universidad de Valencia, Máster en Banca y Finanzas Cuantitativa, 2013
Ejercicio 1. Se tiene una función de distribución de una variable aleatoria con rango entre [0,20].

a. Dibuje la función de distribución y calcule las probabilidades prob.(x<10) y prob.(x>5)

Usando Excel y conociendo los valores que asume la función en cada rango de x, se puede dibujar la función. Esta función de distribución corresponde a una variable continua, en caso de ser discreto asume una forma escalonada.


Dado que esta función acumula probabilidades, las probabilidades de que la variable se encuentre en una rango determinado viedo dado por:


Por tanto, la probabilidad se obtendría evaluando la función en los puntos determinados, sabiéndose que F(0)=0, porque hasta el cero la función no acumula probabilidades.



b. Utilice la función de densidad para calcular las probabilidades anteriores.

Sabiendo la relación entre las funciones de densidad y la de distribución (la función de densidad es la derivada de la función de distribución (en este caso 1/20)) y conociendo la siguiente relación,


Por tanto, las probabilidades anteriores se calculan utilizando las funciones de densidad:


c. SI la función de densidad fuera ∞(1/20), que valor debería tener alfa.


Aquí se utiliza otra propiedad de las funciones de densidad, se sabe que:


sabiendo lo anterior, se puede ver directamente que el valor de la constante alfa debe ser igual a 1.






10 oct 2015

Trabajando la Encuesta Nacional de Fuerza de Trabajo: un ejemplo aplicado al cálculo de indicadores del mercado laboral dominicano


La siguiente entrada muestra como trabajar usando STATA y desde cero, la encuesta Nacional de Fuerza de Trabajo. Utilizando del archivo Excel que facilita el Banco Central de la República Dominicana, al ser solicitada. El objetivo de la entrada es incentivar el uso de la Encuesta como estudio de análisis del mercado laboral en la República Dominicana. ESPERO OS SIRVA!!!

Al solicitar la base de dato al Banco Central se contará con dos archivos Excel, un diccionario y la base de dato. El primer documento contiene una hoja de cálculo donde se explican los valores de las variables contenidas en las diversas bases, mientras que el segundo archivo contiene una serie de hojas de cálculo con las bases de miembros y de hogares correspondientes a los distintos cuestionarios de la encuesta. A continuación se coloca una imagen de dicho documento.

Ilustración 1. ENFT en Excel: documento sin trabajar recibido desde el Banco Central

Ahora es necesario importar las bases en Stata considerando algunos puntos importantes:

-          Elimina las comas de los formatos números, así evitas Stata te impute las variables como texto.
-          La forma como se muestra la importación corresponde a la versión 12 de Stata, utilizando bases guardades en formato *.txt , (delimitado por tabulaciones). Versiones anteriores a las 11 puedes guardar cada pestaña en formato txt (delimitado por tabulaciones) o cvs (delimitado por coma) y posteriormente importarlos en Stata, pero este último formato puede dar problemas en versiones de Windows anteriores a la versión 8.

-          Confirma el formato de la columna eft_periodo sea el mismo para todas las bases de datos. Existen ocasiones en que las bases tienen 1/2009 y otras ene-2009, esto ocasiona errores al combinar las bases de datos, mediante el marge.

Teniendo claro esto, el próximo paso es guardar cada una de las beses de datos en el formato especificado (*.txt , (delimitado por tabulaciones). Este procedimiento se realiza de una manera trivial en Excel. A continuación se muestra como importar las bases a Stata, luego de guardar cada pestaña en formato “txt” delimitado por tabulaciones (se hace por “guardar como” en Excel).

* =======================================
* Preliminares

cd "C:\Users\AMD\Documents\...\ENFT Abril 2009"
capture log using "ResultsENFT20091", t replace
set more off

* =======================================
* Transforma bases de Excel a Stata

*Organizando y ordenando las bases de datos*
*-----------------------------------------------------------
 insheet using  "miembro20091.txt", tab clear
sort eft_periodo eft_vivienda eft_hogar eft_miembro
save "miembros20091.dta", replace

insheet using "vivienda20091.txt", tab clear
drop eft_factor_exp
keep eft_periodo eft_vivienda eft_estrato-eft_zona eft_tipo_vivienda-eft_monto_probable_alq_dolares
sort eft_periodo eft_vivienda
save "vivienda20091", replace

insheet using "calculadas20091.txt", tab clear
sort eft_periodo eft_vivienda eft_hogar eft_miembro
save "calculadas200904.dta", replace

En este caso solo se colocan tres, que son las bases que utilizaremos en nuestro ejemplo, en caso de necesitar otras variables, que se encuentre en otro cuestionario, el procedimiento es el mismo. Luego a que las bases están listas se procede a unirlas, siempre atendiendo al fin que queremos atender o a que tipos de análisis queremos generar.

* Pegando base de datos
* -----------------------------------------------------------

use "miembros20091.dta", clear

gen VAR_VIVIENDA=.
sort eft_periodo eft_vivienda
merge m:1 eft_periodo eft_vivienda using "vivienda20091.dta"
tab _m

drop _m

gen VAR_CALCULADAS=.
sort eft_periodo eft_vivienda eft_hogar eft_miembro
merge 1:1 eft_periodo eft_vivienda eft_hogar eft_miembro using "calculadas200904.dta"
tab _m
drop _m

A este punto es importante aclarar que el procedimiento anterior permite transferir información de las bases de hogares, donde cada vivienda/hogar es la unidad de análisis a la base de miembros, donde cada observación corresponde a un miembro del hogar. Así en caso que una vivienda indique que contiene una estufa (eft_estufa=1 en la base de vivienda) ese 1 se le coloca a cada uno de los miembros del hogar de esa vivienda, tal como se muestra a continuación. Ahora ya estamos en disposición de realizar cálculos globales utilizando todo el potencial de la encuesta.

. list eft_vivienda eft_hogar eft_miembro eft_estufa in 1/10

     +-------------------------------------------+
     | eft_vi~a   eft_ho~r   eft_~bro   eft_e~fa |
     |-------------------------------------------|
  1. |        1          1          1          1 |
  2. |        1          1          2          1 |
  3. |        1          1          3          1 |
  4. |        3          1          1          1 |
  5. |        3          1          2          1 |
     |-------------------------------------------|
  6. |        3          1          3          1 |
  7. |        3          1          4          1 |
  8. |       13          1          1          1 |
  9. |       13          1          2          1 |
 10. |       13          1          3          1 |

     +-------------------------------------------+

Haciendo un paréntesis y dado que el ejemplo anterior puede no resultar claro, se coloca otro pequeño ejemplo, donde se coloca valores de si o no a la tenencia de estufa y se supone que el tercer hogar no tiene para ilustra de manera más clara la idea:

* En un inicio tenemos dos bases, una de viviendas y una de miembros
* base de viviendas
     +-------------------------------+
     | vivienda      hogar    estufa |
     |-------------------------------|
  1. |        1          1        si |
  2. |        3          1        no |
     |-------------------------------|

* y tenemos una base de miembros, obsérvese que variables como tenencias de electrodomésticos o acceso a servicios se encuentran en el cuestionario de viviendas, sin embargo otras variables como edad se encuentran en la base de miembros, este procedimiento nos permite tener ambos en una misma base.

     +--------------------------------+
     | vivienda      hogar    miembro |
     |--------------------------------|
  1. |        1          1          1 |
  2. |        1          1          2 |
  3. |        1          1          3 |
  4. |        3          1          1 |
  5. |        3          1          2 |
     |--------------------------------|
  6. |        3          1          3 |
  7. |        3          1          4 |
     +--------------------------------+

* Finalmente, lo que se hace al combinar las bases de datos es colocar la información de la base de vivienda a la base de miembros, por tanto, el resultado final es el siguiente:

     +-------------------------------------------+
     | vivienda      hogar    miembro     estufa |
     |-------------------------------------------|
  1. |        1          1          1         si |
  2. |        1          1          2         si |
  3. |        1          1          3         si |
  4. |        3          1          1         no |
  5. |        3          1          2         no |
     |-------------------------------------------|
  6. |        3          1          3         no |
  7. |        3          1          4         no |
     +-------------------------------------------+



Ahora podemos guardar esta base y comenzar a explotar la encuesta.


. save BaseENFT20091.dta, replace

Ahora como hemos anexado la parte de variables calculada, podemos calcular directamente la información que el BCRD pública en su página, con el potencial que contamos con los microdatos que abren, casi de forma infinita, el abanico de análisis disponibles. En los próximos comandos se muestran ejemplos de cómo obtener algunos valores relacionados con el mercado laboral.

* recodifica variable ocupacion 

gen      condi_mer = 1 if ocupado   ==1
replace  condi_mer = 2 if desocupado==1
replace  condi_mer = 3 if inactivo  ==1

label define condi_merlbl 1 "ocupado" 2 "desocupado" 3 "inactivo"
label values condi_mer    condi_merlbl

. table condi_mer [fweight = eft_factor_exp] if  pet==1, row col format(%12.0gc)

-------------------------
 condi_mer |        Freq.
-----------+-------------
   ocupado |    3,577,258
desocupado |      624,227
  inactivo |    3,638,634
           |
     Total |    7,840,119
-------------------------


Con la próxima imagen, extraída directamente de la página del BCRD, se puede observar la similitud entre las cifras publicadas por el Banco y las obtenidas trabajando la ENFT.

Ilustración 2. Compara resultados con respecto a los publicados por el BCRD








15 jul 2015

Tablas de p-valor con asteriscos de significancias en Excel

La entrada proporciona un if, que permite colocar los famosos asteriscos de significancia a los p-valor obtenido de alguna rutina econométrica.

Paso 1.

Crear la tabla con los p-valor. En este ejemplo corresponden a p-valor del test  de cointegración de Engle-Granger, aplicado a series de tipos de cambio.

Brasil México Colombia CostaRica Honduras Chile
0.001 0.3402 0.0626 0.6136 0.001 0.1952
0.1151 0.0552 0.1005 0.1016 0.1049 0.009
0.117 0.117 0.0947 0.1141 0.129 0.1185

Paso 2.

Usando como referencia la celda en la cual se encuentra el p-valor que deseamos obtener (cambias b22 por la celda donde se encuentra tu p-valor), colocamos el siguiente if anidado, en la parte de la nueva tabla que le corresponde:

=SI(B22<0.01;B22&"***";SI(Y(B22>0.01;B22<0.05);B22&"**";SI(Y(B22>0.05;B22<0.1);B22&"*";B22)))

Resultado

Brasil Mexico Colombia CostaRica Honduras Chile
0.001*** 0.3402 0.0626** 0.6136 0.001*** 0.1952
0.1151 0.0552* 0.1005 0.1016 0.1049 0.009***
0.117 0.117 0.0947* 0.1141 0.129 0.1185





























4 mar 2015

Econometria con Matlab: Como usar ventanas móviles para obtener series históricas de betas en el CAPM


En ocasiones necesitamos testar la estabilidad de cierta estimación analizando la evolución de una serie histórica de betas del modelo de regresión lineal.  El método de ventanas móviles permite realizar este tipo de ejercicio. En el siguiente ejemplo se muestra como se puede obtener una serie histórica de betas del CAPM y el Alpha de Jensen. Como usualmente se dispondrá de la rentabilidad del mercado y la de un sin numero de activos, lo que hemos llamado x e y(i) respectivamente, donde i i representa cada una de las columnas de la matriz de activos.

% -------------------------------------------------------------
%la idea es:
% tienes una matriz de variables (Yi), donde i representa cada columna
% y tienes una variable X, que representa tu rendimiento de mercado en el CAPM
% necesitas hacer series temporales de betas: esto lo harás por ventanas móviles, % por tanto
% necesitas un bucle o usar operaciones vectorizadas, opta por un bucle
% necesitas recorrer tu matriz (yi), esto lo harás con otro bucle, como este ya es un segundo bucle, sera un bucle anidados, el primero te sirve para recorrer de columna en columna y el segundo para especificar las observaciones que tendrán una amplitud determinada por tu venta.

% genero variables hipoteticas que simulan rentabilidades
   x = random('Normal',0,1,100,1);     % rentabilidad del mercado
 y_i = random('Normal',0,1,100,5);   % rentabilidad de activos

% Se supone que tienes una base de datos de esta forma. ahora debes hacer el bucle anidado
% no tengo intenrnet, pero hay infinidad de ejemplos de ejemplos en internet de como hacer
% un bucle para recorrer una matriz.

 ventana=90;         % esta ventada determina la amplitud de la ventana
 [f, c]=size(y_i);    % te permite obtener las dimensiones para tu bucle

  for i=1:c        % este bucle te recorre las columna de la matriz
      for obs=1:f-ventana % este te recorre las observaciones de cada columnas
   
  % Regresión del CAPM (recuerda que el CAPM usa exceso de rent respecto al ALR)
  % Ten pendiente que el vector de 1, matricialmente te permite obtener constante      en regresión
       behat = regress(x(obs:obs+ventana-1), [ones(ventana,1) ...                                        y_i(obs:obs+ventana-1,i)]) ;
      
     % Aqui usas las dimensiones, para obtener matrices que almacenan tus betas.
         beta_capm(obs,i)=behat(2);
         alpha_jemsem(obs,i)=behat(1);

   % Analisis de estabilidad de cada beta, opcional. Haces un gráfico para ver la      evolución histórica
   % De cada uno los betas de tus activos.
        figure(i)
            plot(beta_capm(:,i))
     end
end

% Matriz de resultados

beta_capm


Espero os sirva,
Nerys

Macroeconometría aplicada en R

 La macroeconomía moderna depende cada vez más de herramientas econométricas para analizar datos, evaluar políticas y construir pronósticos....