Guía de variables

Taller de Análsis en RMarkdown // UNAM 2025-1

Guía para el manejo de variables de una fuente de datos

Este documento sirve como apoyo para el taller de Análisis en R y presentaciones en Markdown impartido en la Facultad de Ciencias Políticas y Sociales de la UNAM [CU] en el semestre 2025-1. Dicho taller tiene como objetivo facilitar la comprensión de la analítica de datos de los diversos proyectos de investigación a la par en que se adquieren herramientas para la documentación de los procesos de análisis.

Para el cumplimento de los objetivos planteados se realiza una breve presentación de los tipos de variables. Después de ello se presentan las librerías empleadas, señalando cuál es su empleabilidad en el trabajo; posteriormente se muestra lo referente al contenido de la tabla seleccionada para este trabajo; se identifica y define el tipo de datos que es representado por cada columna. Si alguna variable no corresponde con el tipo de dato a manejar, las variables no correspondientes a su tipo de datos son modificadas según los objetivos particulares. Se presentan, además, algunas formas de resumen del contenido de la tabla según lo convenido para informes y otras documentaciones.

Tipos de variables

Como se mencionó en el apartado anterior, este documento se centra en la identificación y modificación de los tipos de variables. Es por ello que se realiza una mención de las clasificaciones más utilizadas para los fines establecidos. La clasificación más sencilla y de menor profundidad es aquella en la que se identifican dos tipos de variables según la información contenida; por datos cualitativos o cuantitativos se distinguen los dos grandes grupos de variables de la cual se dice que un dato cuantitativo es aquel que ofrece una medición numérica o escalar, mientras que un dato cualitativo es aquel que refiere un atributo no medible, pero sí distinguible, del objeto de estudio. En la tabla 1 muestra esta primera categorización de variables, añadiendo una división del tipo o sub-categoría de variables cualitativas; de éstas pueden leerse las variables nominales, que se refieren a aquellas que son distinguibles simplemente por sus nombres, sin asignárseles una mayor o menor relevancia entre sus “niveles”1; y las ordinales, las cuales identifican una jerarquía u ordenamiento inherente a los niveles de la variable.

Tabla 1. Clasificación mínima de variables.
Cualitativas Cuantitativas
Nominales
Ordinales

Es posible identificar categorías propias de las variables cuantitativas como las continuas y las discretas. Estas divisiones son fácilmente equiparables con las categorías manejadas en el lenguaje R para tipos de datos puntuales. Ello fue abordado durante el curso y no se profundizará más en el presente documento.


Librerías

En este apartado se muestran las librerías utilizadas para el desarrollo de este tema. En caso de no ser reconocida alguna de las paqueterías/librerías a utilizar, es necesario instalarlas mediante el comando (o función) install.packages("Nombre_de_la_paquetería"). Posteriormente a ello se procede con la ejecución de la librería en el entorno de desarrollo del proyecto, como se muestra en el recuadro siguiente:

library(readr) # Posible implementar otras, como readxl, según la extensión del archivo.
library(dplyr)
library(janitor)
library(ggplot2)

library(citation)

La función library() con el nombre de la librería dentro de los paréntesis hace un llamado a las funciones de la paquetería nombrada. Es decir que todo trabajo y desarrollo técnico y de investigación es colaborativo, desde la implementación de las técnicas en el análisis, hasta el uso de cada una de las herramientas sean éstas el lenguaje R (R Core Team, 2022), el entorno de desarrollo RStudio (Posit team, 2024) y las librerías2,3.

Las librerías empleadas tienen diferentes funciones dentro del proyecto. Se enlistan a continuación las librerías y las funciones respectivas:

  • readr: Es una librería que contiene la función principal para leer archivos con la extensión .csv (valores separados por coma, por sus siglas en inglés). Como se menciona en el recuadro, es posible utilizar otras librerías para leer archivos con la extensión de hojas de cálculo, de archivos de Stata, de SPSS, entre otros (Wickham et al., 2024).

  • dplyr: Facilita la manipulación del contenido de las tablas mediante una serie de funciones diseñadas para ello. Así mismo, proporciona el diseño de algoritmos más popular en R (por tuberías o pipes) (Wickham et al., 2023).

  • janitor: Provee funciones útiles en la exploración de datos y en la limpieza del contenido de las tablas, entre otras (Firke, 2023).

  • ggplot2: Contiene funciones específicas para el diseño de gráficos. Es uno de los paquetes más populares por la fuerte componente estética que brinda (Wickham, 2016).

  • citation: Es una librería de consulta de la información para citar diversas paqueterías de R, así como sus versiones (Dietrich & Leoncio, 2023).


