lunes, 14 de diciembre de 2015

Estratificación univariada: Dalenius-Hodges en R

En ocasiones necesitamos efectuar clasificaciones de diversos elementos de un solo género o tipo en particular, es decir, considerando una sola variable, ejemplo de ello podría ser la necesidad de clasificar los sueldos (una variable) en 5 diferentes estratos o niveles A, B, C, D y E, en donde el nivel de sueldo A es el segmento de más altos ingresos y el E el correspondiente más bajo. Dicho lo anterior tenemos el siguiente conjunto de datos de salarios de 197 individuos.

salario <-c (
 4289.73, 4406.78, 4488.95, 4571.12, 4812.87, 4843.74, 4851.71, 4890.56, 4914.12, 4933.78, 
 5018.10, 5040.95, 5044.34, 5066.85, 5078.80, 5110.44, 5119.41, 5124.68, 5130.99, 5135.34, 
 5177.40, 5191.48, 5193.40, 5197.50, 5279.18, 5290.13, 5290.16, 5296.33, 5384.02, 5397.73, 
 5409.40, 5411.93, 5416.75, 5445.54, 5472.65, 5723.95, 5725.31, 5731.29, 5969.58, 6022.41, 
 6095.31, 6097.05, 6130.07, 6169.46, 6198.34, 6280.46, 6316.52, 6328.47, 6343.44, 6357.36, 
 6357.45, 6360.44, 6371.10, 6376.79, 6403.20, 6413.09, 6428.10, 6434.53, 6440.06, 6448.47, 
 6470.93, 6472.14, 6481.34, 6486.56, 6490.19, 6493.81, 6501.03, 6504.24, 6515.35, 6520.18, 
 6521.95, 6526.74, 6532.13, 6537.66, 6554.48, 6570.43, 6571.21, 6573.25, 6574.21, 6574.52, 
 6574.73, 6581.37, 6586.18, 6591.89, 6593.38, 6642.02, 6651.42, 6665.15, 6684.61, 6688.75, 
 6716.94, 6728.25, 6729.34, 6729.89, 6736.86, 6738.59, 6740.44, 6764.47, 6768.74, 6776.44, 
 6781.90, 6786.11, 6793.99, 6798.21, 6800.80, 6828.71, 6829.09, 6831.70, 6832.51, 6837.67, 
 6841.04, 6845.12, 6848.01, 6848.14, 6864.57, 6875.00, 6875.52, 6883.97, 6887.47, 6897.43, 
 6913.51, 6914.35, 6930.79, 6934.43, 6940.40, 6947.90, 6949.91, 6950.31, 6961.26, 6970.46, 
 6989.58, 7001.53, 7006.66, 7012.12, 7019.46, 7031.67, 7259.44, 7267.55, 7356.75, 7359.73, 
 7382.94, 7431.07, 7433.44, 7446.43, 7455.70, 7493.88, 7511.72, 7520.14, 7535.55, 7544.52, 
 7594.32, 7615.39, 7679.87, 7763.58, 7769.01, 7840.14, 7890.94, 7921.94, 7962.78, 7973.63, 
 7990.67, 8015.57, 8313.88, 8571.07, 8607.91, 8625.85, 8646.75, 8825.33, 8868.16, 8953.81, 
 8963.78, 9034.30, 9121.13, 9150.03, 9151.02, 9176.92, 9203.81, 9207.80, 9209.56, 9214.77, 
 9261.35, 9271.31, 9282.27, 9415.62, 9433.66, 9535.25, 9536.25, 9559.16, 9560.15, 9573.10, 
 9708.63,20850.56,29298.05,43287.22,43419.52,43437.22,73458.19)

El método de Dalenius-Hodges forma estratos en los cuales la varianza es mínima intra-grupos y máxima inter-grupos, es decir, forma grupos lo más homogéneos posible.

En R, debemos instalar el paquete stratification, posteriormente cargar esta librería con el comando:

library(stratification)

Y posteriormente, para efectuar la estratificación:

strata.cumrootf(salario, CV=0.05, Ls=5)

En donde , salario es el vector de datos, CV es el coeficiente de variación objetivo, y Ls es el número de estratos que deseamos.

R nos da como resultado los límites superiores de cada estrato, los cuales se toman cerrados por la derecha (límite superior) y abiertos por la izquierda (límite inferior), a excepción del primero que se considera cerrado por ambos lados. El resultado de la clasificación de salarios que se tomó como ejemplo es:

E - [4,289.73 ,  6,134.22 ]
D - (6,134.22 ,  7,056.47]
C - (7,056.47 ,   7,978.71]
B - (7,978.71 ,   9,823.21]
A - (9,823.21 , 73,459.19]

sábado, 14 de noviembre de 2015

Mapeo en Stata 2 de 2

En la anterior entrada mostramos como mapear los poligonos que representaban a las entidades de México de manera simple, en la presente tomaremos como ejemplo para mapear el estado de Puebla y algunas variables tomadas del Censo de Población y Vivienda 2010.

En primer lugar, y retomando lo publicado en la anterior entrada, mapeamos exclusivamente en la localidad Heróica Puebla de Zaragoza y con las divisiones por AGEB (Área Geoestadística Básica), con los siguientes comandos:

shp2dta using ageb_urb, database(agebdb) coordinates(agebcoord)
use agebdb, clear
spmap using agebcoord if cve_loc==211140001, id(_ID) fcolor(blue*0.5)



El siguiente paso será mapear el porcentaje de Población Económicamente Activa (PEA) por AGEB, de la siguiente manera:

spmap PEA using agebcoord if cve_loc==211140001, id(_ID) clnumber(20) fcolor(Blues2) ocolor(none ..) legstyle(3) legend(ring(1) position(3)) ndfcolor(red)


En donde:

clnumber(20) = Número de rangos que deseamos en la variable.
fcolor(Blues2) = Esquema de coloreo que deseamos en los polígonos, este tipo en particular admite hasta 99 categorias, y funciona perfectamente en variables continuas.
ocolor(none ..) = Indica que no queremos colorear el contorno de los polígonos.
legstyle(3) = Índica el estilo de la leyenda, este tipo es el indicado para este ejemplo.
ndfcolor(red) = El color para los polígonos donde no se tiene información.

viernes, 13 de noviembre de 2015

Mapeo en Stata 1 de 2

Stata cuenta con algunos módulos para generar mapas y algunas otras herramientas relacionadas con el análisis espacial. En esta entrada mostraré como elaborar algunos mapas sencillos de una forma muy fácil.

Lo primero que debemos hacer es instalar los siguientes módulos: spmap, shp2dta, mif2dta. El primero es el paquete para realizar los mapas, el segundo y el tercero son los paquetes necesarios para tranformar los archivos .shp y/o .mif a dormato .dta, que es el tipo de extensión que "lee" Stata. Para instalarlos sólo es necesario ejecutar los siguientes comandos:
      ssc install spmap
      ssc install shp2dta
      ssc install mif2dta

Seguido de ello necesitamos las capas de información, en este ejemplo los shapefiles y los archivos complementarios de información (.dbf, .sbn, .sbx). Para el caso de México podemos descargarlos de la página del INEGI, en caso de tenerlos debemos ejecutar el siguiente comando para transformar los datos en archivos compatibles con Stata.

shp2dta using estatal, database(mxdb) coordinates(mxcoord)

En el comando anterior, estatal es el nombre raíz de todos los archivos necesarios, es decir, en una sola carpeta debemos tener los archivos nombrados de la siguiente forma:

estatal.dbf
estatal.shp
estatal.sbn
estatal.sbx

El comando database(mxdb), será el nombre que recibirá el archivo .dta que contendrá la información procedente del archivo .dbf, usualmente con variables a "mapear". Y el comando coordinates(mxcoord), será el nombre del archivo que recibirá el archivo .dta con la información del shapefile (.shp).

Una vez transformados los datos, lo siguiente es "llamar" a la base de datos que deseamos mapear, en este caso "mxdb", para ello ingresamos el siguiente comando:

use mxdb, clear

Una vez teniendo los datos, podemos editar la base, agregar variables, etc. El primer mapa puede ser sólo de los polígonos, sin ninguna variable en ella, con el comando:

spmap using mxcoord, id(_ID) fcolor(blue*0.5)

El cual contiene entre sus instrucciones, usar el archivo de coordenadas que procede del shapefile transformado previamente (using mxcoord), tomando como identificador de polígonos la variable _ID (id(_ID)) y coloreando los polígonos en color azul con una intensidad del 50% (fcolor(blue*0.5)). El resultado es el siguiente:

Con la misma lógica es posible mapear sólo uno de los polígonos (en este caso tomaremos como ejemplo el estado de Veracruz), con el siguiente comando:

spmap using mxcoord if _ID==30, id(_ID) fcolor(orange*0.7)



Para colocar etiquetas del nombre de la entidad o de cualquier polígono que estemos mapeando, es necesario darle a Stata las coordenas de la ubicación donde deseamos la etiqueta, sin embargo, estos datos no siempre están disponibles, hasta ahora me las he arreglado con el siguiente procedimiento.

De la base mxcoord, que contiene las coordenadas de los polígonos, obtenemos promedios de coordenadas (X,Y) de cada polígono, con los siguientes comandos:

use mxcoord, clear
by _ID, sort: egen xcoord = mean(_X)
by _ID, sort: egen ycoord = mean(_Y)

Posteriormente, esos promedios debemos pasarlos a la base mxdb, tomando como referencia algún identificador,  en este caso el OID o la Clave Geoestadística.

use mxdb, clear
sort OID

En este paso copiamos los promedios de las coordenadas por ID, posteriormente elegimos la etiqueta a mapear, en nuestro ejemplo son los nombres de las entidades NOM_ENT, si estan en formato string, debemos convertirla a variable numérica con el comando

encode NOM_ENT, g(entidad)

Finalmente mapeamos con el siguiente comando:

spmap using mxcoord, id(_ID) label(xcoord(xcoord) ycoord(ycoord) label(entidad) length(15) size(vsmall) color(blue) )

Lo que nos produce:

