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.