Tablas y contenido

En esta sección se realiza la carga o llamada de datos al entorno de trabajo, se visualizan las funciones para una salida parcial de la tabla o tablas importadas, así como la revisión y modificación del contenido de las variables. Para esta presentación se utiliza una fuente de datos del Instituto Nacional de Estadística y Geografía (INEGI) consultada a partir de la pestaña de los temas que esta institución proporciona. De manera puntual, los registros utilizados en esta sección pertenecen al *Subsistema de Información Económica*, de los *Programas de Información*, los datos de Finanzas Públicas Estatales y Municipales (EFIPEM)

Toda la información recaudada y proporcionada por el INEGI correspondiente a este conjunto de datos puede ser consultada a través del este enlace. Documentación, meta-datos, antecedentes, objetivos, procedimientos, coberturas, entre otras cuestiones pueden ser consultadas a través de la página referida en el enlace (*en el caso de consultarse encuestas oficiales, éstos proporcionan los diseños metodológicos de levantamiento de las entrevistas*). Para este proyecto se realiza la consulta a las 34 tablas de ingresos y egresos nacionales, por Entidad Federativa, para el periodo 1989-2023 proporcionados por la institución.

Importación de datos

La función a emplear, de la paquetería readr es read_csv(). Dicha función suele ser empleada tras la descarga de las tablas al ordenador, con la cual se tiene una dirección de almacenamiento que será referida como argumento para la lectura del archivo; sin embargo, también es posible asignar una ruta de acceso remoto por medio del enlace de la fuente de datos. Debido a que se requiere conservar y manipular las tablas importadas, la función está asignada a un objeto distinguible para cada tabla importada. El siguiente recuadro muestra el ejemplo para la importación y almacenamiento de las tablas en los objetos nombrados estatalxxxx con la función e indicación de la ruta de acceso correspondiente (dirección).

estatal2023 = read_csv("La_direccion_de_almacenamiento_del_archivo_con_la_extension.csv")
estatal2022 = read_csv("direccion_2.csv")
estatal2021 = read_csv("direccion_3.csv")
estatal2020 = read_csv("direccion_4.csv")
estatal2019 = read_csv("direccion_5.csv")
estatal2018 = read_csv("direccion_6.csv")
estatal2017 = read_csv("direccion_7.csv")
# ...
estatal1989 = read_csv("direccion_i.csv")

Una vez importados de manera efectiva se podrá observar el objeto o los objetos asignados en la sección “ambiente” de RStudio, así como la espera en la consola por la siguiente tarea. Al costado derecho de los objetos se podrá ver el número de observaciones (obs.) y de variables en cada objeto (tablas, en este caso). El símbolo del costado izquierdo en forma de “play” en un círculo azul permitirá abrir y visualizar un resumen de las variables del la tabla; mientras que el hacer clic sobre el objeto facilitará la función View(Objeto) en la consola.

Revisión del contenido

Una vez importadas las tablas al entorno de trabajo es necesario verificar los contenidos. Ello permitirá implementar funciones específicas y correctas para cada tipo de variable, corregir errores o implementar otras modificaciones provechosas para el proyecto. Como se mencionó en el apartado de librerías, dplyr contiene funciones útiles para este propósito.

Para ejemplificar el uso de las funciones head(), tail() y sample(), se aplicarán en 4 tablas distintas; sin embargo, es importante revisar cada una de las tablas importadas para comprender la forma en que se operará con su contenido. Dichas funciones permiten visualizar partes correspondientes de las tablas. Sus argumentos e implementaciones son muy similares entre; así, los argumentos en la función son: el objeto sobre el cuál operará la función y el número de observaciones que se mostrará en la salida, se parados por una coma.

head(estatal1989,3)
PROD_EST COBERTURA ANIO ID_ENTIDAD TEMA CATEGORIA DESCRIPCION_CATEGORIA VALOR ESTATUS
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 1989-01-01 01 Egresos Tema Total de egresos 188216767 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 1989-01-01 01 Egresos Capítulo Servicios personales 23236402 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 1989-01-01 01 Egresos Concepto Remuneraciones al personal 12946244 Cifras Definitivas

La función head(Objeto, i) proporciona una salida en la cual se observan las primeras i observaciones de la tabla (objeto) referida.