En la siguiente entrada, mostraré como elaborar mapas en los que deseamos mapear alguna variable, ya sea continua o discreta, así como darle acabados más complejos a nuestros mapas.

martes, 8 de septiembre de 2015

Portada de tesis de la Universidad Veracruzana en LaTeX 2 de 2.

En esta entrada muestro una forma un poco más elegante para elaborar la portada de vuestras tesis. Para ello sólo debemos agregar las siguientes líneas de comando:


\documentclass[a4paper,openany,12pt]{book}  % En el preámbulo
\usepackage[spanish,es-nosectiondot]{babel} 
\usepackage[latin1]{inputenc}               
\usepackage[pdftex]{graphicx}              
\usepackage{float}                         
\usepackage{multirow, array}       
\usepackage{hhline}                      

\DeclareGraphicsExtensions{.jpg,.png}       

\begin{document}                         % Inicia documento

\begin{titlepage}                           % Inicia la página de portada

\begin{table}[H]                            % Inicia el ambiente tabla 
\begin{tabular}{m{20mm} c}
\multirow{3}{*}{\includegraphics[trim=0mm 0mm 0mm 13mm,width=20mm]{./figuras/universidadlogo.jpg}} &{\LARGE \textbf{UNIVERSIDAD VERACRUZANA}}        \\ \hhline{~-}                           
   &{\Large FACULTAD DE ESTADÍSTICA E INFORMÁTICA}   \\
   &{\large ESPECIALIZACIÓN EN MÉTODOS ESTADÍSTICOS} \\
   &  \\
   &  \\
   &  \\
\multirow{29}{*}{\quad\rule{.04cm}{15cm}\quad\rule{.04cm}{14cm}\quad\rule{.04cm}{13cm}}   &{\large Titulo de la tesis:}\\
   &{\large complemento o subtitulo}  \\
   &  \\
   & \\
   &  \\
   &\textsc{Tesis(Monografía)} \\
   &  \\
   &  \\
   &Que para obtener el grado de: \\
   &  \\
   &  \\
   &{\Large \textbf{\textsl{Especialista en Métodos Estadísticos}}} \\
   &  \\
   &  \\
   & Presenta \\
   &  \\
   &{\large Nombre del candidato(a)} \\
   &  \\
   &  \\
   & Director(a) \\
   &  \\
   &{\large Nombre del director(a)} \\
   &  \\
   &  \\
   &Sub-director(a) \\
   &  \\
   &{\large Nombre del sub-director(a)} \\
   &  \\
   &  \\
   &\multicolumn{1}{r}{Lugar, fecha} \\
\end{tabular}
\end{table}

\end{titlepage}

\end{document}

Dentro del ambiente tabla, las lineas verticales fueron  elaboradas con el comando \rule{ancho}{largo}, insertadas en la primera columna de ancho m{20mm}, y abarcando 29 renglones con el comando \multirow{filas}{*}{lineas verticales}.

La línea horizontal fue creada con el comando \hhline{~-}en donde la virgulilla de la eñe "~" indica que no se debe colocar la línea horizontal debajo de la primera columna (donde esta el logo), y por su parte el guión corto "-" señala que en la segunda columna si se debe colocar una linea horizontal.

El resto del texto se agrupa en la segunda columna, los espacios son generados automáticamente de acuerdo con el número de renglones (filas) que se vayan dejando entre un texto y otro.

Por lo tanto tenemos opciones de generar nuevas agrupaciones, dependiendo de las necesidades de cada candidato.

Para descargar el archivo de la portada generada con los códigos empleados pulsa aqui.

jueves, 3 de septiembre de 2015

Portada de tesis de la Universidad Veracruzana en LaTeX 1 de 2.

Si estas por escribir tu trabajo recepcional, ya sea tesis, tesina o cualquier otra modalidad, en esta entrada te muestro como generar la portada, y aunque hago referencia específica a la Universidad Veracruzana, a cualquier persona seguramente le puede servir de guía, para elaborar una portada acorde a tus necesidades.

En primer lugar debemos dejar claro que en LaTeX hay muchos caminos que podemos tomar para obtener lo que deseamos. Una forma sencilla, aunque poco elegante para agregarle la portada a nuestro trabajo es elaborando la portada en otro editor de texto como Word, y guardándola con extensión .pdf, posteriormente sólo tendríamos que agregar las siguientes lineas de comando en LaTeX:


\documentclass[a4paper,openany,12pt]{book}
\usepackage{pdfpages}                      

\begin{document}
\includepdf[pages={1}]{figuras/portada.pdf}

% Resto de la tesis

\end{document}

Como se aprecia, sólo debemos cargar el paquete "pdfpages" en el preámbulo e incluir el comando que se indica después de \begin{document}. Con "pages={1}", le indicamos a LaTeX que número de página queremos incluir del archivo .pdf, en este caso "figuras" es la carpeta en donde se tiene guardada la portada desntro del mismo directorio de trabajo de LaTeX, en caso de que la imagen estuviera en mismo directorio de trabajo que nuestro archivo .tex, sólo deberíamos poner entre las llaves portada.pdf, o cualquiera que fuera el nombre.

En la siguiente entrada, mostraré como elaborar la portada directamente en LaTeX.