2  Introducción a la ciencia de datos

La primera habilidad que debes desarrollar es la de explorar los datos. El objetivo de este capítulo es presentar el flujo de trabajo de un científico de datos y las herramientas que se utilizan.

2.1 Búsqueda de datos

El primer paso es buscar los datos de acuerdo con el problema que se quiere resolver. En este paso, se busca entender la estructura de los datos, la cantidad de datos, la calidad de los datos, etc.

En esta parte es fundamental preguntarse “¿Cuál es el objetivo que quiero alcanzar con estos datos?”. Por eso, antes de buscar los datos, es importante clarificar el objetivo del proyecto.

Podemos identificar algunos pasos para clarificar este objetivo:

  1. Definición de la idea.
  2. Conceptualización de la idea.
  3. Identificación de tensiones.
  4. Reformulación de la idea en modo de pregunta.
  5. Argumentación de la pregunta.
  6. Argumentación a través de datos.

Las instrucciones detalladas de cada uno de estos pasos se darán en la Bitácora 1. Por ahora, nos enfocaremos en la búsqueda de datos. Para esto se pueden utilizar los siguientes recursos:

El tipo de datos que se pueden encontrar en estos sitios son:

Encuestas

Pueden ser útil para responder preguntas concretas. Se tiene que tener mucho cuidado con el sesgo en las preguntas. Por ejemplo: Encuestar personas de solo un cantón para responder preguntas nacionales o encuestar personas con ciertas características particulares (e.g., encuestas telefónicas). Otra fuente de sesgo son las preguntas tendenciosas, e.g., ¿Está usted de acuerdo que X marca de helado tenga tan mal sabor?

Experimentales

La idea es recolectar y medir información que responda a ciertas preguntas especificas. En estos casos se tiene que tener cuidado con el sesgo que se pueda introducir a los experimentos, especialmente en pruebas clínicas.

Una prueba doblemente ciega se realiza dando la droga correcta a un grupo de pacientes y un placebo (una pastilla de azúcar) a otro grupo. Ni los doctores, ni los pacientes saben que tipo de pastilla se le recetó.

Observacionales

Son los generados por algún proceso natural o humano. Por ejemplo: La temperatura de San José en los últimos 10 años, el precio de una acción, composición química de parcelas de suelos, etc.

2.2 Flujo de trabajo

El flujo de trabajo estándar para comenzar un proyecto de ciencia de datos es el siguiente:

En R el paquete tidyverse es el más utilizado para el análisis de datos. Este paquete contiene una serie de paquetes que son útiles para el análisis de datos.

library(tidyverse)

2.2.1 Importar

Para la mayoría de las aplicaciones se pueden usar los paquetes readr y readxl. Esto tienen las funciones las funciones read_csv() y read_excel() para importar datos en formato csv y excel, respectivamente. Si los datos se encuentran en formatos como SAS, SPSS o Stata, entonces el paquete haven es el más adecuado.

Por favor revisen la documentación de estos paquetes para ver las opciones que tienen estas funciones.

Una tabla de datos es una forma de organizar la información. Se tienen \(n\) individuos u observaciones que denotaremos \(I_1, I_2, \ldots, I_n\). Cada una de estas observaciones tiene una \(p\)-tupla de variables o características asociadas que llamaremos \((X_1,X_2,\ldots, X_p)\). Llamaremos \(x_{ij}\) al dato que corresponde al individuo \(i\) con la característica \(j\).

\[ \begin{array}{c|cccc} & C_1 & C_2 & \cdots & C_n \\ \hline I_1 & x_{11} & x_{12} & \cdots & x_{1n} \\ I_2 & x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ I_m & x_{n1} & x_{n2} & \cdots & x_{np} \\ \end{array} \]

2.2.1.1 Tipos de variables

  • Constantes: Indican algún parámetro de control, por ejemplo, valores de calibración en la maquina usada para la medición.

  • Binarias: Indican la presencias o ausencia de alguna característica. Usualmente se codifican usando Falso o Verdadero.

  • Discretas: Pueden tomar solamente un conjunto determinado de valores (textual o numérico). Por ejemplo, la variable color; negro, blanco, azul, etc, o la variable calificación; 1, 2, 3, 4, o 5.

  • Continuas: Pueden tomar cualquier valor en la recta real como la Temperatura.

2.2.2 Ordenar

Los datos pueden venir en diferentes formatos. Nuestro objetivo es El formato más común es el formato de datos ordenados o tidy data. Este formato es el más adecuado para el análisis de datos.

En general, existen tres reglas interrelacionadas que hacen que un conjunto de datos sea ordenado:

  1. Cada variable debe tener su propia columna.
  2. Cada observación debe tener su propia fila.
  3. Cada valor debe tener su propia celda.

Muchas veces el conjunto de datos no viene en este formato. Para esto, lo mejor es usar las funciones del paquete tidyr: pivot_longer() y pivot_wider().

Presentaremos algunos elementos que se deben considerar cuando se está ordenando un conjunto de datos.