tail(estatal2021,3)
PROD_EST COBERTURA ANIO ID_ENTIDAD TEMA CATEGORIA DESCRIPCION_CATEGORIA VALOR ESTATUS
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2021-01-01 32 Ingresos Subpartida Genérica Convenio para asistencia social 23068696 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2021-01-01 32 Ingresos Partida Genérica Recursos federales diversos 140742719 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2021-01-01 32 Ingresos Subpartida Genérica Otros recursos federales 140742719 Cifras Definitivas

La función tail(Objeto, i) muestra las últimas i observaciones de la tabla.

sample_n(estatal2022,3)
PROD_EST COBERTURA ANIO ID_ENTIDAD TEMA CATEGORIA DESCRIPCION_CATEGORIA VALOR ESTATUS
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2022-01-01 28 Egresos Subpartida Genérica Materiales, accesorios y suministros de laboratorio 8249893 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2022-01-01 30 Ingresos Concepto Impuestos sobre el Patrimonio 110114288 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2022-01-01 24 Egresos Partida Genérica Servicios de acceso de Internet, redes y procesamiento de información 364884 Cifras Definitivas

La función sample_n(Objeto, i) da por salida otra tabla con un muestreo “aleatorio” de las i observaciones referidas como argumento. Otra forma de implementar cualquiera de las tres funciones anteriores es por medio de las tuberías (o pipes en inglés) [%/%] que forman parte de la librería dplyr; en cuyo caso, la sintaxis es colocar en primer lugar el objeto al cuál será implementada la función posterior a la tubería.

estatal2023 %>% 
  sample_n(3)
PROD_EST COBERTURA ANIO ID_ENTIDAD TEMA CATEGORIA DESCRIPCION_CATEGORIA VALOR ESTATUS
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2023-01-01 28 Egresos Concepto Combustibles, lubricantes y aditivos 155545424 Cifras Preliminares
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2023-01-01 06 Egresos Partida Genérica Prestaciones contractuales 244998996 Cifras Preliminares
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2023-01-01 29 Ingresos Subpartida Genérica Cultura 2747422 Cifras Preliminares

Se puede observar que, en estos casos, los objetos no fueron almacenados en otros objetos. Es posible realizarlo mediante la asignación de un nombre, sin embargo no representa una ventaja ya que no se realizará ninguna otra acción con estas fracciones de tablas.


Otra manera complementaria de analizar el contenido de las tablas es identificar el tipo de datos almacenados por variable. Para ello, las funciones summary(), str(), entre otras definidas en otras paqueterías, son comúnmente utilizadas

La función str() puede aplicarse a la tabla completa (nombrando el objeto asignado) con la limitación de obtener un número limitado de definiciones y características de las variables. Ello puede ser solucionado mediante la asignación puntual de cada variable, sustituyendo Objeto por Objeto$Variable como el argumento de aplicación de la función. Ésto no resulta muy práctico cuando el número de variables a trabajar es grande.

Por otro lado, la función summary() devuelve listados de las variables contenidas. En dichos listados se muestran las características y/o resúmenes de las variables de la tabla asignada. A continuación se muestra esta función aplicada a dos tablas: estatal2020 y estatal2021.

estatal2020 %>% 
  summary()
PROD_EST COBERTURA ANIO ID_ENTIDAD TEMA CATEGORIA DESCRIPCION_CATEGORIA VALOR ESTATUS
Length:10374 Length:10374 Min. :2023-01-01 Length:10374 Length:10374 Length:10374 Length:10374 Min. :1.001e+03 Length:10374
Class :character Class :character 1st Qu.:2023-01-01 Class :character Class :character Class :character Class :character 1st Qu.:5.374e+06 Class :character
Mode :character Mode :character Median :2023-01-01 Mode :character Mode :character Mode :character Mode :character Median :6.476e+07 Mode :character
NA NA Mean :2023-01-01 NA NA NA NA Mean :2.361e+09 NA
NA NA 3rd Qu.:2023-01-01 NA NA NA NA 3rd Qu.:5.876e+08 NA
NA NA Max. :2023-01-01 NA NA NA NA Max. :3.808e+11 NA
estatal2020 %>% 
  summary()
