El presente taller tiene como finalidad afianzar lo aprendido en clase y que usted realice un primer análisis exploratorio de datos con la información disponible en algunas librerias de R que se mencionarán más adelante, dentro del texto.
La primera librería que se usará tiene por nombre Mean-Parametrized Conway-Maxwell Poisson (COM-Poisson) Regression https://cran.r-project.org/web/packages/mpcmp/mpcmp.pdf; se carga mediante la siguiente instrucción.
library(mpcmp)
Los datos a ser usados pertenecen a esta librería y corresponden a datos sobre asistencia escolar para varios programas académicos, con información de hombres y mujeres atendiendo al High School en los Estados Unidos, para mayor información visite la página http://www.ats.ucla.edu/stat/stata/dae/nb_data.dta
data("attendance")
Algo muy necesario cuando se trabaja con bases de datos es enfrentarse a cómo puede guardarse una base de datos, una vez se ha trabajado con ella; R permite guardarla mediante la siguiente instrucción que permitirá poder grabaral en un archivo de texto plano con extensión .csv o delimitado por comas (el delimitador puede ser coma, punto y coma, o backslash o backslash).
write.csv(attendance,"attendance.csv", row.names = FALSE, sep=";")
## Warning in write.csv(attendance, "attendance.csv", row.names = FALSE, sep =
## ";"): attempt to set 'sep' ignored
El analísis univariante proporciona una serie de herramientas para describir, tabular, representar y sacar gráficos de una variable de la manera más útil y eficaz pobible a fin de obtener información relevante.
La base de datos a analizar da cuenta de información con respecto al número de días de ausencia a la escuala secundaria en USA. Se cuenta con un marco de datos con 314 observaciones (estudiantes hombres y mujeres) y 5 variables; puede consultar también el manual de usuario de la libreria mpcmp para mayor información http://finzi.psych.upenn.edu/library/mpcmp/html/attendance.html
Las variables son las siguientes:
id: Identificador
gender: género
math: puntaje matemático estandarizado de 100
daysabs: número de días ausentes de la escuela secundaria
prog: programa académico (“General”, “Académico” y “Profesional”)
Recoge las diferentes observaciones realizadas sobre una determinada característica. Dentro de la base de datos en cuestíon encontrara los datos para todos los individuos dentro del estudio.
Una buena práctica inicial es realizar una visualización previa de los datos para darse una idea de que tipo de datos son, si hay datos faltantes, si hay datos extremos o muy poco frecuentes. Con este fin la siguientre intrucción muestra por defecto los seis primeros registros, puede intentar mediante la misma intrucción mas registros
head(attendance, n=6)
También es posible ver los últimos registros mediante la instrucción tail()
tail(attendance, n=10)
Variable que sin medir directamente una caracteristica, aproxima a ella de una manera indirecta, recogiendo informacion que se relaciona con la que se quiere obtener obtener.
Con miras a construir un indicador, muy básico, se hará uso de la librería tidyverse que corresponde a la integración de varios paquetes para visualizar datos; entre otras cosas graficarlos oa hacer consultas rápidas y eficientes sobre ellos https://www.tidyverse.org/packages.
library(tidyverse)
## ── Attaching packages ─────────────────────────────── tidyverse 1.3.0 ──
## ✓ ggplot2 3.3.2 ✓ purrr 0.3.4
## ✓ tibble 3.0.2 ✓ dplyr 1.0.0
## ✓ tidyr 1.1.0 ✓ stringr 1.4.0
## ✓ readr 1.3.1 ✓ forcats 0.5.0
## ── Conflicts ────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
Un indicador puede ser un porcentaje o frecuencia realtiva, por ejemplo; la proporción de personas por tipo de programa y género.
attendance %>%
count(prog, gender) %>%
mutate(prop = prop.table(n))
Existen dos tipologías de variables, basańdose en la forma en que han sido tomados los datos https://es.sawakinome.com/articles/economics/difference-between-time-series-and-cross-sectional-data.html.
Son aquellas que se observan en varios periodos de tiempo consecutivos. Considerando que la base inicial no posee datos temporales al tratarse de una base de datos que tiene información acerca de las ausencias pero no las fechas en las ausencias.
Se cargarán las librerías TSsdmx y tfplot, la primera para acceder a los datos y la segunda para graficarlos, para mayor información puede visitar el manual del usuario de cada una de estas librerías de R https://www.rdocumentation.org/packages/TSsdmx/versions/2016.8-1 y https://www.rdocumentation.org/packages/tfplot/versions/2015.12-1/topics/tfplot
library(TSsdmx)
## Loading required package: TSdbi
library(tfplot)
## Loading required package: tframe
##
## Attaching package: 'tframe'
## The following object is masked from 'package:purrr':
##
## splice
Datos del Producto Interno Bruto PIB (o GPD) para Canada, mensuales; fuente: http://www.oecd.org para lo anterior
La línea de código a continuación muestra como conectarse y acceder a los datos; y a renglón seguido como graficar una serie de tiempo (datos medidos en distintos periodos de tiempo), incluyendo tanto título como subtítulo y una etiqueta para el eje vertical.
oecd <- TSconnect("sdmx", dbname="OECD")
x <- TSget('QNA.CAN.B1_GE.CARSA.Q', oecd)
tfplot(x, title="Canada: PIB - componente del gasto",
subtitle="Cuentas nacionales trimestrales, moneda nacional, precios corrientes",
ylab="Dolares (CAN)")
Este gráfico representa la evolución del PIB para Canada, es de notar que aun cuando es un error unir las líneas de puntos, es comunmente hecho, y ya se da por sentado que se permite; el punto algido de la discusión radica en que en realidad los datos no han sido medidos continuamente sino en cada mes, debería en ese orden de ideas graficarse puntos para cada mes representando el dato tomado.
Son aquellas que se observan en un mismo momento del tiempo para distintos individuos.
Regresando a la base de datos de ausencias se procede a graficar las faltas a la escuela según género y tipo de programa para ello se hará uso de un gráfico circular, de pastel o de sectores https://www.statmethods.net/graphs/pie.html
ggplot(attendance, aes(x=prog, y=daysabs, fill=gender)) + geom_bar(stat="identity") + coord_polar("y", start=0)
Del anterior gŕafico puede apreciarse que en general son más mujeres que hombres quienes se ausentan de la escuela; la mayor diferencia se observa en el programa académico más que en cualquiera de los otros.
Pueden tomar valores numericos. Pueden ser discretas o continuas. Como ilustración de una variable cuantitativa continua se tiene el puntaje en matemáticas, una variable que en teoría puede tomar cualquier valor entre cero y cien; el grafico seleccionado para illustrar es un histograma https://rpubs.com/stephenmoore56/135126.
ggplot(attendance, aes(x=math, color=gender)) +
geom_histogram(fill="white", alpha=0.5, position="identity")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
El anterior gráfico correponde a un histograma; una visualización para datos continuos ampliamente usada en la práctica para analizar la distribución de los datos; por ejemplo podemos ver que los datos más frecuentes tienden a ubicarse en los punuajes intermedios, y existe una leve tendneia a que las mujeres obtengan puntajes más altos que los hombres, lo cual es muy notorio en el extremo superior de las puntuaciones, aunque los puntajes están bastante mexclados y distribuidos entre ambos géneros.
Pueden tomar un numero finito o infinito numerable de valores. Como ilustración de un gráfico para representar la distribución de una variable discreta se tiene el diabrama de barras (que puede ser tanto horizontal como vertical) https://rpubs.com/SameerMathur/Bar-Plots; en el siguiente gráfico se ilustra la distribución de los estudiantes según el tipo de programa al que asisten, notando que la mayor parte asisten a un programa académico, seguido de cerca por quienes asisten a uno vocacional y que una pequeña proporciòn comparada con estas dos asiste a un progrma del tipo general.
ggplot(data=attendance, aes(x=prog, y=math)) +
geom_bar(stat="identity", color="blue", fill="white")
Pueden tomar un numero infinito no numerable de valores. Otra forma de visualizar la distribución de una variable aleatoria es mediante el conocido diagrama de caja y bigotes o boxplot https://rpubs.com/CamilleFairbourn/307800 que básicamente dibuja la distribución de una bariable aleatoria mediante sus cuantiles primero, segundo o mediana y tercero; más unos bigotes que dan cuenta de los datos atípicos de la variable aleatoria, muy útila a la hora de identificar puntos a tener en cuenta o posibles errores de medición.
ggplot(data = attendance, aes(x=factor(gender),y=math)) + geom_boxplot(aes(fill=factor(gender))) + theme_bw()
Al interrior de las cajas (en colores) se encuentra el cincuenta por ciento de los valores centrales o intermedios que toma la variable, mientras que los bigotes (las líneas que se extienden) son los denominados bigotes que tienen una extensión de uno punto cinco veces la longitud vertical de las cajas (diferencia entre el primer y tercer cuartíl) o su valor más extremo que se encuentre dentro de esta distancia; los puntos que queden por fuera son considerados puntos atípicos.
Representan caracteristicas o categorias que se corresponden con una cualidad o atributo. Pueden ser del tipo: nominal u ordinal. A continuación un gráfico de barras que permite comparar la distribución de estudiantes según género y programa al cual se encuentran inscritos.
ggplot(data=attendance, aes(x=gender, y=prog, fill=prog)) + geom_bar(stat="identity", position = "dodge")
Se observa que según genero las distribución de alumnos es muy similar entre los diferentes programas académicos ofrecidos.
Son aquellas que únicamente ponen nombre a una característica. Exisiten diferentes tipos de gráficas para representar estas variables como se ha visto; sin embargo, existen algunos gráficos interactivos bivariados que permiten apreciar la distribución conjunta de dos o más variables al tiempo, como si se tratara de una tabla de doble entrada, para esto se hará uso de dos librerías: TSdbi https://rdrr.io/rforge/TSdbi/src/R/TSdbi.R y ggmosaic https://www.rdocumentation.org/packages/ggmosaic/versions/0.2.0; en los enlaces documentación adicional al respecto.
library(TSdbi)
library(ggmosaic)
En este punto en algunas ocasiones se dispone de diferentes versiones de lo paquetes y dependiendo de la versión que se tenga instalada en el paquete de escritorio puede necesitarse una versiòn diferente a la instalada o incluso actualizar la que se tiene; las instrucciones a continuación permiten ver la versión instalada de los paquetes anteriormente cargados.
packageDescription("ggmosaic")$Version
## [1] "0.2.0"
#> [1] "0.2.0"
packageDescription("ggmosaic")$RemoteRef
## NULL
#> [1] "ggplot_3.3.0-scales/fix"
packageDescription("ggplot2")$Version
## [1] "3.3.2"
#> [1] "3.3.0"
La librería plotly permite realizar gráficos interactivos que permiten ver mayor información de forma interactiva una vez son programados; muy útiles a la hora de hacer presentaciones ya que permiten poner bastante información que puede ser presentada de forma muy útil y ordenada https://plotly-r.com/.
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
A fin de ilustrar su uso se realiza una gráfica que compara la distribución de los estudiates por género según programa académico al que se han inscrito; si se pasa el puntero del ratón es posible visualizar la distribución de frecuencias o los datos graficados.
attendance <- mutate(attendance, gender = fct_rev(gender), prog = fct_rev(prog))
p <- ggplot(data=attendance) +
ggmosaic::geom_mosaic(aes(x = product(gender), fill = prog)) +
ggplot2::labs(x = "Género", y = "Programa",
title = "Programa según género")
ggplotly(p)
Son aquellas que llevan implicito un ordenamiento entre las categorias o valores que pueden tomar.
library(gtools)
attendance$MathQuarter<-quantcut(attendance$math, 4)
q <- ggplot(data=attendance) +
ggmosaic::geom_mosaic(aes(x = product(prog), fill = MathQuarter)) +
ggplot2::labs(x = "Programa", y = "Puntaje de matemáticas en cuartíles",
title = "Puntaje en matemáticas en cuartíles según programa")
ggplotly(q)
Del anterio gráfico se puede ver que los más altos puntajes se encuentran entre quienes asistren al programa vocacional y general, siendo menor la proporción de personas que los obtienen en el programa académico. También se puede apreciar como los inscritos al programa general son menos en relación con los otros dos programas, y que los puntajes intermedios son más frecuentes entre quienes asisten al programa vocacional en relación con los otros dos programas.
En este punto se elaborarán algunas tablas de frecuencias absolutas y relativas con el fin de ilustrar el uso de las mismas en el análisis estadístico de los datos. Para lo anterior se hará uso de programación relativa al paquete dplyr https://mauricioanderson.com/curso-r-dplyr/ que está dentro del grupo de paquetes de la librería didyverse https://riptutorial.com/es/r/example/25722/tidyverse--una-vision-general
Es el registro de todos los posibles valores de la variable, junto con sus frecuencias asociadas. A continuación se darán algunos ejemplos.
El primero hace alusión a una tabla de frecuencias de acuerdo al programa al que asiste el estudiante; encontrando que la mayoría asiste al académico un poco más de la mitad.
attendance %>%
group_by(prog) %>%
summarise(n = n(), .groups = 'drop') %>%
mutate(freq = n / sum(n))
Es el numero de veces que se repite uno de los valores de una variable. Para ilustrar el concepto de frecuencia abosluta se realita una tabla de frecuencias según el género del estudiante; encontrándose que la distribución es muy pareja entre hombres y mujeres con una diferencia de cuatro mujeres por encima del de los hombres que corresponde a 154.
attendance %>%
group_by(gender) %>%
summarise(n = n(), .groups = 'drop') %>%
mutate(freq = n / sum(n))
Es la frecuencia en cada categoria de la variable dividida por el total de observaciones. Con relación a la frecuencia relativa es de notar que su suma es igual a uno (si está en porcentajes al cien porciento). Se encuentra: para este caso, que según el programa y el género de los estudiantes el mayor porcentaje corresponde a hombres en el programa académico, seguido muy de cerca de mujeres en el mismo programa; mientras que en las proporciones más pequeñas se encuentran los estudiantes inscritos en el programa general hombres seguido muy de cerca de las mujeres en el mismo programa.
attendance %>%
group_by(prog, gender) %>%
summarise(n = n(), .groups = 'drop') %>%
mutate(freq = n / sum(n))
Es el número de observaciones que toman una categoria igual o inferior a la considerada. Con relación a las frecuencias acumuladas como es lógico, la suma de las frecuencias absolutas es igual al número de elementos; en este caso 314 que corresponde al número total de estudiantes dentro del estudio.
attendance %>%
group_by(prog) %>%
summarise(n = n(), .groups = 'drop') %>%
mutate(cum_freq = cumsum(n))
Corresponde a los valores acumulados de las frecuencias relativas. en relación a las frecuencias relativas y como se mencionó anteriormente; la suma acumulada de dichas frecuencias es igual a la unidad.
attendance %>%
group_by(prog, gender) %>%
summarise(n = n(), .groups = 'drop') %>%
mutate(freq = n / sum(n)) %>%
mutate(cum_freq_rel = cumsum(freq))