El comando egen se llama así por "extended gen" o "extended generate".
Tiene una gran cantidad de opciones que le permiten hacer cosas muy diversas, solo algunas de las cuales se verán en el video anexo. Las que veremos aquí son similares a las que ofrece el comando aggregate en SPSS.
En términos generales, el formato de los comandos egen es el siguiente:
egen nombre_nueva_variable = función(vieja_variable)
Por ejemplo, si quisiéramos el precio medio de los autos en el archivo auto.dta, el comando sería:
egen precio_medio = mean(price)
y si quisiéramos la media de las milla por galón diferenciando los autos domésticos de los extranjeros, deberíamos pedir:
bysort foreign: egen media_mpg = mean(mpg)
Las funciones que veremos en este video serán:
mean
max
min
rank
count
total
Video
lunes, 30 de julio de 2018
viernes, 27 de julio de 2018
Ejercicio de cálculo con comando egen (sin solución)
Genérese una base de datos corriendo la siguiente sintaxis:
**********************************
cls
clear all
set obs 300
set seed 1234
gen nro_cliente = _n
gen art1 = 20 if runiform() < 0.90
gen art2 = 20 if runiform() < 0.90
gen art3 = 10 if runiform() < 0.60
gen art4 = 40 if runiform() < 0.80
gen art5 = 10 if runiform() < 0.20
gen art6 = 11 if runiform() < 0.10
gen sexo = rbinomial(1, 0.55)
label define sexo 1 "Hombre" 0 "Mujer"
label values sexo sexo
**********************************
Esta base de datos simula 300 clientes que pueden comprar o no hasta 6 artículos. Si el cliente compró un artículo, figura el precio de la compra. Si no compró, hay un faltante.
El comerciante otorga descuentos a los que compraron 4 artículos o más. El precio descontado es el del artículo de menor valor.
Se pide al estudiante:
- Indique cuántos clientes compraron 4 artículos o más.
- Calcule cuánto pagó cada cliente, teniendo en cuenta el descuento del comerciante.
- Indique la recaudación total del comerciante.
- Indique qué monto recaudó de mujeres y de hombres.
- Indique el monto máximo comprado. Haga una lista con dichos montos y con la identificación de los clientes que lo compraron.
jueves, 26 de julio de 2018
Ejercicio con egen (funciones en fila). Video
La sintaxis siguiente genera una base de datos de supuestas compras hechas por 12 clientes. Los vendedores hacen, para quienes compran más de un artículo, un descuento del 25 % sobre el artículo de menor precio.
***********************************************
clear
set seed 5799
set obs 12
gen cliente = _n
gen monto_compra1 = round(rnormal(100, 20))
gen monto_compra2 = round(rnormal(100, 20))
replace monto_compra2 = . if rnormal(100,20) < 100
gen sexo = runiform() <.5
label define sexo 0 "hombre" 1 "mujer"
label values sexo sexo
cls
***********************************************
Se pide:
Haga una lista de los montos gastados por cada cliente
Indique cuánto gastaron hombres y cuánto mujeres.
Video
Do file
***********************************************
clear
set seed 5799
set obs 12
gen cliente = _n
gen monto_compra1 = round(rnormal(100, 20))
gen monto_compra2 = round(rnormal(100, 20))
replace monto_compra2 = . if rnormal(100,20) < 100
gen sexo = runiform() <.5
label define sexo 0 "hombre" 1 "mujer"
label values sexo sexo
cls
***********************************************
Se pide:
Haga una lista de los montos gastados por cada cliente
Indique cuánto gastaron hombres y cuánto mujeres.
Video
Do file
martes, 24 de julio de 2018
Prefijo bysort. Video
El prefijo bysort se utiliza para separar análisis, o para realizar operaciones, por grupos.
Por ejemplo, si hiciéramos
bysort sexo: summarize altura
nos daría dos sumarios de altura, uno para cada sexo.
O si hiciéramos
bysort region: pwcorr pbi expectativa_vida
nos daría dos medidas de correlación entre pbi y expectativa de vida, una para cada región.
Este prefijo funciona con la estructura que sigue:
bysort variable_categórica : comando...
bysort va seguido de una variable categórica y de dos puntos, y luego un comando de Stata emitido de manera habitual.
Video
viernes, 20 de julio de 2018
Algunos usos del comando egen: Funciones de fila. Video
El comando egen se llama así por extended generate. Sirve para generar nuevas variables mediante muy diversas funciones.
Veremos en esta entrada algunas de ellas que operan en cada renglón.
Se verán:
- rowmiss (cuenta los casos faltantes en un renglón)
- rownonmiss (cuenta los casos no faltantes en un renglón)
- rowmax (calcula el máximo entre una serie de variables en un renglón)
- rowmin (calcula el mínimo entre una serie de variables en un renglón)
- rowmean (calcula la media entre una serie de variables en un renglón)
- rowtotal (calcula la suma total de una serie de variables en un renglón).
Rowmiss
La sintaxis para la función rowmiss de egen puede verse a continuación.
egen NombreNuevaVariable = rowmiss (lista de variables)
Esto genera una nueva variable (en el ejemplo llamada n_faltantes) con la cantidad de faltantes en cada renglón.
Rownonmiss
La función rownonmiss nos indica el número de valores no faltantes en las variables a, b, c y d, dentro de cada renglón.
Rowmax
La función rowmax nos indica en valor máximo de una lista de variables en una nueva variable por renglón. Nótese que calcula el máximo sin tener en cuenta a los faltantes.
Rowmin
La función rowmin de egen nos indica el valor mínimo de una serie de variables en una nueva variable. Nótese que calcula el mínimo sin tener en cuenta los faltantes.
Rowtotal
La función rowtotal calcula la suma total entre una serie de variables. No tiene en cuenta los valores faltantes.
Rowmean
La función rowmean del comando egen calcula el promedio entre varias variables, renglón por renglón.
Video
domingo, 15 de julio de 2018
Relaciones bivariadas, y recodificación. Ejercicio de revisión 4 (sin solución).
Análisis
de relaciones bivariadas (análisis gráfico, numérico, de
significación y de fuerza de la asociación.
Se
trabajará con el archivo Gss93 subset.dta
DK
significa don't know
NA
significa no answer
NAP
significa not applicable
1.
Explore
las variables letdie (permitir que mueran los pacientes incurables) y
sexeduc (actitud ante la educación sexual en las escuelas).
Explore
si existe relación entre ambas variables, gráfica y numéricamente,
luego de pasar los DK, NA y NAP a faltante (.).
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula? Nota: usar chi2.
¿Cuál
es el grado de asociación? Comente.
2.
Explore
las variables sei (índice de status socioeconómico) y educ (año
más alto de educación completado).
Si
es necesario pase valores a faltantes.
Explore
si existe relación entre ambas variables, gráfica y numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula de que, no hay relación entre años de educación y nivel socioeconómico?
¿Cuál
es el grado de asociación?
¿Es
la relación significativa?
3.
Explore
las variables age (edad del respondente) y tvhours (horas diarias de
TV).
Explore
si existe relación entre ambas variables, gráfica y numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula? (variables continuas: usar rho de spearman o r de Pearson. ¿Se puede descartar la hipótesis nula de que la rho de Spearman o la r de Pearson sean iguales a 0?
4.
Explore
las variables degree2 (terminó o no terminó el college, dicotómica)
y sei (índice de status socioeconómico, continua).
Explore
si existe relación entre ambas variables gráficamente y
numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula de igualdad de medias? (ttest)
Indique el grado de asociación a través de la diferencia en sei entre ambos grupos y también con la d de Cohen y g de Hedges [ comando esize two sei, by(degree2) ]
Indique el grado de asociación a través de la diferencia en sei entre ambos grupos y también con la d de Cohen y g de Hedges [ comando esize two sei, by(degree2) ]
5.
Explore
las variables musicals (gusto por los musicales de Broadway, escala
Likert con 5 categorías) y classiccl (gusto por la música clásica,
escala Likert con 5 categorías).
Explore
si existe relación entre ambas variables, gráfica y numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula de que cuando crece el gusto por un tipo de música no crece el gusto por la otra? (usar tab2 con porcentajes con la opción tau b. También usar ktau para tener la significación de tau b)
¿Cuál
es el grado de asociación?
6.
Explore
las variables sex (sexo, dicotómica) y agewed (edad al casarse por
primera vez, continua).
Explore
si existe relación entre ambas variables, gráfica y numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula de que las medias de edad para casarse son iguales
para ambos sexos? (ttest)
Cuáles
son las edades de las 12 personas que se casaron con más edad en la muestra, y cuál es el sexo de esas personas?
7.
Explore
las variables folk (gusto por la música folk, escala Likert de 5
puntos) y jazz (gusto por el jazz, escala Likert de 5 puntos).
Explore
si existe relación entre ambas variables, gráfica y numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula? (usar tab2 con porcentajes y también ktau, y allí
taub).
¿Cuál
es el grado de asociación?
8.
Explore
las variables spanking (estar de acuerdo con palmadas para
disciplinar a los niños) y polviews (autoidentificación ideológica
como liberales o conservadores).
Explore
si existe relación entre ambas variables, gráfica y numéricamente.
Asumiendo
que esta es una muestra aleatoria simple, ¿se puede descartar la
hipótesis nula?
¿Cuál
es el grado de asociación?
martes, 10 de julio de 2018
Ejercicio de recodificación (sin solución)
Genere la base de datos corriendo la sintaxis que sigue:
**********************************************************
clear
set obs 400
set seed 999
gen religion = trunc(1+(4)*runiform())
label define religion 1 "catolico" 2 "protestante" 3 "judío" 4 "islam" 5 "otro"
label values religion religion
gen glicemia = rnormal(100, 25)
gen industria = trunc(1+(9)*runiform())
gen voto = trunc(1+(5)*runiform())
label define voto 1 "FA" 2 "PC" 3 "PN" 4 "CA" 5 "Otros"
label values voto voto
replace voto = 9 in 2
**********************************************************
La variable religión tiene categorías:
1. católico 2. protestante 3. judío 4. islam y 5. otro.
Recodifíquela y rotúlela en una nueva variable con las categorías 1. cristiano (abarcará católicos y protestantes) y 2. otros (abarcará judío, islam y otro).
Haga, para verificar la corrección de la recodificación, una lista que muestre los primeros 20 renglones de las variables religión y religión recodificada. [Nota: para ver los 20 primeros renglones añadir al comando in 1/20 Así, la sintaxis podría quedar list religion religion_rec in 1/20]
La variable glicemia (azúcar en sangre) tiene una gama de valores. Recodifíquelos y rotúlelos en una nueva variable, glicemia_rec, en 1. hipoglicémico (69 o menos) 2. normal (70 a 100) 3. prediabético (101 a 125) y 4. (126 o más) diabético.
Haga, para verificar, una lista que muestre los primeros 20 renglones de las variables glicemia y glicemia_rec.
La variable industria tiene 9 categorías. Recodifíquelas y rotúlelas en una nueva variable, llamada sector, según sigue:
1, 2 y 8 pasan a 1. Sector primario
3, 4 y 5 pasan a 2. Sector secundario
6, 7 y 9 pasan a 3. Sector terciario.
Haga una lista que muestre los primeros 20 renglones de las variables industria y sector.
La variable voto tiene 5 categorías: FA, PC, PN, CA y Otros. Hay un valor incomprensible: 9.
Lleve en la misma variable ese 9 a valor faltante.
Pida una tabla de frecuencias y verifique que ya no está el valor 9.
jueves, 5 de julio de 2018
Recode: puntos de corte
En este video se verá cómo tratar los puntos de corte de una recodificación en caso de que un mismo valor sea informado en más de una categoría.
La tabla de arriba provee de información para formar un score utilizado por los médicos. Se deben recodificar 6 variables.Pero algunos valores (35 y 8 en la primera variable y 85 y 92 en la segunda) aparecen citados debajo de dos puntuaciones distintas cada uno.
Esto exige recodificar con cuidado.
Suscribirse a:
Entradas (Atom)