PROD_EST COBERTURA ANIO ID_ENTIDAD TEMA CATEGORIA DESCRIPCION_CATEGORIA VALOR ESTATUS
Length:10374 Length:10374 Min. :2023-01-01 Length:10374 Length:10374 Length:10374 Length:10374 Min. :1.001e+03 Length:10374
Class :character Class :character 1st Qu.:2023-01-01 Class :character Class :character Class :character Class :character 1st Qu.:5.374e+06 Class :character
Mode :character Mode :character Median :2023-01-01 Mode :character Mode :character Mode :character Mode :character Median :6.476e+07 Mode :character
NA NA Mean :2023-01-01 NA NA NA NA Mean :2.361e+09 NA
NA NA 3rd Qu.:2023-01-01 NA NA NA NA 3rd Qu.:5.876e+08 NA
NA NA Max. :2023-01-01 NA NA NA NA Max. :3.808e+11 NA

Al observar las salidas de las fuciones implementadas se puede notar que tenemos una predominancia de variables con el formato character. Ello indica que dichas variables almacenan datos en formato alfanumérico; mientras que las variables que exhiben Mínimos, Máximos, Medianas, Medias y Cuartiles son variables cuantitativas. Es, por tanto, conveniente identificar la conveniencia al utilizar las primeras funciones de visualización (head(), tail() y sample_n()) donde se aprecia que el contenido de dichas variables son, probablemente, factores y requerirán la modificación pertinente.

Modificación del contenido

De las tablas visualizadas anteriormente, así como de la exploración de las 30 tablas restantes (que no son exhibidos en este documento) se identificó que las tablas comparten una estructura similar. Así mismo, el contenido de requiere el mismo tratamiento y que, además, la disposición de las columnas y la información que en ellas se registra tiene un orden común. Esta coincidencia es casi exclusiva para el manejo de estas tablas y realizar la unión de su contenido será provechoso para simplificar el trabajo subsecuente.; es decir, trabajar con el contenido de una única tabla, en vez de las 34 facilitará el procesamiento posterior del contenido.

De acuerdo con la salida del código de la función que se muestra en el cuadro siguiente, la suma de las filas de todas las tablas es de 238592. Ello indica que la tabla que agrupe todas las observaciones de las tablas deberá tener una dimensión de 238592 por 9, es decir, 238592 observaciones con 9 columnas.

sum(nrow(estatal1989),nrow(estatal1990),nrow(estatal1991),nrow(estatal1992),
    nrow(estatal1993),nrow(estatal1994),nrow(estatal1995),nrow(estatal1996),
    nrow(estatal1997),nrow(estatal1998),nrow(estatal1999),nrow(estatal2000),
    nrow(estatal2001),nrow(estatal2002),nrow(estatal2003),nrow(estatal2004),
    nrow(estatal2005),nrow(estatal2006),nrow(estatal2007),nrow(estatal2008),
    nrow(estatal2009),nrow(estatal2010),nrow(estatal2011),nrow(estatal2012),
    nrow(estatal2013),nrow(estatal2014),nrow(estatal2015),nrow(estatal2016),
    nrow(estatal2017),nrow(estatal2018),nrow(estatal2019),nrow(estatal2020),
    nrow(estatal2021),nrow(estatal2022),nrow(estatal2023))
## [1] 238592

Para unión de las tablas de este caso particular se utiliza la función rbind(). Esta función está incorporada en R, directamente, y permite unir las filas de las tablas en una único objeto. Por otro lado, la función dim() da por salida la dimensión del objeto en el argumento.

estatal_89_23 = 
  rbind(estatal1989,estatal1990,estatal1991,estatal1992,
        estatal1993,estatal1994,estatal1995,estatal1996,
        estatal1997,estatal1998,estatal1999,estatal2000,
        estatal2001,estatal2002,estatal2003,estatal2004,
        estatal2005,estatal2006,estatal2007,estatal2008,
        estatal2009,estatal2010,estatal2011,estatal2012,
        estatal2013,estatal2014,estatal2015,estatal2016,
        estatal2017,estatal2018,estatal2019,estatal2020,
        estatal2021,estatal2022,estatal2023)

dim(estatal_89_23)
## [1] 238592      9

De tal manera, se tiene así una confirmación por correspondencia de las dimensiones señaladas anteriormente.