2.2.2.1 Escalas de medida

Se debe revisar el tipo de variable que queremos usar para el análisis. Las escalas de medida son:

  • Nominales: Son variables discretas que no tienen orden. Sabor de helado: Vainilla, Chocolate, Fresa, etc.

  • Ordinales: Variables discretas con cierto orden. Calificación de un hotel: Malo, Regular, Bueno, Muy Bueno. No se puede determinar la magnitud de la diferencia entre cada variable.

  • Intervalos: Son variables donde la diferencia entre las variables tiene sentido. Por ejemplo: si tomamos tres temperaturas en grados centígrados, \(5 \,^\circ\mathrm{C}\), \(10 \,^\circ\mathrm{C}\), \(15 \,^\circ\mathrm{C}\), la diferencia entre cada uno de los valores siempre es la misma. Esta tipo de escala se dice que no tiene un cero natural ya que \(0 \,^\circ\mathrm{C}\) no implica la ausencia absoluta de temperatura. Asimismo, \(10 \,^\circ\mathrm{C}\) no es siempre el doble de caliente que \(5 \,^\circ\mathrm{C}\). Se dice también que es una escala de suma y resta.

  • Racionales: Las diferencias entre dos valores son cuantificables y además esta escala posee un cero natural. Por ejemplo el dinero de una cuenta bancaria, ya que $5 se puede duplicar o triplicar preservando el sentido de la escala (a $10 o $15 respectivamente). Otro ejemplo es la temperatura en grados Kelvin, ya que multiplicar por dos un valor, si representa que la temperatura aumenta el doble. Este tipo de escala también se conoce como de multiplicación y división.

2.2.2.2 Limpieza de datos

Cualquier base de datos puede contener inconsistencias que son necesarias de corregir. Recuerden: Datos basura implican resultados basura.

  • Nominales u ordinales: Usualmente se deben revisar que los valores sean consistentes en cada una de las variables. Por ejemplo la variable Universidad actual puede contener valores como:

    • UCR

    • Universidad de Costa Rica

    • U. de Costa Rica

    • U.C.R.

    • Universidad de C.R.

      Todos esos valores se refieren al mismo objeto y deberían fusionarse a un valor Universidad de Costa Rica o UCR.

  • Intervalo o racionales: Este tipo de datos son más complicados de depurar ya que es permitido el uso de valores en la recta real. Se deben de considerar aspectos como:

  • Puntos extremos: Llamados en inglés outliers, son puntos que se salen de completamente de la “normalidad” de nuestros datos.

    Estos pueden ser provocados por errores de medición en el cual se usó un conjunto distinto de parámetros. También puede ser una observación real. Más adelante veremos algunas herramientas que nos ayudarán a determinar si un punto extremo es genuino o no

  • Elementos no numéricos: Por ejemplo si se incluye a una categoría numérica el valor 50 o más o Fuera del rango.

  • Diferentes escalas: Es muy común equivocarse al comparar variables en diferentes escalas. Por ejemplo, si se tiene el precio de cierto producto recolectado durante años, este debería de ser primero deflatado a colones de hoy para poder comparar la evolución a través del periodo.

Todos estos problemas deberían de ser analizados caso por caso y tomando siempre en cuenta la opinión de un experto para decidir si la variable se interpola, se agregan nuevos valores o simplemente se elimina.

2.2.2.3 Transformación de variables

A veces, para hacer más interpretable nuestros resultados, es necesario transformar nuestros datos de base en otros que se ajusten más a cierta técnica en específico.

  • Estandarización: En general hay 3 tipos de estandarización:

    • Re-escalamiento: Es cambiar el intervalo original de nuestros datos hacia alguno que queramos. \[\begin{align*} \frac{X^\prime - \min_{\text{nuevo}}}{\max_{\text{nuevo}} - \min_{\text{nuevo}}} & = \frac{X - \min_{\text{orig}}}{ \max_{\text{orig}} - \min_{\text{orig}}} \\ X^\prime & = \frac{X - \min_{\text{orig}}}{ \max_{\text{orig}} - \min_{\text{orig}}} (\textstyle \max_{\text{nuevo}} - \min_{\text{nuevo}}) + \min_{\text{nuevo}} \\ \end{align*}\]

    • \(z\)-score: A cada variable se le sustrae la media empírica (\(\bar{X}\)) y se divide por la desviación estándar (\(s\)). \[\begin{equation*} X^\prime = \frac{X - \bar{X} }{s} \end{equation*}\] donde \[\begin{equation*} \begin{aligned} \overline{X} &= \frac{1}{n} \sum_{i=1}^n X_i \\ s^2 &= \frac{1}{n-1} \sum_{i=1}^n {(X_i - \overline{X})}^2 \end{aligned} \end{equation*}\]

  • Escalamiento a decimales: Remover o agregar decimales en caso de cantidades muy grandes o pequeñas respectivamente. \[X^\prime = \frac{X}{10^k} \quad k\in \mathbb{Z}.\]

    • Normalización: Ciertos modelos requieren que los valores sigan una distribución normal (gaussiana). Para normalizar estas variables se pueden aplicar transformaciones de tipo exponencial, logarítmicas o de Box-Cox. Una transformación de Box-Cox es: \[\begin{align*} X^\prime &= \begin{cases} \frac{X^\lambda - 1}{\lambda} & \text{si } \lambda \neq 0, \\ \log(X) & \text{si } \lambda = 0. \end{cases} \end{align*}\]
  • Mapeo: Se refiere a convertir una variable nominal u ordinal en una numérica creando variables tontas (dummy) para este fin. Por ejemplo, observe como se convierte la siguiente tabla:

Individuo Altura
\(I_1\) Bajo
\(I_2\) Medio
\(I_3\) Bajo
\(I_4\) Alto
\(I_5\) Medio

a la representación usando variables tontas:

Individuo Bajo Medio Alto
\(I_1\) 1 0 0
\(I_2\) 0 1 0
\(I_3\) 1 0 0
\(I_4\) 0 0 1
\(I_5\) 0 1 0
  • Discretización: Esta transformación es útil cuando variables continuas no tienen información por si solas: Por ejemplo en la siguiente tabla se observa como la variable empleado originalmente no representa correctamente si una empresa es grande o no a nivel general.
Número de empleados
101
149
203
\(\vdots\)
1028
1037
1100

Sin embargo, si se discretiza la variable podemos ver como la variable empleado originalmente no representa correctamente si una empresa es grande o no a nivel general. Observe que cuando discretizamos la variable, se pueden apreciar distintos segmentos más informativos.

Número de empleados Segmento
101 100-500
149 100-500
203 100-500
\(\vdots\) \(\vdots\)
1028 1000-1500
1037 1000-1500
1100 1000-1500

Ejercicio 2.1 Realice la lectura del capítulo Tidy Data del libro R4DS y realice todos los ejercicios que se presentan.

Ejercicio 2.2 Una herramienta muy útil para depurar y transformar datos es OpenRefine (http://openrefine.org/). Revisen y estudien este programa usando algunas tablas de datos.

2.2.3 Visualizar

El primer ejercicio que deben hacer cuando tengan sus datos limpios es el de visualizarlos. Esto lo que permite es comenzar a generar hipótesis sobre la pregunta de investigación. El capítulo Data Visualization del libro R4DS es un buen punto de partida para comenzar a aprender la gramática de gráficos de ggplot2.

Cómo ejemplo vamos a usar el conjunto de datos penguins del paquete palmerpenguins. Este conjunto de datos contiene información sobre tres especies de pingüinos: Adelie, Chinstrap, y Gentoo. Queremos visualizar la relación entre la masa corporal y la longitud de la aleta de los pingüinos y además se desea ajustar un modelo lineal a estos datos.

library(palmerpenguins)
library(ggthemes)

ggplot(
data = penguins,
mapping = aes(x = flipper_length_mm, y = body_mass_g)
) +
geom_point(aes(color = species, shape = species)) +
geom_smooth(method = "lm") +
labs(
title = "Masa corporal y longitud de las aletas",
subtitle = "Dimensiones para  Pingüinos Adelie, Chinstrap y Gentoo",
x = "Longitud de aleta (mm)", y = "Masa corporal (g)",
color = "Especie", shape = "Especie"
) +
scale_color_colorblind() +
cowplot::theme_cowplot()

2.2.4 Transformar

En esta etapa se pueden crear nuevas variables a partir de las variables existentes. Por ejemplo, se pueden crear variables categóricas a partir de variables numéricas.

Las funciones más comunes acá serían mutate(), select(), filter(), group_by(), summarize() y reframe() del paquete dplyr.

No existen reglas estrictas para construir estas nuevas variables. Estas deben ser construidas de acuerdo con el problema que se quiere resolver.

Algunas recomandaciones para estas construcciones son:

  • Uso de nombres descriptivos y en formato estándar: Los nombres de las variables deben ser descriptivos y formateados de forma estandar. Se puede usar la función clean_names() del paquete janitor.
  • Filtrado usando condiciones lógicas: Cuando se use filter() se pueden usar condiciones lógicas como ==, !=, >, <, >=, <=, %in%, !%in%, is.na(), is.null(), is.nan(), is.finite(), is.infinite().
  • Manejo de strings: Funciones como str_sub() y str_detect() del paquete stringr son útiles para el manejo de strings.
  • Uso de expresiones regulares: Las expresiones regulares son un tema gigante en programación. Por ejemplo, la variable fruit contiene nombre de varias frutas.
str_view(fruit)
 [1] │ apple
 [2] │ apricot
 [3] │ avocado
 [4] │ banana
 [5] │ bell pepper
 [6] │ bilberry
 [7] │ blackberry
 [8] │ blackcurrant
 [9] │ blood orange
[10] │ blueberry
[11] │ boysenberry
[12] │ breadfruit
[13] │ canary melon
[14] │ cantaloupe
[15] │ cherimoya
[16] │ cherry
[17] │ chili pepper
[18] │ clementine
[19] │ cloudberry
[20] │ coconut
... and 60 more

Una expresión regular son “reglas” que permiten extraer subsecciones de ese texto. Digamos que quiero todas aquellas frutas que terminan en “berry”. Entonces la expresión regular sería berry$.

str_view(fruit, "berry$")
 [6] │ bil<berry>
 [7] │ black<berry>
[10] │ blue<berry>
[11] │ boysen<berry>
[19] │ cloud<berry>
[21] │ cran<berry>
[29] │ elder<berry>
[32] │ goji <berry>
[33] │ goose<berry>
[38] │ huckle<berry>
[50] │ mul<berry>
[70] │ rasp<berry>
[73] │ salal <berry>
[76] │ straw<berry>

Y si queremos extraer esos valores

fruit %>%
str_subset("berry$")
 [1] "bilberry"    "blackberry"  "blueberry"   "boysenberry" "cloudberry" 
 [6] "cranberry"   "elderberry"  "goji berry"  "gooseberry"  "huckleberry"
[11] "mulberry"    "raspberry"   "salal berry" "strawberry" 

El conjunto total de expresiones regulares esta en este sitio https://www.regular-expressions.info/tutorial.html

  • Uso de factores: Los factores son una forma de representar variables categóricas. Estos son útiles para el análisis de datos. Para convertir una variable a factor se puede usar la función factor(). Para reordenar, eliminar, etc. se puede usar el paquete forcats.
  • Uso de fechas: Las fechas son un tipo de variable especial. La forma más fácil es usando el paquete lubridate con las funciones ymd(), mdy(), dmy(), ymd_hms(), ymd_hm(), ymd_h(), ymd_hms() y ymd_hm().
  • Uniones de tablas: Para unir tablas las funciones más comunes son left_join() y full_join() del paquete dplyr. Para más información sobre las uniones de tablas pueden revisar el capítulo Joins.

2.2.5 Modelar

Los modelos son herramientas complementarias al ordenamiento, transformación y visualización. Una vez que haya hecho sus preguntas lo suficientemente precisas, puede usar un modelo para responderlas. Los modelos son fundamentalmente herramientas matemáticas o computacionales, por lo que generalmente se escalan bien.

En este libro se usarán modelos estadísticos más fundamentales de estimación inferencial, intervalos de confianza y pruebas de hipótesis. Del punto de vista bayesiano se revisarán intervalos de credibilidad y pruebas de hipótesis bayesianas.

2.2.6 Comunicar

Para comunicar la forma más sencilla es usar Quarto. Quarto es un formato de documentos que permite combinar texto, código y resultados.

---
title: "Diamond sizes"
date: 2022-09-12
format: pdf
---

```{r}
#| label: setup
#| include: false

library(tidyverse)

smaller <- diamonds |>
filter(carat <= 2.5)
```

We have data about ` r nrow(diamonds)` diamonds.
Only ` r nrow(diamonds) - nrow(smaller)` are larger than 2.5 carats.
The distribution of the remainder is shown below:

```{r}
#| label: plot-smaller-diamonds
#| echo: false

smaller |>
ggplot(aes(x = carat)) +
geom_freqpoly(binwidth = 0.01)
```

Este tipo de código documentado funciona bien para las primeras etapas de un proyecto de ciencia de datos. Sin embargo, cuando se quiere comunicar los resultados de forma más formal, lo mejor es usar un lenguaje de marcado como Markdown o LaTeX.

2.3 Usando git y GitHub

Durante todo el proceso de ciencia de datos es importante usar un sistema de control de versiones. El más popular es git. Git es un sistema de control de versiones distribuido, gratuito y de código abierto diseñado para manejar todo, desde proyectos pequeños hasta muy grandes con velocidad y eficiencia.

Para sus proyectos quiero que sigan las siguientes recomendaciones:

  • Instalen ProjectTemplate. Este paquete permite crear un proyecto de ciencia de datos con una estructura estándar.

  • Aprendan git y GitHub. Para esto pueden usar el libro Happy Git and GitHub for the useR. Un tutorial más interactivo es Learn Git Branching.

  • Usen Conventional Commits. Este es un estándar para los mensajes de los commits. Esto permite que los mensajes de los commits sean más descriptivos y que se puedan generar automáticamente los mensajes de los cambios en el proyecto.

  • Usen precommit para verificar que los mensajes de los commits cumplan con una serie de pasos como formatea de texto, revisión de código basura, etc.

  • Usen mensajes para los commits significativos. Este artículo explica muy bien una serie de reglas para hacer esto más fácil.

2.4 (Bonus) Técnicas exploratoratorias de datos

El análisis exploratorio de datos (AED) es un paso crucial en cualquier procedimiento estadístico ya que nos permite:

  • Comprobación de errores.

  • Revisar los supuestos de los datos.

  • Selección preliminar del modelo a usar.

  • Determinar las relaciones entre las distintas variables.

Podemos clasificar el AED en dos categorías: No gráficos y los gráficos.

2.4.1 AED no gráfico

2.4.1.1 Tablas de frecuencia

En este tipo de arreglos es usado principalmente para variables categóricas o variables continuas con pocos valores distintos. En este contaremos las ocurrencias de cada una de las categorías de las variables y las ordenaremos en un arreglo rectangular. Además, podemos calcular la proporción o peso que representa cada una de las categorías con respecto al total.También se puede agregar los totales marginales de cada variable. Supongamos que tenemos una tabla de datos con las variables genero (Masculino o Femenino) y el grupo de edad (21, 42], (42, 62] y (62, 82] de ciertos individuos. La tabla de frecuencias nominales y relativas con algunos datos ficticios sería:

Genero Grupo de Edad Frecuencia Porcentaje
F (21,42] 13 21.67%
F (42,62] 11 18.33%
F (62,82] 12 20.00%
M (21,42] 7 11.67%
M (42,62] 5 8.33%
M (62,82] 12 20.00%
Total 60 100%

2.4.1.2 Medidas de tendencia central

Asumamos que la serie de datos para una variable es \(x_1,\ldots,x_n\).

  • Media empírica: Esta cantidad mide la tendencia central de los datos y se calcula de la siguiente forma \[\hat{\mu} = \bar{x} = \frac{1}{n} \sum_{i=1}^n x_i.\]

    Esta pondera todos los datos en caso de tengan una ponderación igualitaria. Existen otros tipos de medias donde se puede dar más valor a ciertos datos dependiendo de ciertas características. Otra forma de

  • Mediana empírica: Esta es otra medida de tendencia central y se obtiene ordenando \(x_1,\ldots,x_n\) y tomando justamente el valor que se encuentre en la mitad de la lista. El valor de la mediana dependerá del valor de \(n\):

    • Si \(n\) es par: Entonces \[\hat{m} = \frac{x_{\frac{n}{2}} + x_{\frac{n}{2}+1}}{2}\]

    • Si \(n\) es impar: Entonces \[\hat{m} = x_{\frac{n+1}{2}}\]

      Si hubiera un numero par de datos, entonces se toma la media de los dos valores medios.

  • Moda: Esta medida casi no se usa; ya que, a veces no existe en los datos. El valor más frecuente de la serie de datos o “Picos que tiene la distribución”

En caso de distribuciones simetricas, la media y la mediana empíricas coinciden. Para datos asimetricamente unimodales, la media se encuentra más cerca de la cola más larga.

La medida es robusta, es decir, cambiar unos cuantos valores no afecta el valor del estimado.

2.4.1.3 Medidas de desviación

Mide que tan lejos se encuentran los datos, los unos de los otros.

  • Varianza: Se obtiene promediando los errores al cuadrado de nuestros datos, mediante las siguientes ecuaciones:

\[\begin{equation*} \begin{aligned} \hat{\sigma}^2 & = \frac{1}{n} \sum_{i=1}^n {(X_i - \hat{\mu})}^{2}.\ \text{\bf{Sesgado}} \\ \hat{s}^2 & = \frac{1}{n-1} \sum_{i=1}^n {(X_i - \hat{\mu})}^{2}.\ \text{\bf{Insesgado}} \end{aligned} \end{equation*}\]

  • Desviación Estandar: Es la raíz cuadrada de la varianza. \[s = \sqrt{\hat{s}^2} = \sqrt{\frac{1}{n-1} \sum_{i=1}^n {(X_i - \hat{\mu})}^2.}\] El valor \(s\) mide cuanto en promedio los datos se alejan de la media.

  • Rango interquantil: Un quantil de valor \(\alpha\) es el valor que tal que: \[\mathbb{P}(X \leq q) = \alpha\] \[0<p<1\] \[q(\alpha)=F^{-1} (p)=\inf{x\colon F(x)\geq p}\] Definimos \(Q_1 , Q_2 , Q_3\) de la siguiente forma: \[\mathbb{P}(X \leq Q_1)=0.25\] \[\mathbb{P}(X \leq Q_2)=0.5\] \[\mathbb{P}(X \leq Q_3)=0.75\]

La función fivenum genera los 5 números de Tukey que representan \[\{\min{X}, Q_1, Q_2, Q_3, \max{X}\}.\]

El IQR se define como: \[IQR=Q_3 - Q_1\]

Al igual que la mediana, el IQR es una medida robusta de esparcimiento. Para encontrar “outliers” en los datos se puede comparar el \(Q_1\) y \(Q_2\) con el minimo y máximo de los datos.

2.4.1.4 Medidas de Asimetría y curtosis

  • Asimetría: es el indicador que dice que tan ladeada está la distribución. La fórmula para la asimetría es: \[\begin{align*} \gamma_1 &= \mathbb{E}\left[\left(\frac{X-\mu}{\sigma}\right)^3\right] \\ &= \frac{\mu_3}{\sigma^3} \\ \end{align*}\]

  • Curtosis: es una medida de que tan alta es la distribucion se define con: \[\gamma=\frac{\mu_3}{(\mu_2 )^\frac{3}{2}}\] \[\begin{align*} \kappa &= \mathbb{E}\left[\left(\frac{X-\mu}{\sigma}\right)^4\right] \\ &= \frac{\mu_4}{\sigma^4} \\ \end{align*}\]

Sin embargo esta medida para distribuciones normales es 3. Por lo que para normalizarlo, se puede definir la curtosis de exceso como:

\[\begin{equation*} \gamma_2 = \frac{\mu_4}{\sigma_4}-3 = \kappa - 3. \end{equation*}\]

2.4.1.5 Covarianza y correlación

Teóricamente para dos v.a \(X\), \(Y\) se puede calcular el nivel de relación que existe entre estas. A esa medida se denomina Covarianza. Esta medida debe la escala de cada variable.

\[\begin{align*} \sigma_{xy} &= Cov(X,Y) = \mathbb{E}[(\mathbb{E}(X)-X)(\mathbb{E}(Y)-Y)] \\ &=\mathbb{E}(XY) - \mathbb{E}(X)\mathbb{E}(Y) \\ \hat{\sigma}_{xy}&= \frac{1}{n-1}\sum_{i=1}^n (X_i - \overline{X})(Y_i - \overline{Y}) \end{align*}\]

Ahora, se define la correlación como la covarianza estandarizada en el intervalo [-1,1], donde la relación positiva perfecta es 1, y la relación perfecta negativa -1.

\[\begin{align*} \rho &= Corr(X,Y)= \frac{Cov(X,Y)}{\sigma_x \sigma_y} \\ \hat{\rho} &= \frac{\sum_{i=1}^{n} (X_i - \overline{X})(Y_i - \overline{Y})}{\sqrt{\sum_{i=1}^{n} (X_i - \overline{X})^2}\sqrt{\sum_{i=1}^{n} (Y_i - \overline{Y})^2}} \\ \end{align*}\]

2.4.2 AED gráfico

2.4.2.1 Histograma

Es una combinación de la tabla de contingencias y los diagramas de tallo y hoja pero para cualquier tipo de variable. Este gráfico proporciona el conteo o a totalidad de los datos:

  1. Seleccionar un origen \(x_0\) y defina los intervalos

    \[B_j =(x_0 + (j-1)h,x_0 +jh)\quad j\in\mathbb{Z} \quad h>0\]

  2. Cuento cuantas observaciones caen en cada intervalo \(B_j\), llame ese numero \(n_j\).

  3. Divida cada \(n_j\) entre el total de observaciones \(n\) y defina:

    \[f_j = \frac{n_j}{n} \]

  4. Para cada uno de los intervalos, \(B_i\), dibuje una barra de altura \(f_i\) y ancho h.

Finalmente definimos el histograma como función \(dx\). \(F\) es la densidad verdadera (desconocida) de \(x\)

\[\hat{F_n}(x)= \frac{1}{nh}\sum_{i=1}^n\sum_{j}I(X_i\in B_j)I(x\in B_j) \\ (X_i\in B_j)=\left\{ \begin{array}{l l} 1 & \quad \text{Si $X_i \in B_j$}\\ 0 & \quad \text{Otro caso} \end{array} \right.\]

El ancho de la caja afecta la presentación de los datos; ya que, pueden mostrar distribuciones muy planas o muy picadas. El histograma es un estimador no parammetrico de la densidad.

# Generar datos de ejemplo
set.seed(123)
datos <- rnorm(1000, mean = 50, sd = 10)

# Definir origen y ancho del intervalo
# Un poco menor que el mínimo valor para incluir todos los datos
x0 <- min(datos) - 0.5
# Ancho de intervalo elegido
h <- 5

# Crear el histograma ggplot2 ajusta automáticamente los intervalos, pero para
# este ejemplo, definiremos el ancho de bin manualmente
ggplot(data.frame(datos), aes(x = datos)) +
  geom_histogram(
    binwidth = h, color = "black",
    fill = "skyblue", boundary = x0
  ) +
  xlab("Valor") +
  ylab("Frecuencia relativa") +
  ggtitle("Histograma con Ancho de Intervalo Definido") +
  cowplot::theme_cowplot()

2.4.2.2 Gráficos de caja (Boxplot)

Son gráficos que resumen casi de inmediato elementos de la distribución de una muestra como el IQR, la mediana, la asimetría y los outlers.
Estos no logran percibir la multimodalidad.

datos <- c(-3.2, -1.7, -0.4, 0.2, 0.3, 1.2,
           1.5, 1.8, 2.4, 3.0, 4.3, 6.8, 9.0)
ggplot() +
  geom_boxplot(aes(y = datos))

Tukey definió que un punto extremo es aquel que estuvieron fuera del rango: \[(Q_1 - 1.5 \times IQR, Q_3 + 1.5 \times IQR)\]

Esta regla fue basada en la distribución normal donde alrededor 1 de 100 puntos se declararían como extremos

Observación. ¿Que pasaría si la regla fuera 2 IQR?

Entonces en el ejemplo

\[\begin{align*} Q_3 + 1.5\times IQR &= 3 + 1.5 \times 2.8 = 7.2 \\ Q_1 -1.5\times IQR &= 3 -1.5 \times 2.8 = -4 \end{align*}\]

Entonces el bigote superior sería al valor máximo que sea menor a 7.2 y el bigote inferior sería el valor mínimo que sea mayor a -4. En este caso serían 6.8 y -3.2 respectivamente.

2.4.2.3 QQ-plots

Los quantile-quantile (QQ) plots son herramientas gráficas utilizadas para evaluar si una muestra sigue una distribución teórica específica. Comúnmente, se emplean para comparar si una muestra se ajusta a una distribución gaussiana (normal).

Nota Importante: Un QQ-plot no se limita solo a dibujar pares ordenados de datos de la muestra contra valores teóricos esperados bajo una distribución específica. Esta técnica es fundamental en estadística ya que muchos modelos, como los de regresión, asumen normalidad en los residuos. Es crucial verificar este supuesto para validar adecuadamente un modelo estadístico.

Lo primero es seleccionar los cuantiles muestrales tal y como lo explicamos anteriormente. Es decir, cuál es el punto de corte de modo que podamos acumular cierta probabilidad.

Los puntos teóricos se pueden seleccionar de la siguiente manera: \[p_i = \frac{i - \frac{1}{2}}{n}\] O alternativamente, usando: \[p_{i,\alpha,\beta} = \frac{i-\alpha}{n+1-\alpha-\beta}\] Donde \(\alpha, \beta \in \mathbb{R}\).

Según Hyndman (1996), es crucial analizar el comportamiento de \(p_{i,\alpha,\beta}\) para distintos valores de \(\alpha\) y \(\beta\). En este estudio, se demuestra que establecer \(\alpha=\beta=\frac{1}{2}\) cumple con varias propiedades deseables para la estimación de cuantiles. Por otro lado, Blom (1958) sugiere que \(\alpha=\beta=\frac{3}{8}\) ofrece un mejor ajuste para distribuciones normales, aunque no satisface todas las condiciones ideales.

Para datos que se aproximan a una distribución normal, se utiliza la fórmula: \[p_i=\frac{i-\frac{3}{8}}{n-\frac{1}{4}}\]

Ahora, el objetivo es comparar los datos con otra distribución teórica. Para ello, se usa la recta \(y = x\) como referencia. La lógica detrás es simple: si los puntos de nuestra muestra se alinean cercanamente a la recta \(y = x\), entonces se puede inferir que los datos siguen la distribución teórica.

Ejemplo 2.1 Siguiendo con el ejemplo anterior, se muestra cómo realizar un QQ-plot en con las funciones base de R con un conjunto de datos y compararlos con una distribución normal teórica:

datos <- c(-3.2, -1.7, -0.4, 0.2, 0.3, 1.2, 1.5, 1.8, 2.4, 3.0, 4.3, 6.8, 9.0)

qqnorm(datos, col = "blue", pch = 19)
qqline(datos, col = "red")

Si lo queremos hacer en ggplot2, podemos usar la función geom_qq:

df <- data.frame(y = datos)
ggplot(df, aes(sample = y)) +
  geom_qq(color = "blue") +
  geom_qq_line(color = "red") +
  cowplot::theme_cowplot()

Ejemplo 2.2 A continuación, se muestra cómo realizar un QQ-plot en R con un conjunto de datos lognormales y compararlos con una distribución normal teórica:

set.seed(123)
datos_lognormales <- rlnorm(100, meanlog = 0, sdlog = 1)

qqnorm(datos_lognormales, col = "blue", pch = 19)
qqline(datos_lognormales, col = "red")

2.4.2.4 Otros Elementos Gráficos

En este artículo, exploraremos la construcción y los principios detrás de varios tipos de gráficos utilizando el paquete ggplot2 en R. Los gráficos son herramientas fundamentales en el análisis de datos para explorar, entender y presentar los datos de manera visual.

2.4.2.4.1 Gráficos de Barras

Los gráficos de barras son esenciales para comparar cantidades entre categorías distintas. Aquí algunos puntos clave y buenas prácticas para su creación:

  • Representación de Categorías: Cada barra representa una categoría diferente, haciendo fácil la comparación visual entre ellas.
  • Longitud Proporcional: La longitud de cada barra es proporcional a la magnitud que representa, facilitando la comparación de valores.
  • Ancho Uniforme: Las barras deben tener el mismo ancho para evitar distorsiones visuales.
  • Espaciado Uniforme: Mantener una distancia igual entre las barras mejora la claridad.
  • Base Cero: Iniciar el eje de valores en cero asegura una representación fiel de las magnitudes.
  • Evitar Margenes: Los márgenes en las barras pueden complicar la interpretación visual de los datos.
  • Etiquetas Claras: Asegúrate de que las categorías y valores sean fáciles de leer y entender.

Ejemplo 2.3  

library(ggplot2)

# Datos de ejemplo
datos <- data.frame(
  Categoria = c("A", "B", "C", "D"),
  Valor = c(23, 45, 10, 30)
)

ggplot(datos, aes(x = Categoria, y = Valor)) +
  geom_bar(stat = "identity", fill = "skyblue", color = "black") +
  theme_minimal() +
  labs(title = "Gráfico de Barras", x = "Categoría", y = "Valor")

2.4.2.4.2 Gráficos de Líneas

Los gráficos de líneas son una herramienta fundamental en la visualización de datos, especialmente útiles para mostrar tendencias o cambios a lo largo del tiempo. Este tipo de gráfico conecta puntos de datos individuales con líneas, lo que facilita la percepción de la dirección y el ritmo de cambio en los datos.

Se debe considerar lo siguiente:

  • Escala Temporal: El eje X representa el tiempo, con puntos igualmente espaciados.
  • Variables Continuas: Adecuados para cualquier par de variables cuantitativas donde una es continua.
  • Proporcionalidad: El eje Y debe reflejar la magnitud real de los datos, preferentemente iniciando en cero para evitar distorsiones visuales.
  • Base Cero: Mantener el eje Y comenzando en cero, a menos que se quieran destacar pequeñas variaciones.
  • Diferenciación: Usar colores y estilos de línea distintos para múltiples series de datos.
  • Claridad: Evitar el exceso de series en un solo gráfico para mantener la interpretación sencilla.
  • Leyendas y Anotaciones: Proporcionar contexto con leyendas claras y anotaciones cuando sea necesario.

Ejemplo 2.4  

library(ggplot2)

# Datos de ejemplo: Ventas mensuales a lo largo de un año
ventas <- data.frame(
  Mes = factor(1:12, labels = month.abb),
  Ventas = c(120, 150, 130, 170, 160, 180, 200, 220, 210, 230, 240, 260)
)

# Gráfico de líneas
ggplot(ventas, aes(x = Mes, y = Ventas, group = 1)) +
  geom_line(color = "blue", linewidth = 1) + # Línea azul
  geom_point(color = "red", size = 2) + # Puntos rojos
  theme_minimal() +
  scale_y_continuous(limits = c(0, 300)) + # Manteniendo la base cero
  labs(title = "Ventas Mensuales a lo Largo del Año",
       x = "Mes", y = "Ventas ($)") +
  theme(legend.position = "none") # Sin leyenda en este caso simple

2.4.2.4.3 Gráfico de Dispersión (Scatterplot)

Los gráficos de dispersión son esenciales en estadística para explorar la relación entre dos variables cuantitativas, permitiendo identificar patrones, tendencias y posibles correlaciones.

  • Variables Cuantitativas: Los gráficos de dispersión son ideales para comparar dos variables cuantitativas, donde cada punto representa un par de valores.

  • Correlación: Una de las principales utilidades de los gráficos de dispersión es evaluar la presencia y dirección de una correlación entre las variables.

  • Identificación de Outliers: Permiten identificar valores atípicos que podrían influir en el análisis.

  • Escala Adecuada: Asegúrate de que ambos ejes reflejen adecuadamente el rango de datos para cada variable, evitando distorsiones.

  • Marcadores Diferenciados: Si el gráfico incluye categorías (datos agrupados), utiliza colores o formas de marcadores diferentes para distinguir entre grupos.

  • Evitar Sobrecarga: Demasiados puntos sobre una pequeña área pueden hacer que el gráfico sea difícil de leer. Considera usar transparencia o jittering si es necesario.

  • Análisis Complementario: A menudo, los gráficos de dispersión revelan la necesidad de análisis estadísticos adicionales, como ajustes de línea o modelos de regresión.

library(ggplot2)

# Datos de ejemplo
set.seed(42)
X <- rnorm(100)
Y <- X + rnorm(100, mean = 0.1)
datos <- data.frame(
  X = X,
  Y = Y,
  Categoria = as.factor(sample(c("Grupo 1", "Grupo 2"), 100, replace = TRUE))
)

ggplot(datos, aes(x = X, y = Y, color = Categoria)) +
  # Transparencia para manejar la sobreposición
  geom_point(alpha = 0.7) +
  theme_minimal() +
  labs(title = "Gráfico de Dispersión con Categorías") +
  # Colores personalizados
  scale_color_manual(values = c("Grupo 1" = "blue", "Grupo 2" = "red"))

2.4.2.4.4 Gráficos pastel
Advertencia

Nunca use gráficos de pastel. Los gráficos de barras son superiores en casi todos los aspectos. Los gráficos de barras son más fáciles de leer, menos engañosos y menos susceptibles a la manipulación.