Según lo visto en clase, para la transformación de las variables se implementará la función as.factor() para transformar las variables con contenido alfanumérico a factores. Esta es otra función predefinida en R; sin embargo existen paqueterías alternas que realizan la misma función. Así mismo, según sea conveniente, también se pueden transformar las variables con códigos similares como as.character(), as.numeric(), as.double(), as.integer(), as.data.frame(), as.table(), entre otros. Sin embargo, antes de proceder con su uso, se empleará la función clean_names() aplicado en la tabla y se guardará sobre el mismo objeto para reescribir la información modificada como se muestra en el siguiente recuadro.

estatal_89_23 = estatal_89_23 %>% 
                      clean_names()

Al aplicar nuevamente una función para visualizar una fracción del contenido de la tabla como sample_n(), se observa que los nombres asignados a cada columna cambiaron en su totalidad a minúsculas, los espacios fueron sustituidos por guiones bajos y, en caso de haber caracteres de difícil interpretación, estos también son sustituidos o eliminados. Ello puede apreciarse en el siguiente recuadro y su salida gráfica.

estatal_89_23 %>% 
  sample_n(4)
prod_est cobertura anio id_entidad tema categoria descripcion_categoria valor estatus
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2022-01-01 03 Egresos Partida Genérica Otras prestaciones sociales y económicas 2343081 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2009-01-01 20 Ingresos Subpartida Genérica FA para el Fortalecimiento de los Municipios 1359399000 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2015-01-01 25 Egresos Partida Genérica Materiales para el registro e identificación de bienes y personas 153532610 Cifras Definitivas
Estadística de Finanzas Públicas Estatales y Municipales. Anual Estatal 2018-01-01 19 Ingresos Subpartida Genérica Diversos servicios de desarrollo y obras públicas 36152691 Cifras Definitivas

A partir de este punto se realizan las modificaciones a la tabla para posteriormente realizar una descripción más certera del contenido. Las variables identificadas a ser modificadas de tipo character a factor son:

  • prod_est

  • cobertura

  • id_entidad

  • tema

  • categoria

  • descripcion_categoria

  • estatus

En el siguiente recuadro se muestra una forma para realizar dichos cambios. No se debe olvidar que es necesario sobreescribir los cambios realizados (o implementarlos en nuevas variables) en el objeto para que las modificaciones puedan ser aprovechadas posteriormente.

estatal_89_23$prod_est = 
  estatal_89_23$prod_est %>% 
    as.factor()

estatal_89_23$cobertura = 
  estatal_89_23$cobertura %>% as.factor()

estatal_89_23$id_entidad = estatal_89_23$id_entidad %>% as.factor()

estatal_89_23$tema = estatal_89_23$tema %>% as.factor()

estatal_89_23$categoria = estatal_89_23$categoria %>% as.factor()

estatal_89_23$descripcion_categoria = estatal_89_23$descripcion_categoria %>% as.factor()

estatal_89_23$estatus = estatal_89_23$estatus %>% as.factor()

Para observar los cambios se refiere nuevamente la función summary() en la tabla modificada.

summary(estatal_89_23)
prod_est cobertura anio id_entidad tema categoria descripcion_categoria valor estatus
Estadística de Finanzas Públicas Estatales y Municipales. Anual:238592 Estatal:238592 Min. :1989-01-01 17 : 8558 Egresos :152739 Capítulo : 18412 Otras participaciones : 1991 Min. :1.000e+03 Cifras Definitivas :228218
NA NA 1st Qu.:2004-01-01 02 : 8465 Ingresos: 85853 Concepto : 49159 Otros servicios generales : 1882 1st Qu.:5.966e+06 Cifras Preliminares: 10374
NA NA Median :2012-01-01 16 : 8409 NA Partida Genérica :124734 Combustibles, lubricantes y aditivos : 1358 Median :4.949e+07 NA
NA NA Mean :2010-07-04 19 : 8402 NA Subpartida Genérica: 44117 Otras prestaciones sociales y económicas: 1302 Mean :1.304e+09 NA
NA NA 3rd Qu.:2018-01-01 26 : 8330 NA Tema : 2170 Derechos : 1096 3rd Qu.:3.481e+08 NA
NA NA Max. :2023-01-01 31 : 8235 NA NA Impuestos : 1085 Max. :3.808e+11 NA
NA NA NA (Other):188193 NA NA (Other) :229878 NA NA

En esta última tabla de resumen puede observarse un preconteo de las categorías de las variables modificadas. De tal manera, es posible inferir que es posible trabajar, de manera conjunta otras tablas proporcionadas por el Subsistema de Información Económica del INEGI, así como que, para este primer ejercicio, las primeras dos columnas, no serán útiles para ejercicios posteriores al tener un único tipo de registro.

Una última modificación posible es el cambio de los niveles mostrados en entidad ya que éstos se encuentran codificados y no en su forma explícita de la entidad correspondiente. Más adelante se verá la cómo realizar dicho cambio.

Tablas de resumen y gráficos

Es común que, en la presentación de resultados, se haga uso de medidas de resumen de la información. Dependiendo de dónde se vaya a realizar la publicación de los resultados (libros, presentaciones, artículos académicos, notas, reportajes, infografías, …) se puede recurrir a la presentación de las medidas de resumen dentro del texto, en tablas o en gráficos para la construcción (o el sustento) de un argumento o demostración. Es así que este apartado se basa en dichas necesidades para ejemplificar de qué manera se pueden presentar las medidas de resumen de la información de una tabla. Es prudente mencionar que, al plasmar una tabla, gráficos o esquemas, es conveniente realizar una explicación detallada del gráfico, la descripción de sus componentes y la interpretación que facilita el mismo.

Las medidas de resumen de la información mencionadas en el párrafo anterior hacen referencia a las medidas de tendencia central, medidas de dispersión y frecuencias. Medidas que generalizan el contenido o caracterizan conjuntamente por los atributos comunes. Estas medidas son dependientes del tipo de datos que sean referidos (cuantitativos o cualitativos) y posibilitarán el diseño común de tablas o gráficos con sus respectivas medidas de resumen.

Las librerías que se ocupan en esta sección son janitor y ggplot2. La primera, además de proporcionarnos funciones para reestructurar el contenido, nos brinda la función tabyl(); mientras que la segunda nos permitirá crear y configurar gráficos de acuerdo con nuestros gustos y necesidades. De esta función, como puede verse en la siguiente tabla:

estatal_89_23$estatus %>% 
  tabyl()
. n percent
Cifras Definitivas 228218 0.9565199
Cifras Preliminares 10374 0.0434801

Como se puede apreciar esta tabla sólo ofrece las frecuencias (absolutas y relativas) de los niveles presentes en la variable referenciada. Ello no es diferente si esta función es aplicada en variables cuantitativas o incluso en aquellas con un formato Date (fecha), por lo que es recomendable ser utilizado sólo para reportar resultados de variables cualitativas casi de manera exclusiva. Además, tabyl() proporciona argumentos y otras funciones relacionadas que permiten modificar la tabla o lo reflejado en ésta, como adorn_totals() que añade una fila, al final de la tabla, con la suma de los niveles de la variable referenciada. Un ejemplo de ello puede verse en la tabla siguiente:

estatal_89_23 %>% 
  tabyl(estatus) %>% 
  adorn_totals()
estatus n percent
Cifras Definitivas 228218 0.9565199
Cifras Preliminares 10374 0.0434801
Total 238592 1.0000000

Otras modificaciones para estas tablas puede ser consultado en este documento digital, en el cual se desglosa y explica las modificaciones para tablas de una y dos entradas. Las secciones 5.2 y subsecuentes, aquellas que llevan los nombres correspondientes, dan ejemplo y explicación de lo mencionado.

Como se indicó, las anteriores tablas únicamente dan cuenta de tablas de variables cualitativas. Una de las formas de obtención de información cuantitativa ya fue abordada anteriormente con la implementación de la función summary(). Las limitaciones de dicha función es la disposición de la información, la cual requiere otra función para una visualización con la estética de tabla, así como la visualización de datos que pueden ser de poco interés para las personas dedicadas a la investigación o quienes revisan los reportes.

Nótese que la función select() nos permite seleccionar con qué variables trabajar proporcionando como argumentos la lista de las variables cuantitativas.

estatal_89_23 %>% 
  select(anio,valor) %>% 
  summary() 

estatal_89_23 %>% 
  select_if(is.numeric) %>% 
  summary() 
anio valor
Min. :1989-01-01 Min. :1.000e+03
1st Qu.:2004-01-01 1st Qu.:5.966e+06
Median :2012-01-01 Median :4.949e+07
Mean :2010-07-04 Mean :1.304e+09
3rd Qu.:2018-01-01 3rd Qu.:3.481e+08
Max. :2023-01-01 Max. :3.808e+11

Un ejemplo de dos tablas más elaborada son las siguientes:

estatal_89_23 = estatal_89_23 %>% 
  mutate(
    log_valor = log10(valor))

estatal_89_23 %>%
  summarise(
    n = n(), 
    "%" = n()*100/238592,
    "Media arit." = mean(valor),
    Varianza = var(valor), 
    Desv.Est. = sd(valor))

estatal_89_23 %>%
  summarise(
    n = n(), 
    "%" = n()*100/238592,
    "Media arit." = mean(log_valor),
    Varianza = var(log_valor), 
    Desv.Est. = sd(log_valor))
n % Media arit. Varianza Desv.Est.
238592 100 1303716201 4.516291e+19 6720335666
n % Media arit. Varianza Desv.Est.
238592 100 7.603812 1.871285 1.367949

Como puede notarse, dichas tablas sólo desglosan un resumen calculado para una variable o, una determinación por columna. Cuando estas variables son compartidas, es posible realizar la unión de ambas filas con la función rbind(tabla1,tabla2). Nótese que sería necesario almacenar estas talas como objetos para poder relacionarlos dentro de la función previamente mencionada.

Un ejemplo de una tabla unida de dicha manera es la que se muestra a continuación; nótese que los valores plasmados son distintos a los de la tabla anterior.

var % Media arit. Media acot Mediana Moda Desv.Est. Asimetría Curtosis K-S Valor p
valor 100 1303716200.9 49488081.50 4.948808e+07 8719456.84 6.720336e+09 17.729 565.828 1.000 0
log(valor) 100 7.6 7.69 7.694501e+00 7.73 1.370000e+00 -0.392 0.151 0.999 0

Gráficos

A continuación se muestran algunos ejemplos de códigos útiles para representación gráfica de los datos analizados a través del paquete ggplot2. Estos gráficos fueron analizados y explicados en el taller. En otro momento se plasmará de manera escrita este tema.

estatal_89_23 %>% 
  ggplot() +
  aes(x = valor) +
  geom_histogram(bins = 100L, fill = "#070947") +
  labs(y = "n", title = "Histograma de \"valor\"") +
  ggthemes::theme_stata() +
  theme(
    axis.text.y = element_text(face = "italic"),
    legend.title = element_text(face = "bold",
    size = 17L)
  )

estatal_89_23 %>% 
  ggplot() +
  aes(x = valor) +
  geom_density(fill = "#659960") +
  labs(y = "n", title = "Diagrama de densidad de valor") +
  ggtech::theme_tech() +
  theme(
    axis.text.y = element_text(face = "italic"),
    legend.title = element_text(face = "bold",
    size = 12L)
  )

estatal_89_23 %>%
  filter(valor >= 500 & valor <= 100000000) %>%
  ggplot(aes(x = valor)) +  
  geom_density(fill = "#963293", alpha = 0.7) +  # Establece el color de relleno aquí
  labs(y = "n", title = "No facet") +
  ggtech::theme_tech() +  
  theme(legend.position = "none")

estatal_89_23 %>%
 filter(valor >= 500 & valor <= 200000000) %>%
 ggplot() +
  aes(x = valor, fill = estatus) +
  geom_density() +
  scale_fill_hue(direction = 1) +
  labs(y = "n", title = "Facet") +
  ggthemes::theme_economist() +
  theme(axis.text.y = element_text(face = "italic")) +
  facet_wrap(vars(estatus))

ggplot(estatal_89_23) +
  aes(x = id_entidad) +
  geom_bar(fill = "#864296") +
  labs(
    title = "Un histograma",
    subtitle = "Un subtítulo antifa",
    x = "Entidad",
    y = "Conteo (n)"
  ) +
  coord_flip() +
  theme_classic()

Una paquetería de gran utilidad para la exploración gráfica es GGally(Schloerke et al., 2024). Dicha paquetería contiene la función ggpairs() la cual da por salida una matriz de las variables, identificando automáticamente el tipo de datos referido y mostrando por salida una representación adecuada para el mismo. La diagonal de la matriz muestra representaciones univariadas de los datos, mientras que en las celdas de intersección de distintas columnas y filas muestra medidas o gráficos de dicho cruce de variables.

En el caso dela información presentada en este análisis de realizó el descarte de algunas variables. Dicho descarte se realizó debido a la poca información que aportaban las variables para el análisis.

library(GGally)
estat = estatal_89_23 %>% 
  dplyr::select(-prod_est,-cobertura,-id_entidad,
         -descripcion_categoria)

estat %>% ggpairs()

Mapas

Los mapas y los cartogramas son algunas de las salidas gráficas de mayor interés. Existen librerías específicas para el manejo de datos geográficos; sin embargo, para los objetivos del taller se hará solamente muestra de las representaciones con el paquete maps(Becker et al., 2023).

library(maps)
world = map_data("world")

ggplot(world, 
       aes(x = long, y = lat, group = group)) + 
  geom_polygon()

map("world",fill = TRUE)

map("world", fill=TRUE, col="#548762", xlim=c(-135,-75), ylim=c(14,33))
map()

map(wrap = c(0,360), fill = TRUE, col = 2) # pacific-centered map of the world

map('world', proj = 'bonne', param = 45) # Bonne equal-area projection of states

map("world", interior = FALSE)

map("world", interior = FALSE)
map("world", boundary = FALSE, lty = 2, add = TRUE)

map("world")
map.axes(cex.axis=0.8)

map("world", "Mexico")
map.cities(country = "Mexico", capitals = 1)

map("world", "Mexico")
map.cities(country = "Mexico", capitals = 0)

map("world", "Mexico")
map.scale()

map.text("world","Mexico")

# filled map showing Republican vote in 1900
# (figure 6 in the reference)
data(state, package = "datasets")
data(votes.repub)
state.to.map <- match.map("state", state.name)
x <- votes.repub[state.to.map, "1900"]
gray.colors <- function(n) gray(rev(0:(n - 1))/n)
color <- gray.colors(100)[floor(x)]
map("state", fill = TRUE, col = color); map("state", add = TRUE)

# compare to the example for match.map
data(state, package = "datasets")
data(votes.repub)
z = votes.repub[, "1900"]
m = map("state", fill = TRUE, plot = FALSE)
# use a small span to fill in, but not smooth, the data
# increase the resolution to get better results
fit = smooth.map(m, z, span = 1/100, merge = TRUE, ave = TRUE)
mat = tapply(fit$z, fit[1:2], mean)
gray.colors <- function(n) gray(rev(0:(n - 1))/n)
par(bg = "blue")
filled.contour(mat, color.palette = gray.colors, nlev = 32, asp = 1)

# another way to visualize:
image(mat, col = gray.colors(100))

# for a higher degree of smoothing:
# fit = smooth.map(m, z, merge = TRUE, ave = TRUE)
# interpolation, state averages are preserved:
# fit = smooth.map(m, z, merge = TRUE, ave = TRUE, type = "interp")
map('world', fill = TRUE, col = palette.colors())

map('state.carto', fill = TRUE, col = palette.colors())

map('world2', xlim = c(000, 350))
map.axes()

Referencias

Becker, O. S. code by R. A., Minka, A. R. Wilks. R. version by R. Brownrigg. E. by T. P., & Deckmyn., A. (2023). maps: Draw Geographical Maps. https://CRAN.R-project.org/package=maps
Dietrich, J. P., & Leoncio, W. (2023). citation: Software Citation Tools.
Firke, S. (2023). janitor: Simple Tools for Examining and Cleaning Dirty Data. https://CRAN.R-project.org/package=janitor
Posit team. (2024). RStudio: Integrated Development Environment for R. Posit Software, PBC. http://www.posit.co/
R Core Team. (2022). R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. https://www.R-project.org/
Schloerke, B., Cook, D., Larmarange, J., Briatte, F., Marbach, M., Thoen, E., Elberg, A., & Crowley, J. (2024). GGally: Extension to ’ggplot2’. https://CRAN.R-project.org/package=GGally
Wickham, H. (2016). ggplot2: Elegant Graphics for Data Analysis. https://ggplot2.tidyverse.org
Wickham, H., François, R., Henry, L., Müller, K., & Vaughan, D. (2023). dplyr: A Grammar of Data Manipulation. https://CRAN.R-project.org/package=dplyr
Wickham, H., Hester, J., & Bryan, J. (2024). readr: Read Rectangular Text Data. https://CRAN.R-project.org/package=readr

  1. Se le denominan niveles a las categorías del factor (para este caso variable cualitativa). Tema tratado en la clase del Taller.↩︎

  2. Es probable que se muestren mensajes y advertencias en el documento generado. Ello puede ser configurado según lo visto en clase si se desea “limpiar” el documento final para mejorar la presentación del mismo.↩︎

  3. Algunas librerías pueden enmascarar a otras o a las funciones de otras librerías, por lo cual es importante leer los mensajes y advertencias producidos al ejecutar los códigos para su llamado.↩︎