1 La Estadística en los Negocios

La estadística es una herramienta fundamental en el mundo empresarial, ya que permite tomar decisiones basadas en datos y no en suposiciones. A través del análisis estadístico, las organizaciones pueden identificar tendencias del mercado, evaluar el rendimiento financiero, optimizar procesos y comprender el comportamiento del consumidor. Esto no solo mejora la eficiencia operativa, sino que también brinda ventajas competitivas al permitir una planificación estratégica más precisa y adaptada a los cambios del entorno.

Mira este video para profundizar más: Importancia de la estadística en los negocios

2 Importancia de Usar RStudio

RStudio es una de las herramientas más poderosas y versátiles para el análisis de datos estadísticos. Su entorno de desarrollo integrado facilita la escritura, ejecución y depuración de código en R, permitiendo a los usuarios realizar análisis complejos, visualizaciones interactivas y modelado estadístico de manera eficiente. Es ampliamente utilizado en el ámbito académico, científico y empresarial gracias a su capacidad para manejar grandes volúmenes de datos, su compatibilidad con múltiples paquetes especializados y su enfoque reproducible en los proyectos de análisis.

3 Instalación y Configuración de R-STUDIO

Para comenzar a usar R, el primer paso es instalarlo en tu computadora. R es compatible con casi todas las plataformas, incluyendo los sistemas operativos más comunes. Windows, Mac OS X y Linux. Links de descarga para R y RStudio.

RStudio es un entorno de desarrollo integrado (IDE) disponible para R, el cual tiene un buen editor con resaltado de sintaxis, un visor de objetos de R y un gran número de características agradables que están integradas.Ademas, esta dedicado a la computación estadística y gráficos.

3.1 “Mundo” Tidyverse en R-Studio

El Tidyverse es una colección de paquetes del R que permiten preparar, procesar y graficar bases de datos. Se destacan los siguientes:

  • ggplot: permite crear visualizaciones elegantes de los datos de una manera relativamente sencilla.

  • stringr: permite manipular cadenas de caracteres con el fin de realizar sustituciones, detectar duplicados, analizar patrones, etc.

  • tidyr: tiene como objetivo obtener datos ordenados. Destacan funciones como gather para crear factores con base en nombres de columnas y separate para crear factores separando los caracteres de una columna.

  • readr: permite importar y exportar bases de datos en diferentes formatos y tiene implementada la función problems que detecta problemas en nuestras bases.

Para más información visitar la página web:
https://www.tidyverse.org/packages/

3.2 Creación de reportes en R con R Markdown:

4 Conceptos básicos de programación en R:

library(magrittr)
# Crear los datos
comandos <- c("x == y", "x != y", "x > y", "x < y", "x >= y", "x <= y", "&", "|", "!", "isTRUE(A)")
significado <- c("x es igual a y", "x no es igual a y", "x es mayor que y", "x es menor que y",
                 "x es mayor o igual que y", "x es menor o igual que y", "y", "o", "No", "Evalúa si A es cierta")

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(kableExtra)
## 
## Attaching package: 'kableExtra'
## The following object is masked from 'package:dplyr':
## 
##     group_rows
tabla <- data.frame(Comando = comandos, Significado = significado)

tabla %>%
  kbl(col.names = c("Comando", "Significado"), booktabs = TRUE) %>%
  kable_styling(full_width = TRUE, position = "center", font_size = 24) %>%
  row_spec(0, bold = TRUE, background = "#D3D3D3") %>%
  kable_paper("striped", full_width = FALSE) %>%
  column_spec(1, width = "6cm") %>%
  column_spec(2, width = "12cm")
Comando Significado
x == y x es igual a y
x != y x no es igual a y
x > y x es mayor que y
x < y x es menor que y
x >= y x es mayor o igual que y
x <= y x es menor o igual que y
& y

4.1 Creación de Objetos

R es un lenguaje orientado a objetos. Los objetos pueden ser usados para guardar valores y pueden madificarse mediante funciones como por ejemplo sumar dos objetos o calcular la media.

X <- 4
Y <- 2

4.1.1 R como calculadora

Puedes usar el programa R como una calculadora, basta con conocer cuáles son los signos y comandos a utilizar para realizar las operaciones. Copia los comandos en tu script de R y ejecútalos para ver los resultados.

#suma
Z <- X +Y

Z
## [1] 6
#multiplicación
2*2
## [1] 4
#división
2/2
## [1] 1
#potencia
4^2
## [1] 16
#raíz cuadrada
sqrt(16)
## [1] 4

5 Visualización de Bases de datos en R.

5.1 Cargar paquetes

Lo primero que tenemos que hacer es cargar los paquetes que vamos a utilizar para el análisis. En este caso vamos a usar:

library(tidyverse)# Incluye paquetes de importación, visualización entre otros
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.1     ✔ readr     2.2.0
## ✔ ggplot2   4.0.3     ✔ stringr   1.6.0
## ✔ lubridate 1.9.5     ✔ tibble    3.3.1
## ✔ purrr     1.2.2     ✔ tidyr     1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::extract()         masks magrittr::extract()
## ✖ dplyr::filter()          masks stats::filter()
## ✖ kableExtra::group_rows() masks dplyr::group_rows()
## ✖ dplyr::lag()             masks stats::lag()
## ✖ purrr::set_names()       masks magrittr::set_names()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(dplyr)# Manipulación de Datos
library(ggplot2)# Visualización de datos 
library(readxl)# Importación de datos
require(tibble)# Tablas

Recordar que si no ha instalado estos paquetes debe correr primero el comando: install.packages("nombre del paquete")

6 Corte I: Análisis Exploratorio de Datos

El análisis exploratorio de datos (Ver video) (EDA por sus siglas en inglés) implica el uso de gráficos y visualizaciones para explorar y analizar un conjunto de datos. El objetivo es explorar, investigar y aprender, no confirmar hipótesis estadísticas.

6.1 ¿Cuándo debo utilizarlo?

El análisis exploratorio de datos es una potente herramienta para explorar un conjunto de datos. Incluso cuando su objetivo es efectuar análisis planificados, el EDA puede utilizarse para limpiar datos, para análisis de subgrupos o simplemente para comprender mejor los datos. Un paso inicial importante en cualquier análisis de datos es representar los datos gráficamente.

No gráfico: Calcula estadísticas descriptivas de las variables

Gráfico: Calcula estadísticas de forma gráfica

Univariado: Analiza una sola variable a la vez

Multivariado: Analiza dos o más variables

A su vez, cada uno de esas dividisiones puede subdividirse según los tipos de datos con los que trabajemos: categóricos o numéricos.

6.2 Pasos para un Análisis Exploratorio de Datos (EDA)

6.2.1 Comprender el contexto

6.2.2 Importar datos:

  • Cargar los datos.
  • Comprender la estructura del dataset.

6.2.3 Limpieza, tratamiento y preparación:

  • Revisión de los tipos de datos y conversión si es necesario.

  • Revisión de valores faltantes.

  • Resumen estadístico inicial.

  • Detección de outliers.

    • Los atípicos deben ser tratados.
    • Si se tratan con imputación, y esta debe ser evaluada utilizando histogramas o pruebas analíticas de igualdad de distribución, dependiendo del resultado de la normalidad.

6.2.4 Análisis descriptivo de las variables:

  • Análisis de la distribución de las variables.
  • Identificación de relaciones entre variables.
  • Análisis de variables categóricas.
  • Exploración de interacciones de variables.

6.2.5 Documentación de hallazgos.

6.3 Representación de datos según su Naturaleza

tabla <- data.frame(
  "Naturaleza de la variable" = c("Cualitativa", "", "Cuantitativa", ""),
  "Escala de Medidas" = c("Nominal", "Ordinal", "Intervalo", "Razon"),
  "Frecuencias" = c("Si", "Si", "Agrupadas", ""),
  "Medidas de Localizacion" = c("Moda", "Moda", "Media, Mediana y Moda", ""),
  "Medidas de Dispersion" = c("No", "No", "Si", "Si"),
  "Medidas de Distribucion" = c("No", "No", "Si", "Si"),
  "Graficos" = c("Sectores, Barras", "Sectores, Barras (sin orden)", "Histograma, Tallo y hojas, Cajas y Bigotes, Dispersion.", "")
)

# Create the table with kableExtra
library(knitr)
library(kableExtra)

tabla %>%
  kable("html", align = "c", col.names = c(
    "Naturaleza de la variable", 
    "Escala de Medidas", 
    "Frecuencias", 
    "Medidas de Localizacion", 
    "Medidas de Dispersion", 
    "Medidas de Distribucion", 
    "Graficos"
  )) %>%
  kable_styling(full_width = F, position = "center", bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, background = "#D9E2F1", color = "black") %>%
  row_spec(1:2, background = "white", color = "black") %>%
  row_spec(3:4, background = "#E7E7E7", color = "black")
Naturaleza de la variable Escala de Medidas Frecuencias Medidas de Localizacion Medidas de Dispersion Medidas de Distribucion Graficos
Cualitativa Nominal Si Moda No No Sectores, Barras
Ordinal Si Moda No No Sectores, Barras (sin orden)
Cuantitativa Intervalo Agrupadas Media, Mediana y Moda Si Si Histograma, Tallo y hojas, Cajas y Bigotes, Dispersion.
Razon Si Si

6.4 Presentación y análisis de la Información en estudios Descríptivos.

tabla <- data.frame(
  "Tipo de Tabla" = c(
    "De Frecuencia (Variable Cualitativa)",
    "De Frecuencia (Variable Cuantitativa)",
    "De Asociacion (Dos Variables Cualitativas)",
    "De Asociacion (Una Variable Cualitativa y una Cuantitativa Discreta)",
    "De Asociacion (Una Variable Cualitativa y una Cuantitativa Continua)",
    "De Asociacion (Dos Variables Cuantitativas)"
  ),
  "Tipo de Grafico" = c(
    "- Barras simples\n- Pastel",
    "- Histograma",
    "- Barras compuestas\n- Barras superpuestas",
    "- Barras:\n  * Compuestas\n  * Superpuestas",
    "- Poligono de Frecuencia\n- Box plot (diagrama de cajas y bigotes)",
    "- Diagrama de Puntos"
  ),
  stringsAsFactors = FALSE
)

# Creating the table using kableExtra
tabla %>%
  kable("html", escape = FALSE, align = "l", col.names = c("Tipo de Tabla", "Tipo de Grafico")) %>%
  kable_styling(full_width = F, position = "center", bootstrap_options = c("striped", "hover", "condensed", "responsive")) %>%
  row_spec(0, bold = TRUE, background = "#D9E2F1", color = "black") %>%
  row_spec(c(3, 4), background = "#F2F2F2", color = "black") %>%
  row_spec(c(2, 5), background = "white", color = "black") %>%
  row_spec(c(1, 6), background = "#E7E7E7", color = "black") %>%
  column_spec(1, width = "4cm") %>%
  column_spec(2, width = "6cm")
Tipo de Tabla Tipo de Grafico
De Frecuencia (Variable Cualitativa)
  • Barras simples
  • Pastel
De Frecuencia (Variable Cuantitativa)
  • Histograma
De Asociacion (Dos Variables Cualitativas)
  • Barras compuestas
  • Barras superpuestas
  • De Asociacion (Una Variable Cualitativa y una Cuantitativa Discreta)
    • Barras:
    • Compuestas
    • Superpuestas
    De Asociacion (Una Variable Cualitativa y una Cuantitativa Continua)
    • Poligono de Frecuencia
  • Box plot (diagrama de cajas y bigotes)
  • De Asociacion (Dos Variables Cuantitativas)
    • Diagrama de Puntos

    6.5 Situación Problema.

    Exploración de la Intersección entre la Economía, la Administración y la Ciencia de Datos: Comportamiento de Jóvenes Consumidores en Entornos Digitales

    En un centro de investigación en economía y administración, se analizan los patrones de consumo y comportamiento digital de jóvenes en distintos niveles educativos y ocupacionales. La base de datos recoge variables demográficas (edad, sexo, nivel educativo), así como indicadores de uso de redes sociales y tiempo dedicado a juegos en línea, que funcionan como aproximaciones al consumo digital y al ocio de los individuos.

    Además, se incluyen mediciones relacionadas con percepciones subjetivas como satisfacción con la vida, manejo del estrés y confianza personal, interpretadas aquí como capital humano y bienestar percibido, factores que influyen en la productividad y en la toma de decisiones económicas.

    El análisis se apoya en herramientas de ciencia de datos y estadística aplicada, con el objetivo de:

    Identificar diferencias en el comportamiento digital según ocupación o nivel educativo.

    Explorar la relación entre el tiempo invertido en ocio digital y variables de bienestar (estrés, satisfacción, autoestima).

    Estudiar cómo las redes sociales preferidas pueden estar asociadas a estrategias de mercadeo, segmentación de consumidores y hábitos de consumo en línea.

    Este enfoque interdisciplinar permite comprender mejor los hábitos digitales como un reflejo del comportamiento económico de los jóvenes, aportando información valiosa para la administración de empresas, el diseño de estrategias de marketing y la formulación de políticas orientadas al consumo digital responsable.

    6.6 Construcción de una base de datos

    A continuación se construirá la primera base de datos a partir de las variables. Para esto, como se observa en los siguientes comandos, se parte por la construcción de 11 variables de 20 casos cada una:

    #Creación de las variables: todas tienen la misma cantidad de casos.
    Jovenes <- c("Mario", "Luis", "Pedro", "Maria", "Sandra", "Erika", "Laura","Luz","Olga")
    Edad <- c(18, 20, 20, 17, 19, 22, 22, 22,31)
    Sexo <- c("Masculino", "Femenino", "Masculino", "Femenino", "Masculino", "Femenino", "Masculino", "Femenino","Femenino")
    Educacion <- c("Universidad", "Secundaria", "Universidad", "Posgrado", "Universidad", "Universidad", "Universidad", "Posgrado","Posgrado")
    Ocupacion <- c("Estudiante", "Profesional", "Estudiante", "Profesional", "Estudiante", "Profesional", "Estudiante", "Profesional","Posgrado")
    Red_Social_Principal <- c("Instagram", "Facebook", "Instagram", "Twitter", "TikTok", "Instagram", "Facebook", "Instagram","TikTok")
    Tiempo_en_Redes_Sociales <- c(2.5, 3.0, 2.0, 2.5, 3.5, 2.2, 2.8, 3.0,2.0)
    Horas_Semanales_de_Juego <- c(15, 20, 12, 10, 18, 15, 20, 15,41)
    Autoestima <- c(8.2, 6.9, 7.8, 7.0, 8.5, 7.3, 8.0, 7.6,9)
    Ansiedad_Social <- c(42, 50, 38, 45, 35, 48, 40, 42,45)
    Satisfaccion_con_la_Vida <- c(7.5, 6.9, 8.0, 7.2, 7.8, 6.5, 7.0, 7.3,8)
    Estres<- c(2,2,1,3,4,2,1,4,4)

    A partir de las variables ya creadas se puede construir una base de datos.

    df=data.frame(Jovenes, Edad,Sexo,Edad,Educacion, Ocupacion, Red_Social_Principal,Horas_Semanales_de_Juego,Ansiedad_Social,Satisfaccion_con_la_Vida,Estres)
    df

    7 Representación de datos

    La representación de datos se refiere al proceso de presentar la información de manera visual o tabular para facilitar su comprensión, análisis y comunicación. Esta representación puede tomar diversas formas, incluyendo gráficos, tablas, diagramas, mapas y resúmenes estadísticos. El objetivo principal de la representación de datos es convertir datos crudos en información comprensible y significativa.

    Aquí hay una descripción de algunas formas comunes de representación de datos:

    Gráficos: Los gráficos son representaciones visuales de datos que utilizan diferentes tipos de elementos visuales, como líneas, barras, puntos y áreas, para mostrar la relación entre variables o la distribución de datos. Algunos tipos comunes de gráficos incluyen gráficos de barras, gráficos de líneas, gráficos circulares, histogramas y diagramas de dispersión.

    Tablas: Las tablas son representaciones tabulares de datos que organizan la información en filas y columnas. Las tablas son útiles para mostrar datos detallados o para comparar valores entre diferentes categorías o grupos. Pueden incluir valores numéricos, texto descriptivo y otras características.

    7.1 Representación en Gráficos.

    Para visualizar los datos en formato dataframe puede usar el comando View() o también head() para visualizar las primeras filas en consola.

    head(df)

    7.1.1 Diagrama de barras

    ggplot2 es un sistema para crear gráficos de forma declarativa, basado en la Gramática de los Gráficos. Se deben proporcionar los datos, indicar a ggplot2 cómo asignar las variables a la estética y qué tipo de gráficas utilizar. La función geom_bar() se utiliza para producir gráficos de área 1d: gráficos de barras para x categóricas, e histogramas para y continuas

    library(ggplot2)
    ggplot(data=df, aes(x=Jovenes, y=Edad)) + geom_bar(stat="identity")+labs(title = "Distribución de Edad por Jovenes")

    El diagrama puede ser dibujado en forma horizontal usando la función coord_flip()

    ggplot(data=df, aes(x=Jovenes, y=Edad)) + geom_bar(stat="identity")+labs(title = "Distribución de Edad por Jovenes")+ coord_flip()

    Podemos cambiar el ancho, así como también el color de las barras y bordes. Nótese que se puede hacer una copia de la gráfica en una variable, en este ejemplo en p para que luego pueda ser usada para presentar el grafico o realizar más transformaciones

    ggplot(data=df, aes(x=Jovenes, y=Edad)) + geom_bar(stat="identity",width=0.5)+labs(title = "Distribución de Edad por Jovenes")

    ggplot(data=df, aes(x=Jovenes, y=Edad)) + geom_bar(stat="identity",width=0.5,color="blue", fill="green3")+labs(title = "Distribución de Edad por Jovenes")

    ggplot(data=df, aes(x=Jovenes, y=Edad)) + geom_bar(stat="identity",width=0.8, fill="steelblue")+labs(title = "Distribución de Edad por Jovenes")

    #creando tabla de resumen
    Tabla_1 <- df %>%
      dplyr::group_by(Red_Social_Principal) %>%                                  
      dplyr::summarise(Total = n()) %>%                                
      dplyr::mutate(Porcentaje = round(Total/sum(Total)*100, 1)) %>%   
      dplyr::arrange(Red_Social_Principal)
    Tabla_1
    "Grafico"
    ## [1] "Grafico"
    G1<-ggplot(Tabla_1, aes(x =Red_Social_Principal, y=Total) ) + 
      geom_bar(width = 0.7,stat="identity",                 
               position = position_dodge(), fill="cyan4") +  
      ylim(c(0,5))+
      #xlim(c(0,300)) +                  
      #ggtitle("Un título") + 
      labs(x="Red Social", y= "Frecuencias \n (Porcentajes)")   +   
      geom_text(aes(label=paste0(Total," ", "", "(", Porcentaje, "%", ")")),  
                vjust=-0.9, 
                color="black", 
                hjust=0.5,
                # define text position and size
                position = position_dodge(0.9),  
                angle=0, 
                size=4.5) +   
      theme(axis.text.x = element_text(angle = 0, vjust = 1, hjust=1)) +      
      theme_bw(base_size = 16) +
      #coord_flip() +                                                         
      facet_wrap(~"Distribución de Tipo de Red Social")
    G1

    7.1.2 Gráfico de barras agrupado

    Un gráfico de barras agrupado muestra un valor numérico para un conjunto de entidades divididas en grupos y subgrupos.

    El conjunto de datos para el presente ejemplo proporciona 3 columnas: el valor numérico (value), y 2 variables categóricas. En el llamada aes(), x es (categ), y el subgrupo (categ) se da al argumento fill. En la función geom_bar(), debe especificarse position=“dodge” para que las barras estén una al lado de la otra.

    • El siguiente llamado es utilizado para el gráfico de barras agrupado
    head(df)
    ggplot(df, aes(fill = Sexo, y = Edad, x = Red_Social_Principal, label = Edad)) +
      geom_bar(position = "dodge", stat = "identity") +
      labs(title = "Distribución de la Red Social según Sexo",
           x = "Red Social Principal",
           y = "Edad",
           fill = "Sexo")  

    ggplot(df, aes(fill = Sexo, x = Red_Social_Principal)) +
      geom_bar(position = "stack") +
      geom_text(stat = 'count', aes(label = ..count..), position = position_stack(vjust = 0.5), size = 3, color = "black") +
      labs(title = "Distribución de la Red Social según el Sexo",
           x = "Red Social Principal",
           y = "Frecuencia") +
      scale_fill_manual(values = c("blue2", "pink2"), name = "Sexo", labels = c("Hombre", "Mujer")) +
      theme(legend.position = "right")  # Ubicación de la leyenda 
    ## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
    ## ℹ Please use `after_stat(count)` instead.
    ## This warning is displayed once per session.
    ## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
    ## generated.

    7.1.3 Histograma

    Los histogramas son útiles para representar la distribución de variables continuas como Edad, Tiempo en Redes Sociales y Horas Semanales de Juego. Cada barra del histograma muestra la frecuencia de los datos..

    ggplot(data = df, aes(x = Edad)) +
      geom_histogram(binwidth = 1, fill = "skyblue", color = "black", alpha = 0.8) +
      labs(title = "Histograma de Edades",
           x = "Edad",
           y = "Frecuencia")

    7.1.4 Gráfico Circular

    ggplot2 no ofrece ningún geom específica para construir diagramas circulares (piecharts). El truco es el siguiente: El marco de datos de entrada tiene 2 columnas: los nombres de los grupos (group here) y su valor (value here), se construye un gráfico de barras apilado con una sola barra utilizando la función geom_bar(), luego se hace circular con coord_polar()

    library(magrittr)
    library(dplyr)
    
    #Tabla resumen
    Tabla_2 <- df %>% 
      group_by(Sexo) %>% # Variable a ser transformada
      count() %>% 
      ungroup() %>% 
      mutate(Porcentaje = `n` / sum(`n`)) %>% 
      arrange(Porcentaje) %>%
      mutate(etiquetas = scales::percent(Porcentaje))
    
    #Grafico #2
    require(scales)
    ## Loading required package: scales
    ## 
    ## Attaching package: 'scales'
    ## The following object is masked from 'package:purrr':
    ## 
    ##     discard
    ## The following object is masked from 'package:readr':
    ## 
    ##     col_factor
    ggplot(Tabla_2, aes(x = "", y = Porcentaje, fill = Sexo)) +
      geom_col(color = "black") +
      geom_label(aes(label = etiquetas),
                 position = position_stack(vjust = 0.5),
                 show.legend = FALSE) +
      guides(fill = guide_legend(title = "Distribución de Pacientes según el Sexo")) + scale_color_gradient() +
      coord_polar(theta = "y") + ggtitle ("")

      #theme_void() 

    7.2 Representación en Tablas

    La libreria questionr de R contiene la función freq la cual genera y formatea tablas de frecuencia simples a partir de una variable o una tabla, con porcentajes y opciones de formato. El resultado es un objeto de la clase data.frame.

    library(questionr)
    
    Tabla_Sexo <- questionr::freq(Sexo, cum = TRUE, sort = "dec", total = TRUE)
    knitr::kable(Tabla_Sexo)
    n % val% %cum val%cum
    Femenino 5 55.6 55.6 55.6 55.6
    Masculino 4 44.4 44.4 100.0 100.0
    Total 9 100.0 100.0 100.0 100.0

    La tabla puede ordenarse opcionalmente en frecuencia descendente, y funciona bien con kable. Si deseamos ver la estructura de la tabla generada por freq() utilizamos la función str()

    str(Tabla_Sexo) 
    ## Classes 'freqtab' and 'data.frame':  3 obs. of  5 variables:
    ##  $ n      : num  5 4 9
    ##  $ %      : num  55.6 44.4 100
    ##  $ val%   : num  55.6 44.4 100
    ##  $ %cum   : num  55.6 100 100
    ##  $ val%cum: num  55.6 100 100

    7.2.1 Tabla de frecuencias agrupada

    Para realizar una tabla de frecuencias agrupada utilizaremos en este ejemplo la Regla de Sturges, en la que el número de clases es obtenido por medio de: \(c=1+ln(N)/ln(2)\) donde \(N\) representa el número total de datos. Consideremos el Ejemplo 23 de los apuntes, en el que se representan las edades de un conjunto de estudiantes.

    Ejemplo: Se tienen las siguientes edades de algunos estudiantes

    edades <- c(22, 19, 16, 13, 18, 15, 20, 14, 15, 16,
              15, 16, 20, 13, 15, 18, 15, 13, 18, 15)
    knitr::kable(head(edades))
    x
    22
    19
    16
    13
    18
    15

    Encontremos el número de clases usando la regla de Sturges

    n_sturges = 1 + log(length(edades))/log(2)
    n_sturgesc = ceiling(n_sturges)
    n_sturgesf = floor(n_sturges)
    
    n_clases = 0
    if (n_sturgesc%%2 == 0) {
      n_clases = n_sturgesf
    } else {
      n_clases = n_sturgesc
    }
    R = max(edades) - min(edades)
    w = ceiling(R/n_clases)

    Calculemos ahora nuestra tabla de frecuencias con número de clases n_clases. Primero creamos una lista de fronteras de clases bins y luego agrupamos los datos basados en estas

    bins <- seq(min(edades), max(edades) + w, by = w)
    bins
    ## [1] 13 15 17 19 21 23
    Edades <- cut(edades, bins)
    Freq_table <- transform(table(Edades), Rel_Freq=prop.table(Freq), Cum_Freq=cumsum(Freq))
    knitr::kable(Freq_table)
    Edades Freq Rel_Freq Cum_Freq
    (13,15] 7 0.4117647 7
    (15,17] 3 0.1764706 10
    (17,19] 4 0.2352941 14
    (19,21] 2 0.1176471 16
    (21,23] 1 0.0588235 17
    str(Freq_table)
    ## 'data.frame':    5 obs. of  4 variables:
    ##  $ Edades  : Factor w/ 5 levels "(13,15]","(15,17]",..: 1 2 3 4 5
    ##  $ Freq    : int  7 3 4 2 1
    ##  $ Rel_Freq: num  0.4118 0.1765 0.2353 0.1176 0.0588
    ##  $ Cum_Freq: int  7 10 14 16 17

    Podemos también crear un histograma para la tabla de frecuencias agrupada

    df2 <- data.frame(x = Freq_table$Edades, y = Freq_table$Freq)
    knitr::kable(df2)
    x y
    (13,15] 7
    (15,17] 3
    (17,19] 4
    (19,21] 2
    (21,23] 1
    ggplot(data=df2, aes(x=x, y=y)) +
      geom_bar(stat="identity", color="blue", fill="green") +
      xlab("Rango de Edades") +
      ylab("Frecuencia")

    8 Análisis Estadístico

    Una función multiuso muy útil en R es summary(X), donde X puede ser uno de cualquier número de objetos, incluyendo conjuntos de datos, variables y modelos lineales, por nombrar algunos. Cuando se utiliza, el comando proporciona datos de resumen relacionados con el objeto individual que se introdujo en él. Así, la función de resumen tiene diferentes resultados dependiendo del tipo de objeto que tome como argumento. Además de ser ampliamente aplicable, este método es valioso porque a menudo proporciona exactamente lo que se necesita en términos de estadísticas de resumen.

    Usando la función summary() podemos obtener estadísticos de interes y valores de posición:

    summary(df$Horas_Semanales_de_Juego)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   10.00   15.00   15.00   18.44   20.00   41.00

    Del anterior resultado se puede observar que la hora mínima en el juego fue de 10, el 25% se ubicó en 15 horas indicando que dedicaron 15 o menor o igual a 15, al igual que el 50%, en promedio dedicaron 18,4 horas de juego, el 75% dedicó menos o igual que 20 horas y la hora que más dedicaron fue de 41.

    Por otro lado, se puede notar la función summary() no nos entrega todos los estadísticos de interés, para solucionar esto podemos hacer uso de la librería, pastecs y la función stat.desc(), como se muestra a continuación.

    library(pastecs)
    ## 
    ## Attaching package: 'pastecs'
    ## The following object is masked from 'package:tidyr':
    ## 
    ##     extract
    ## The following objects are masked from 'package:dplyr':
    ## 
    ##     first, last
    ## The following object is masked from 'package:magrittr':
    ## 
    ##     extract
    stat.desc(df)

    8.1 Caja y extensión

    Los gráficos de caja (box plots), también conocidos como diagramas de cajas y bigotes, son una representación gráfica que permite resumir las características principales de los datos (posición, dispersión, asimetría, …) e identificar la presencia de valores atípicos. En esta sección revisaremos cómo hacer box plots en R base y en ggplot2.

    Utilizando boxplot() R base

    boxplot(df$Edad, horizontal=TRUE, col='steelblue')

    Usando geom_boxplot() de la librería ggplot2

    library(tidyverse)
    library(hrbrthemes)
    library(viridis)
    ## Loading required package: viridisLite
    ## 
    ## Attaching package: 'viridis'
    ## The following object is masked from 'package:scales':
    ## 
    ##     viridis_pal
    df %>% 
      ggplot(aes(x = "", y = Edad)) +
      geom_boxplot(color = "black", fill = "yellow2", alpha = 0.5) +
      theme_ipsum() +
      theme(legend.position = "none", plot.title = element_text(size = 11)) +
      ggtitle("Distribución de las Edades") +
      coord_flip()

    ggplot(df, aes(x = Sexo, y = Edad, fill = Sexo)) +
      geom_boxplot() +
      labs(title = "Diagrama de Edades según el Sexo",
           x = "Sexo", y = "Edades") +
      scale_fill_manual(values = c("lightblue", "pink")) +
      theme_minimal()

    8.2 Coeficiente de Variación

    El coeficiente de variación (CV) es una medida estadística que se utiliza para evaluar la variabilidad relativa de una muestra o población en relación con su media. Se calcula como la desviación estándar de los datos dividida por la media, y se expresa como un porcentaje multiplicado por 100 para facilitar su interpretación.

    El CV es útil cuando se comparan distribuciones de datos con diferentes escalas o unidades, ya que normaliza la variabilidad en relación con la magnitud de los datos. Esto permite realizar comparaciones más significativas entre diferentes conjuntos de datos.

    \[CV = \left( \frac{\text{Desviación Estándar}}{\text{Media}} \right) \times 100\]

    Ahora vamos a hallar el coeficiente de variación de la variable Edad.

    media <- mean(df$Edad)
    desviacion <- sd(df$Edad)
    coef_variacion <- (desviacion / media) * 100
    cat("El coeficiente de variación es:", coef_variacion, "%\n")
    ## El coeficiente de variación es: 19.25285 %

    8.3 Asimetría

    El coeficiente de asimetría de Pearson es que es una medida estandarizada de la asimetría de una distribución de datos. Se calcula como el tercer momento estandarizado de la distribución, es decir, la diferencia promedio al cubo entre los datos y la media, dividida por la desviación estándar al cubo. Si el coeficiente de asimetría de Pearson es cero, la distribución es simétrica. Si es positivo, la cola de la distribución está en el lado derecho, y si es negativo, la cola está en el lado izquierdo. Esto proporciona información sobre la forma y dirección de la asimetría en la distribución de datos.

    \[\text{Coeficiente de Asimetría de Pearson} = \frac{E[(X - \mu)^3]}{\sigma^3}\]

    Como el coefiente de asmetría de Pearson es mayo que cero, indica que la edad presenta distribución asimetrica hacia la derecha.

    8.4 Medidas de la curtosis

    La curtosis es una medida estadística que describe la forma de la distribución de los datos en relación con una distribución normal estándar. La curtosis es una medida de la “picudez” de la distribución, es decir, cuán puntiaguda o aplanada es en comparación con una distribución normal.

    \[\text{Curtosis} = \frac{1}{n} \sum_{i=1}^{n} \left(\frac{x_i - \bar{x}}{s}\right)^4 - 3\]

    Platicúrtica: Una distribución platicúrtica es aquella que tiene un exceso de curtosis negativo en comparación con la distribución normal estándar (cuyo exceso de curtosis es 0). Esto significa que la distribución tiene colas más ligeras y es más aplanada en comparación con la distribución normal. En una distribución platicúrtica, los valores se concentran más cerca de la media y hay menos valores extremos en comparación con una distribución normal.

    Mesocúrtica: Una distribución mesocúrtica es aquella que tiene un exceso de curtosis igual a 0, es decir, su forma es similar a la de una distribución normal estándar. Esto significa que la distribución tiene una cantidad “normal” de picos y colas, y su forma se asemeja a una campana simétrica.

    Leptocúrtica: Una distribución leptocúrtica es aquella que tiene un exceso de curtosis positivo en comparación con la distribución normal estándar. Esto significa que la distribución tiene colas más pesadas y es más puntiaguda en comparación con la distribución normal. En una distribución leptocúrtica, los valores tienden a agruparse más cerca de la media y hay más valores extremos en comparación con una distribución normal.

    curtosis <- kurtosis(df$Edad)
    cat("La curtosis de la muestra es:", curtosis, "\n")
    ## La curtosis de la muestra es: 0.8255815

    9 Corte I: Ejemplo Práctico #1.

    Limpieza de Datos

    Análisis Económico de Incautaciones de Bebidas Alcohólicas Fraudulentas y de Contrabando

    Se dispone de una base de datos que recopila información sobre incautaciones de bebidas alcohólicas fraudulentas y de contrabando en una ciudad determinada. Este conjunto de datos es de especial interés para el campo de la economía y la administración pública, ya que permite estudiar los impactos del comercio ilegal sobre el mercado formal, los precios, la calidad de los productos y la seguridad del consumidor.

    Las variables incluidas son:

    TL (Tipo de licor): Identifica la categoría de la bebida alcohólica incautada (ron, aguardiente, whisky, etc.).

    PI (Precio de incautación): Corresponde al precio de venta por unidad en el establecimiento donde se detectó el producto, lo que permite analizar diferencias entre el mercado formal e informal.

    GAE (Grados de alcohol en etiqueta): Información declarada por el fabricante en la etiqueta, relevante para examinar prácticas de engaño al consumidor.

    GAQ (Grados de alcohol en prueba química): Resultado real obtenido mediante análisis de laboratorio, útil para contrastar con la información de la etiqueta y estimar riesgos asociados a la salud.

    CE (Cantidad estandarizada): Expresada en unidades de 750 ml, lo que permite comparar volúmenes de producto independientemente del tamaño original del envase.

    El análisis de esta información ofrece insumos para:

    Estimar las pérdidas fiscales derivadas del contrabando y la falsificación.

    Evaluar las distorsiones en precios entre el mercado formal e informal.

    Medir la magnitud del consumo riesgoso, considerando discrepancias entre grados de alcohol declarados y reales.

    Apoyar la formulación de políticas públicas de control y regulación del comercio ilícito de bebidas alcohólicas.

    Este enfoque económico permite comprender la dinámica del contrabando como un fenómeno que no solo afecta la recaudación tributaria y la competitividad empresarial, sino que también tiene externalidades negativas en la salud pública y la confianza de los consumidores.

    Puede acceder a la base de datos en el siguiente enlace: BASE_DATOS.xlsx.

    url_base_Datos <-"https://raw.github.com/Kalbam/Datos/blob/main/BASE_DATOS.xlsx"
    require(readxl) 
    direccion="BASE_DATOS.xlsx"
    DATOS<-read_excel(direccion,sheet="datos")

    NOTA: La función read_excel importa un objeto tibble, que es en esencia un data.frame, pero que cuenta con algunas ventajas estéticas en las presentaciones e informes.

    9.0.1 caracteristica generales de los datos

    Verifiquemos que leímos bien los datos viendo el encabezado y la cola de los datos:

    head(DATOS)
    tail(DATOS)

    Las dimensiones, los nombres de las columnas y la estructura de la base de datos se obtienen con los códigos:

    dim(DATOS) # dimensiones de los datos
    ## [1] 300   5
    colnames(DATOS) # Nombres de las columnas o variables
    ## [1] "TL"  "PI"  "GAE" "GAQ" "CE"
    str(DATOS)
    ## tibble [300 × 5] (S3: tbl_df/tbl/data.frame)
    ##  $ TL : chr [1:300] "Aguardiente" "Aguardiente" "Aguardiente" "Aguardiente" ...
    ##  $ PI : num [1:300] 21470 26422 19737 30240 28374 ...
    ##  $ GAE: num [1:300] 29 29 29 29 38 38 29 38 38 38 ...
    ##  $ GAQ: num [1:300] 25.1 29 25.3 29 33.5 ...
    ##  $ CE : num [1:300] 251 262 289 266 232 ...

    Otra función que funciona igual a str es glimpse, que hace parte del paquete tibble:

    require(tibble)
    glimpse(DATOS)
    ## Rows: 300
    ## Columns: 5
    ## $ TL  <chr> "Aguardiente", "Aguardiente", "Aguardiente", "Aguardiente", "Tequi…
    ## $ PI  <dbl> 21470, 26422, 19737, 30240, 28374, 33601, 33207, 33029, 30964, 309…
    ## $ GAE <dbl> 29, 29, 29, 29, 38, 38, 29, 38, 38, 38, 29, 29, 29, 35, 29, 38, 29…
    ## $ GAQ <dbl> 25.143, 29.000, 25.288, 29.000, 33.516, 31.198, 29.000, 33.060, NA…
    ## $ CE  <dbl> 250.6536, 261.7272, 289.1134, 266.3064, 231.7978, 248.8542, 252.57…
     summary(DATOS)
    ##          TL            PI              GAE             GAQ       
    ##  Length   :300   Min.   : 16308   Min.   :29.00   Min.   :24.27  
    ##  N.unique :  7   1st Qu.: 26682   1st Qu.:29.00   1st Qu.:26.04  
    ##  N.blank  :  0   Median : 29390   Median :35.00   Median :30.07  
    ##  Min.nchar:  3   Mean   : 31846   Mean   :33.54   Mean   :30.74  
    ##  Max.nchar: 12   3rd Qu.: 32751   3rd Qu.:38.00   3rd Qu.:34.10  
    ##  NAs      :  1   Max.   :430091   Max.   :40.00   Max.   :40.00  
    ##                  NAs    :5                        NAs    :2      
    ##        CE       
    ##  Min.   :  0.0  
    ##  1st Qu.:239.4  
    ##  Median :250.3  
    ##  Mean   :249.6  
    ##  3rd Qu.:261.7  
    ##  Max.   :296.5  
    ##  NAs    :3

    9.0.2 Considere el resumen individual de las variables numéricas:

    summary(DATOS$PI)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.     NAs 
    ##   16308   26682   29390   31846   32751  430091       5
    summary(DATOS$GAE)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   29.00   29.00   35.00   33.54   38.00   40.00
    summary(DATOS$GAQ)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.     NAs 
    ##   24.27   26.04   30.07   30.74   34.10   40.00       2

    9.0.3 Análisis Descriptivo Individual Variable categórica

    Para hacer una tabla de frecuencias de las variables categóricas es necesario transformar primero la variable en factor:

    # Se transforma primero en factor
     TL_FACTOR<- as.factor(DATOS$TL)
     # Se obtiene el resumen
     summary(TL_FACTOR)
    ##  Aguardiente Aguardientre          Ron          Run      Tequila       Whiski 
    ##          131            1           60            1           85            1 
    ##       Whisky          NAs 
    ##           20            1

    Otra forma de obtener una tabla de frecuencias para las variables categóricas consiste en utilizar la función table del paquete base, que se carga automáticamente cuando abrimos una sesión del R o del R-Studio:

    table(DATOS$TL)
    ## 
    ##  Aguardiente Aguardientre          Ron          Run      Tequila       Whiski 
    ##          131            1           60            1           85            1 
    ##       Whisky 
    ##           20

    Para extraer los nombres de las categorías de una variable categórica usamos la función labels del paquete base:

    unique(DATOS$TL)
    ## [1] "Aguardiente"  "Tequila"      "Ron"          "Whisky"       "Run"         
    ## [6] NA             "Whiski"       "Aguardientre"

    Reemplazar los nombres de las categorías mal codificadas, utilizamos la función str_replace del paquete stringr y lo guardamos ya corregido directamente en la variable TL de DATOS:

    require(stringr)
    
    
    DATOS$TL <- str_replace(DATOS$TL, "Aguardientre", "Aguardiente")
    
    unique(DATOS$TL)
    ## [1] "Aguardiente" "Tequila"     "Ron"         "Whisky"      "Run"        
    ## [6] NA            "Whiski"

    Reemplazar los nombres de las categorías mal codificadas, utilizamos la función str_replace del paquete stringr y lo guardamos ya corregido directamente en la variable TL de DATOS:

    require(stringr)
    
    reemplazos <- c("Run" = "Ron", "Whiski" = "Whisky")
    
    DATOS$TL <- str_replace_all(DATOS$TL, reemplazos)
    
    unique(DATOS$TL)
    ## [1] "Aguardiente" "Tequila"     "Ron"         "Whisky"      NA

    9.0.4 Identificando valores NA:

    is.na(DATOS[1:10,]) # Identifica cuáles valores son NA
    ##          TL    PI   GAE   GAQ    CE
    ##  [1,] FALSE FALSE FALSE FALSE FALSE
    ##  [2,] FALSE FALSE FALSE FALSE FALSE
    ##  [3,] FALSE FALSE FALSE FALSE FALSE
    ##  [4,] FALSE FALSE FALSE FALSE FALSE
    ##  [5,] FALSE FALSE FALSE FALSE FALSE
    ##  [6,] FALSE FALSE FALSE FALSE FALSE
    ##  [7,] FALSE FALSE FALSE FALSE FALSE
    ##  [8,] FALSE FALSE FALSE FALSE FALSE
    ##  [9,] FALSE FALSE FALSE  TRUE FALSE
    ## [10,] FALSE FALSE FALSE FALSE FALSE
    is.na(DATOS$TL) # Identifica cuáles valores son NA en TL
    ##   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    ## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

    9.0.5 Identificando valores NA por columna:

     NAS_TL<-is.na(DATOS$TL) #GuardamosenNAS_TL
     DATOS[NAS_TL,] #FiltramosporlosNASdeTL
    NAS_PI<-is.na(DATOS$PI) # Guardamos en NAS_PI
     DATOS[NAS_TL | NAS_PI,] # Filtramos por los NAS de TL y PI

    9.0.6 Identificando las filas con al menos un NA:

    La función complete.cases del paquete stats nos muestra cuáles filas tienen datos en TODAS sus columnas:

    complete.cases(DATOS)
    ##   [1]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
    ##  [13]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [25]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [37]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [49]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [61]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [73] FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [85]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
    ##  [97]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE
    ## [109]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE
    ## [121]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE
    ## [133]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [145]  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [157]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [169]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [181]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [193]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [205]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [217]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [229]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [241]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [253]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [265]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [277]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE
    ## [289]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE

    Cuando negamos estos casos completos obtenemos las filas donde hay al menos un valor faltante, es decir,

    !complete.cases(DATOS)
    ##   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    ##  [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [73]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ##  [85] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    ##  [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE
    ## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE
    ## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
    ## [133] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    ## [145] FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [169] FALSE FALSE FALSE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE
    ## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
    ## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

    Guardamos los valores anteriores en un vector para luego filtrar por las filas donde hay al menos un valor NA:

    NAS_ALL <- !complete.cases(DATOS)
    
    DATOS[NAS_ALL, ]  # Filas donde hay al menos un valor NA

    9.0.7 Gráfica que identifica los NA en cada variable:

    suppressWarnings(require(Amelia))
    ## Loading required package: Amelia
    ## Loading required package: Rcpp
    ## ## 
    ## ## Amelia II: Multiple Imputation
    ## ## (Version 1.8.3, built: 2024-11-07)
    ## ## Copyright (C) 2005-2026 James Honaker, Gary King and Matthew Blackwell
    ## ## Refer to http://gking.harvard.edu/amelia/ for more information
    ## ##
    suppressWarnings(missmap(DATOS))

    summary(DATOS)# Analicemos las mediadas de tendencia
    ##          TL            PI              GAE             GAQ       
    ##  Length   :300   Min.   : 16308   Min.   :29.00   Min.   :24.27  
    ##  N.unique :  4   1st Qu.: 26682   1st Qu.:29.00   1st Qu.:26.04  
    ##  N.blank  :  0   Median : 29390   Median :35.00   Median :30.07  
    ##  Min.nchar:  3   Mean   : 31846   Mean   :33.54   Mean   :30.74  
    ##  Max.nchar: 11   3rd Qu.: 32751   3rd Qu.:38.00   3rd Qu.:34.10  
    ##  NAs      :  1   Max.   :430091   Max.   :40.00   Max.   :40.00  
    ##                  NAs    :5                        NAs    :2      
    ##        CE       
    ##  Min.   :  0.0  
    ##  1st Qu.:239.4  
    ##  Median :250.3  
    ##  Mean   :249.6  
    ##  3rd Qu.:261.7  
    ##  Max.   :296.5  
    ##  NAs    :3

    9.0.8 Identificando los valores atípicos:

     par(mfrow=c(1,4))
     boxplot(DATOS$PI,main="PI")
     boxplot(DATOS$GAE,main="GAE")
     boxplot(DATOS$GAQ,main="GAQ")
     boxplot(DATOS$CE,main="CE")

    De los gráficos anteriores podemos ver que:

    • La variable PI tiene algunos valores atípicos muy altos.
    • Las variables GAE y GAQ NO presentan valores atípicos muy altos o muy bajos.
    • La variable CE presenta valores atípicos muy bajos.

    Filtramos los datos sin los valores atípicos de la variable PI y de la variable CE, filtrando con la función filter del paquete dplyr con el siguiente código:

    require(dplyr)
    filter(DATOS, PI > 100000)
    filter(DATOS, CE < 200)

    Reemplazamos los valores atípicos por valores NA (lo cual es equivalente a eliminarlos):

    DATOS$PI[DATOS$PI > 100000] <- NA
    DATOS$CE[DATOS$CE < 200] <- NA

    Repetimos los gráficos boxplot:

    par(mfrow=c(1,4))
     boxplot(DATOS$PI,main="PI")
     boxplot(DATOS$GAE,main="GAE")
     boxplot(DATOS$GAQ,main="GAQ")
     boxplot(DATOS$CE,main="CE")

    9.0.9 Reemplazando los valores NA de la variable Númerica:

    Si se supone que estas variables tienen Distribución normal, se modifican por la Media, de lo contrario seria por la Mediana, como técnica básica de Imputación de datos.

    Calculamos la media de las columnas numéricas con la función colMeans del paquete base. Para esto primero excluimos la variable categórica TL que se encuentra en la columna 1:

    medias <- colMeans(DATOS[,-1], na.rm = TRUE)
    medias
    ##          PI         GAE         GAQ          CE 
    ## 29518.52560    33.54000    30.74141   250.49003

    El argumento na.rm=TRUE permite calcular las medias de los datos que no son NA.

    9.0.10 Verificamos que ya no hay valores NA en las variables numéricas:

    Para esto usamos la función replace_na del paquete tidyr:

    require(tidyr)  # Cargamos el paquete
    
    # Creamos una lista con los reemplazos:
    reemplazos <- list(PI = medias[1], GAE = medias[2], GAQ = medias[3], CE = medias[4])
    
    # Reemplazamos y guardamos en DATOS:
    DATOS <- replace_na(DATOS, reemplazos)
    summary(DATOS)
    ##          TL            PI             GAE             GAQ       
    ##  Length   :300   Min.   :16308   Min.   :29.00   Min.   :24.27  
    ##  N.unique :  4   1st Qu.:26710   1st Qu.:29.00   1st Qu.:26.04  
    ##  N.blank  :  0   Median :29519   Median :35.00   Median :30.22  
    ##  Min.nchar:  3   Mean   :29519   Mean   :33.54   Mean   :30.74  
    ##  Max.nchar: 11   3rd Qu.:32459   3rd Qu.:38.00   3rd Qu.:34.07  
    ##  NAs      :  1   Max.   :42022   Max.   :40.00   Max.   :40.00  
    ##        CE       
    ##  Min.   :210.9  
    ##  1st Qu.:239.7  
    ##  Median :250.5  
    ##  Mean   :250.5  
    ##  3rd Qu.:261.5  
    ##  Max.   :296.5

    9.0.11 Reemplazando los valores NA de la variable categórica:

    unique(DATOS$TL)
    ## [1] "Aguardiente" "Tequila"     "Ron"         "Whisky"      NA
    FACTOR_TL<-as.factor(DATOS$TL) #Convertimos en factorTL
     FRECUENCIAS_TL<-summary(FACTOR_TL) #Tabla de frecuencias
     barplot(FRECUENCIAS_TL) #Graficamos las frecuencias

    Si decidimos reemplazar por el valor más frecuente, lo cual NO es recomendable, lo hacemos con el código:

    reemplazos <- list(TL = "Aguardiente")
    DATOS <- replace_na(DATOS, reemplazos)
    
    # Verificamos el cambio:
    unique(DATOS$TL)
    ## [1] "Aguardiente" "Tequila"     "Ron"         "Whisky"
     FACTOR_TL<-as.factor(DATOS$TL) #Convertimos enfactor TL
     FRECUENCIAS_TL<-summary(FACTOR_TL) #Tabla de frecuencias
     barplot(FRECUENCIAS_TL) #Graficamos las frecuencias

    9.0.12 Finalmente se realiza el esquema de los Datos y se verifica que no se encuentren NAS

    suppressWarnings(missmap(DATOS))

    Una vez realizado el procesamiento y limpieza de los datos, el siguiente paso consiste en efectuar el análisis exploratorio de datos. Para ello, continúe el ejercicio representando gráficamente las variables de mayor interés.

    10 Corte I: Ejemplo Práctico #2:

    Interacciones entre Factores Organizacionales y Percepción del Entorno Económico-Empresarial

    El estudio de la economía y la administración no se limita a cifras macroeconómicas o indicadores financieros, sino también a cómo los individuos dentro de las organizaciones perciben, reaccionan e interactúan con su entorno económico y laboral. Factores como el nivel de estrés, la resiliencia organizacional y la percepción de equidad en el trabajo pueden influir directamente en la productividad, la innovación, la toma de decisiones y la confianza en las instituciones económicas.

    10.0.1 Variables Incluidas

    • ID – Identificador único de cada participante.
    • Edad – Edad del encuestado (18 a 65 años).
    • Género – Masculino, Femenino, No binario.
    • Nivel de estrés laboral – Escala de 1 a 10.
    • Nivel de resiliencia organizacional – Escala de 1 a 10.
    • Índice de satisfacción laboral (0-100) – Medición autoinformada sobre la satisfacción en el entorno de trabajo.
    • Horas de interacción con clientes por semana – Tiempo invertido en la atención y gestión de relaciones con clientes.
    • Conocimiento en gestión financiera (0-100) – Escala que mide el nivel de información sobre temas administrativos y financieros.
    • Apertura a la innovación (0-10) – Grado de disposición a implementar nuevas tecnologías y procesos.
    • Nivel de preocupación por la economía nacional (0-10) – Grado de inquietud respecto a la situación económica del país y su impacto en el negocio.
    • Participación en asociaciones empresariales – Sí / No, sobre la afiliación a gremios o cámaras de comercio.
    • Grado de liderazgo empresarial (0-10) – Nivel de participación en la toma de decisiones estratégicas dentro de la organización.
    • Percepción de equidad salarial (0-10) – Opinión sobre la justicia y equidad en la distribución de ingresos dentro de la empresa.
    • Horas semanales dedicadas a capacitación en administración y economía – Tiempo invertido en formación continua y actualización profesional.

    La base de datos utilizada para este análisis, se encuentra disponible en el siguiente repositorio: GitHub - Kalbam/Datos.

    Antes de aplicar las técnicas de estadística II se debe realizar un:

    10.1 Análisis Exploratorio de Datos

    En primer lugar analizamos las dimensiones de la base de datos:

    #Necesitas instalar los sigueintes paquetes
    #if (!require("readxl")) install.packages("readxl", dependencies=TRUE)
    #if (!require("ggplot2")) install.packages("ggplot2", dependencies=TRUE)
    #if (!require("dplyr")) install.packages("dplyr", dependencies=TRUE)
    #if (!require("corrplot")) install.packages("corrplot", dependencies=TRUE)
    #if (!require("ggpubr")) install.packages("ggpubr", dependencies=TRUE)
    library(readxl)
    library(ggplot2)
    library(dplyr)
    library(corrplot)
    ## corrplot 0.95 loaded
    library(ggpubr)
    data <- read_excel("Base_Datos_Economia.xlsx", sheet = "Sheet1")
    dim(data)
    ## [1] 100  14

    Luego de visualizar la base de datos, se observa que consta de 100 observaciones con 14 variables. Además, se revela que la base de datos no cuenta con valores NA. A continuacion un resumen de las variables númericas

    library(Amelia)
    
    # Convertir a data frame clásico
    data_df <- as.data.frame(data)
    
    # Visualizar los NA
    missmap(data_df)

    summary(data)
    ##        ID              Edad             Género    Nivel de depresión
    ##  Min.   :  1.00   Min.   :19.00   Length   :100   Min.   : 1.00     
    ##  1st Qu.: 25.75   1st Qu.:30.00   N.unique :  3   1st Qu.: 3.00     
    ##  Median : 50.50   Median :44.50   N.blank  :  0   Median : 5.50     
    ##  Mean   : 50.50   Mean   :42.31   Min.nchar:  8   Mean   : 5.38     
    ##  3rd Qu.: 75.25   3rd Qu.:54.25   Max.nchar: 10   3rd Qu.: 8.00     
    ##  Max.   :100.00   Max.   :63.00                   Max.   :10.00     
    ##  Nivel de resiliencia Índice de felicidad global (0-100)
    ##  Min.   : 1.0         Min.   : 0.00                     
    ##  1st Qu.: 3.0         1st Qu.:29.75                     
    ##  Median : 5.0         Median :61.50                     
    ##  Mean   : 5.5         Mean   :53.48                     
    ##  3rd Qu.: 8.0         3rd Qu.:77.50                     
    ##  Max.   :10.0         Max.   :98.00                     
    ##  Horas de interacción con extranjeros por semana
    ##  Min.   : 0.00                                  
    ##  1st Qu.: 5.75                                  
    ##  Median :11.00                                  
    ##  Mean   :10.41                                  
    ##  3rd Qu.:15.00                                  
    ##  Max.   :20.00                                  
    ##  Conocimiento en política internacional (0-100) Apertura a la migración (0-10)
    ##  Min.   :  1.00                                 Min.   : 0.00                 
    ##  1st Qu.: 20.75                                 1st Qu.: 2.00                 
    ##  Median : 42.00                                 Median : 4.00                 
    ##  Mean   : 45.10                                 Mean   : 4.28                 
    ##  3rd Qu.: 69.00                                 3rd Qu.: 7.00                 
    ##  Max.   :100.00                                 Max.   :10.00                 
    ##  Nivel de preocupación por conflictos internacionales (0-10)
    ##  Min.   : 0.00                                              
    ##  1st Qu.: 2.00                                              
    ##  Median : 4.00                                              
    ##  Mean   : 4.48                                              
    ##  3rd Qu.: 7.00                                              
    ##  Max.   :10.00                                              
    ##  Participación en ONGs internacionales Grado de activismo político (0-10)
    ##  Length   :100                         Min.   : 0.00                     
    ##  N.unique :  2                         1st Qu.: 3.00                     
    ##  N.blank  :  0                         Median : 5.00                     
    ##  Min.nchar:  2                         Mean   : 4.93                     
    ##  Max.nchar:  2                         3rd Qu.: 7.00                     
    ##                                        Max.   :10.00                     
    ##  Percepción de equidad global (0-10) Horas semanales dedicadas a temas de RRII
    ##  Min.   : 0.00                       Min.   : 0.00                            
    ##  1st Qu.: 3.00                       1st Qu.: 5.00                            
    ##  Median : 5.00                       Median : 9.00                            
    ##  Mean   : 5.34                       Mean   :10.11                            
    ##  3rd Qu.: 8.00                       3rd Qu.:16.00                            
    ##  Max.   :10.00                       Max.   :20.00

    La muestra analizada presenta un rango de edad entre 19 y 63 años, con una media de 42.31 años y una mediana de 44.50 años. El nivel de depresión varía entre 1 y 10, con una media de 5.38 y una mediana de 5.50, donde el 25% de los participantes tienen valores inferiores a 3 y el 75% inferiores a 8. En cuanto a la resiliencia, su distribución es equilibrada, con valores entre 1 y 10, y una media y mediana de 5. El índice de felicidad global presenta una amplia variabilidad (0-98), con una media de 53.48 y una mediana de 61.50, mostrando una distribución sesgada a la izquierda. Se recomienda analizar las correlaciones entre resiliencia, felicidad y depresión para comprender mejor los patrones de bienestar psicológico.

    10.2 Análisis Univariados

    10.2.1 Distribución de Edad

    ggplot(data, aes(x = Edad)) +
      geom_histogram(binwidth = 5, fill = "skyblue", color = "black") +
      theme_minimal() +
      ggtitle("Distribución de Edad")

    El histograma muestra la distribución de edades en la base de datos, con un rango que va aproximadamente de los 18 a los 70 años. Se observa una mayor concentración de individuos en los grupos de edad entre los 25 y 30 años, así como entre los 50 y 60 años, lo que indica posibles picos en la frecuencia de participantes en estas edades.

    10.2.2 Distribución de la muestra por Género

    La distribución no es completamente uniforme, ya que hay fluctuaciones en la cantidad de observaciones por intervalo, lo que sugiere que algunos rangos de edad están mejor representados que otros en la muestra. También se nota una menor cantidad de individuos en los extremos de la distribución, especialmente en edades cercanas a los 70 años.

    gender_counts <- data %>% 
      count(Género) 
    
    kable(gender_counts, format = "html") %>% 
      kable_styling("striped", full_width = FALSE)
    Género n
    Femenino 43
    Masculino 45
    No binario 12
    library(ggplot2)
    
    ggplot(data, aes(x = Género, fill = Género)) +
      geom_bar(color = "black", alpha = 0.7) +
      geom_text(stat = "count", aes(label = ..count..), vjust = -0.5) +
      scale_fill_manual(values = c("skyblue", "lightcoral", "plum")) +
      labs(title = "Distribución de la muestra por Género",
           x = "Género",
           y = "Frecuencia") +
      theme_minimal() +
      theme(legend.position = "none",
            plot.title = element_text(hjust = 0.5, size = 14, face = "bold"))

    La muestra está compuesta por Masculino ≈ 45%, Femenino ≈ 43% y No binario ≈ 12%.

    Se observa equilibrio entre hombres y mujeres, lo que facilita comparaciones entre estos dos grupos.

    El grupo No binario es menor pero relevante para un análisis inclusivo; conviene reportar intervalos de confianza o evitar sobre-interpretar diferencias para este subgrupo por su menor tamaño.

    10.3 Análisis Bivariados

    ggplot(data, aes(x = Género, y = `Nivel de depresión`, fill = Género)) +
      geom_boxplot() +
      theme_minimal() +
      ggtitle("Nivel de Depresión por Género")

    El gráfico de cajas muestra la distribución del nivel de depresión según el género de los participantes en la base de datos. Se observan diferencias en la mediana y la dispersión de los valores entre los grupos.

    • Femenino: Presenta una mediana de nivel de depresión intermedia en comparación con los otros géneros, con una distribución más concentrada y menor dispersión.
    • Masculino: Se observa una mayor dispersión en los datos, con valores más extremos, lo que sugiere una mayor variabilidad en los niveles de depresión en este grupo.
    • No binario: Tiene una distribución más uniforme y una mediana de nivel de depresión ligeramente superior a la del grupo femenino.

    En general, se pueden notar diferencias en la variabilidad y centralidad del nivel de depresión según el género, lo que sugiere posibles factores diferenciales que influyen en la distribución de la variable analizada.

    ggplot(data, aes(x = `Nivel de resiliencia`, y = `Índice de felicidad global (0-100)`)) +
      geom_point(color = "blue") +
      geom_smooth(method = "lm", se = FALSE, color = "red") +
      theme_minimal() +
      ggtitle("Relación entre Resiliencia y Felicidad")
    ## `geom_smooth()` using formula = 'y ~ x'

    El gráfico de dispersión representa la relación entre el nivel de resiliencia y el índice de felicidad global (0-100). Se observa que los datos están distribuidos de manera dispersa, sin un patrón claramente definido.

    La línea de tendencia en rojo indica una leve pendiente negativa, lo que sugiere una relación inversa muy débil entre resiliencia y felicidad. Es decir, a medida que el nivel de resiliencia aumenta, el índice de felicidad tiende a disminuir ligeramente, aunque la dispersión de los datos indica que esta relación no es fuerte ni consistente.

    En general, la gran variabilidad en los datos sugiere que existen otros factores que podrían estar influyendo en la felicidad más allá de la resiliencia.

    11 Corte I: Taller 20%

    Como actividad de cierre del primer corte, deberán realizar en grupos de 3 integrantes un análisis descriptivo de una base de datos relacionada con las áreas de Economía, Administración o Negocios.

    Las bases de datos y el archivo de Excel con las orientaciones, el contexto, la pregunta problema, el diccionario de variables y las preguntas que deben resolver se encuentran disponibles en el siguiente repositorio:

    https://github.com/Kalbam/Data_Est_I

    Cada grupo deberá seleccionar una base de datos que le sea asignada. Todas las bases contienen 200 observaciones y cinco variables de distinta naturaleza:

    • cuantitativas continuas;
    • cuantitativas de conteo;
    • cualitativas nominales;
    • cualitativas ordinales.

    11.1 El trabajo deberá desarrollarse en R e incluir:

    1. Identificación de la población, la muestra y la unidad de análisis.
    2. Clasificación de las variables.
    3. Construcción de tablas de frecuencias.
    4. Elaboración de gráficos adecuados para cada tipo de variable.
    5. Cálculo e interpretación de medidas de:
      • tendencia central;
      • posición;
      • dispersión.
    6. Identificación de posibles valores atípicos.
    7. Comparación de grupos cuando corresponda.
    8. Respuesta a la pregunta problema.
    9. Interpretación de los resultados obtenidos en las tablas y gráficos.
    10. Respuesta argumentada a la pregunta final, sustentada en la evidencia estadística.

    Importante: El trabajo no debe limitarse a presentar código, cálculos o gráficos. Cada resultado debe estar acompañado de una interpretación relacionada con el contexto de la base de datos.

    Por ejemplo, después de elaborar un gráfico deberán explicar:

    • qué comportamiento se observa;
    • qué categorías o grupos presentan mayores o menores valores;
    • qué diferencias son relevantes;
    • qué decisión podría tomarse a partir de los resultados.

    11.2 Archivos disponibles

    En el repositorio encontrarán:

    • los archivos .csv correspondientes a las doce bases de datos;
    • el documento Cuadro_Orientaciones_Act_bases_Corte_I.xlsx, que contiene:
      • el contexto de cada caso;
      • la pregunta problema;
      • el diccionario de variables;
      • las orientaciones específicas;
      • las preguntas que debe resolver cada grupo.

    11.3 Ruta sugerida para el análisis

    \[ \boxed{ \text{Contexto} \rightarrow \text{Datos} \rightarrow \text{Variables} \rightarrow \text{Análisis descriptivo} \rightarrow \text{Gráficos} \rightarrow \text{Interpretación} \rightarrow \text{Conclusión} } \]

    11.4 Recomendación para la entrega

    Organicen el documento en R Markdown utilizando, como mínimo, las siguientes secciones:

    11.4.1 1. Contexto y pregunta problema

    Describan brevemente el caso asignado y presenten la pregunta que orientará el análisis.

    11.4.2 2. Población, muestra y unidad de análisis

    Identifiquen claramente estos tres elementos.

    11.4.3 3. Variables

    Presenten y clasifiquen cada variable según su naturaleza.

    11.4.4 4. Análisis descriptivo

    Incluyan las medidas estadísticas que sean pertinentes para cada variable.

    11.4.5 5. Tablas y gráficos

    Construyan tablas de frecuencias y representaciones gráficas apropiadas.

    11.4.6 6. Valores atípicos

    Identifiquen y analicen posibles observaciones atípicas cuando corresponda.

    11.4.7 7. Comparación de grupos

    Realicen comparaciones cuando el contexto de la base lo permita.

    11.4.8 8. Respuesta a la pregunta problema

    Utilicen los resultados obtenidos para responder de manera argumentada.

    11.4.9 9. Conclusión

    Presenten una conclusión sustentada en la evidencia estadística obtenida durante el análisis.

    Recuerden: una gráfica o una tabla sin interpretación está incompleta. El objetivo es utilizar la estadística para describir, comparar, interpretar y sustentar decisiones.

    12 Corte III: Variables aleatorias discretas

    12.1 1. Variables aleatorias discretas

    Una variable aleatoria discreta toma valores aislados o contables.

    Por ejemplo:

    \[ X=\text{número de compras realizadas por un cliente} \]

    podría tomar los valores:

    \[ X=0,1,2,3,\ldots \]

    Otros ejemplos son:

    • número de clientes que compran;
    • número de créditos en mora;
    • número de reclamos recibidos;
    • número de productos defectuosos;
    • número de llamadas hasta conseguir una venta.

    12.2 2. Distribución de probabilidad discreta

    Una distribución de probabilidad asigna una probabilidad a cada posible valor de \(X\).

    Debe cumplirse:

    \[ P(X=x)\geq0 \]

    y:

    \[ \sum_x P(X=x)=1 \]

    12.2.1 Ejemplo

    Supongamos que el número de compras semanales de un cliente tiene la siguiente distribución:

    x <- c(0, 1, 2, 3)
    
    prob <- c(
      0.20,
      0.45,
      0.25,
      0.10
    )
    
    distribucion <- data.frame(
      Compras = x,
      Probabilidad = prob
    )
    
    distribucion

    Comprobamos:

    sum(prob)
    ## [1] 1

    12.2.2 Gráfica

    barplot(
      prob,
      names.arg = x,
      main = "Distribución del número de compras",
      xlab = "Número de compras",
      ylab = "Probabilidad"
    )

    12.2.3 Algunas probabilidades

    Probabilidad de exactamente una compra:

    prob[x == 1]
    ## [1] 0.45

    Probabilidad de máximo una compra:

    sum(prob[x <= 1])
    ## [1] 0.65

    Probabilidad de dos o más compras:

    sum(prob[x >= 2])
    ## [1] 0.35

    12.3 3. Valor esperado

    El valor esperado de una variable aleatoria discreta es:

    \[ E(X)=\sum_x xP(X=x) \]

    En R:

    EX <- sum(x * prob)
    
    EX
    ## [1] 1.25

    12.3.1 Interpretación

    El valor esperado representa el comportamiento promedio de la variable a largo plazo.

    12.4 4. Varianza y desviación estándar

    La varianza se puede calcular como:

    \[ Var(X)=E(X^2)-[E(X)]^2 \]

    Primero:

    EX2 <- sum(x^2 * prob)
    
    EX2
    ## [1] 2.35

    Luego:

    varX <- EX2 - EX^2
    
    varX
    ## [1] 0.7875

    Desviación estándar:

    sdX <- sqrt(varX)
    
    sdX
    ## [1] 0.887412

    12.5 5. Distribución Bernoulli

    12.5.1 Contexto financiero

    Un banco registra si un cliente entra o no en mora.

    Definimos:

    \[ X= \begin{cases} 1, & \text{entra en mora},\\ 0, & \text{no entra en mora}. \end{cases} \]

    Supongamos:

    \[ p=0.12 \]

    Entonces:

    \[ X\sim Bernoulli(0.12) \]

    12.5.2 Simulación

    mora <- rbinom(
      n = 500,
      size = 1,
      prob = 0.12
    )
    
    head(mora)
    ## [1] 0 0 0 1 1 0

    12.5.3 Tabla

    table(mora)
    ## mora
    ##   0   1 
    ## 444  56

    12.5.4 Proporciones

    prop.table(
      table(mora)
    )
    ## mora
    ##     0     1 
    ## 0.888 0.112

    12.5.5 Gráfica

    barplot(
      prop.table(table(mora)),
      names.arg = c("No mora", "Mora"),
      main = "Estado de mora de los clientes",
      xlab = "Estado",
      ylab = "Proporción"
    )

    12.5.6 Media y varianza

    Para una Bernoulli:

    \[ E(X)=p \]

    \[ Var(X)=p(1-p) \]

    p <- 0.12
    
    media_bernoulli <- p
    var_bernoulli <- p * (1 - p)
    
    media_bernoulli
    ## [1] 0.12
    var_bernoulli
    ## [1] 0.1056

    12.6 6. Distribución Binomial

    12.6.1 Contexto de marketing

    Una empresa envía una promoción a 20 clientes.

    La probabilidad de compra es:

    \[ p=0.30 \]

    Definimos:

    \[ X=\text{número de clientes que compran} \]

    Entonces:

    \[ X\sim Binomial(20,0.30) \]

    12.6.2 Exactamente 6 compradores

    dbinom(
      x = 6,
      size = 20,
      prob = 0.30
    )
    ## [1] 0.191639

    Esto calcula:

    \[ P(X=6) \]

    12.6.3 Máximo 6 compradores

    pbinom(
      q = 6,
      size = 20,
      prob = 0.30
    )
    ## [1] 0.6080098

    Es decir:

    \[ P(X\leq6) \]

    12.7 Más de 6 compradores

    1 - pbinom(
      q = 6,
      size = 20,
      prob = 0.30
    )
    ## [1] 0.3919902

    Es decir:

    \[ P(X>6) \]

    12.7.1 Distribución completa

    x_bin <- 0:20
    
    prob_bin <- dbinom(
      x_bin,
      size = 20,
      prob = 0.30
    )
    
    plot(
      x_bin,
      prob_bin,
      type = "h",
      lwd = 5,
      main = "Distribución Binomial",
      xlab = "Número de compradores",
      ylab = "Probabilidad"
    )
    
    points(
      x_bin,
      prob_bin,
      pch = 19
    )

    12.7.2 Media y varianza

    \[ E(X)=np \]

    \[ Var(X)=np(1-p) \]

    n <- 20
    p <- 0.30
    
    media_bin <- n * p
    var_bin <- n * p * (1 - p)
    
    media_bin
    ## [1] 6
    var_bin
    ## [1] 4.2

    12.8 7. Distribución Geométrica

    12.8.1 Contexto de ventas

    Un vendedor tiene una probabilidad:

    \[ p=0.20 \]

    de cerrar una venta en cada llamada.

    Definimos:

    \[ X=\text{número de llamadas hasta conseguir la primera venta} \]

    12.8.2 Primera venta en la cuarta llamada

    Matemáticamente:

    \[ P(X=4) = (1-p)^3p \]

    En R, dgeom() cuenta el número de fracasos antes del primer éxito.

    Por eso:

    dgeom(
      x = 3,
      prob = 0.20
    )
    ## [1] 0.1024

    Esto corresponde a que hubo 3 fracasos y luego ocurrió el primer éxito.

    12.8.3 Cálculo manual

    (1 - 0.20)^3 * 0.20
    ## [1] 0.1024

    12.8.4 Gráfica

    llamadas <- 1:15
    
    prob_geo <- dgeom(
      llamadas - 1,
      prob = 0.20
    )
    
    plot(
      llamadas,
      prob_geo,
      type = "h",
      lwd = 5,
      main = "Llamadas hasta la primera venta",
      xlab = "Número de llamada",
      ylab = "Probabilidad"
    )
    
    points(
      llamadas,
      prob_geo,
      pch = 19
    )

    12.8.5 Valor esperado

    Si \(X\) es el número de ensayos hasta el primer éxito:

    \[ E(X)=\frac{1}{p} \]

    1 / 0.20
    ## [1] 5

    Interpretación:

    En promedio se requieren aproximadamente 5 llamadas para obtener la primera venta.

    12.9 8. Distribución Binomial Negativa

    12.9.1 Contexto comercial

    Supongamos que la probabilidad de cerrar una venta es:

    \[ p=0.30 \]

    Ahora interesa obtener:

    \[ r=3 \]

    ventas.

    Definimos:

    \[ X=\text{número de llamadas hasta alcanzar la tercera venta} \]

    Queremos:

    \[ P(X=6) \]

    12.9.2 Cálculo manual

    \[ P(X=6)= \binom{5}{2} (0.30)^3 (0.70)^3 \]

    choose(5, 2) *
      (0.30)^3 *
      (0.70)^3
    ## [1] 0.09261

    12.9.3 Usando R

    dnbinom() cuenta el número de fracasos antes de alcanzar los éxitos requeridos.

    Si la tercera venta ocurre en la sexta llamada:

    \[ 6-3=3 \]

    fracasos.

    dnbinom(
      x = 3,
      size = 3,
      prob = 0.30
    )
    ## [1] 0.09261

    12.10 9. Geométrica vs. Binomial negativa

    La distribución Geométrica responde:

    ¿Cuántos ensayos se requieren hasta el primer éxito?

    Mientras que la Binomial negativa responde:

    ¿Cuántos ensayos se requieren hasta alcanzar varios éxitos?

    \[ \boxed{ \text{Geométrica} \Rightarrow r=1 } \]

    \[ \boxed{ \text{Binomial negativa} \Rightarrow r>1 } \]

    12.11 10. Distribución Hipergeométrica

    12.11.1 Contexto de auditoría

    Una empresa posee:

    \[ N=100 \]

    facturas.

    De ellas:

    \[ K=15 \]

    presentan errores.

    Se seleccionan:

    \[ n=10 \]

    facturas sin reemplazo.

    Definimos:

    \[ X=\text{número de facturas con errores en la muestra} \]

    La distribución adecuada es:

    \[ \boxed{\text{Hipergeométrica}} \]

    porque la selección se realiza sin reemplazo.

    12.11.2 Exactamente 2 facturas con errores

    dhyper(
      x = 2,
      m = 15,
      n = 85,
      k = 10
    )
    ## [1] 0.2919112

    En R:

    • m = elementos considerados éxito;
    • n = elementos que no son éxito;
    • k = tamaño de la muestra;
    • x = número de éxitos encontrados.

    12.11.3 Máximo 2 errores

    phyper(
      q = 2,
      m = 15,
      n = 85,
      k = 10
    )
    ## [1] 0.8294603

    12.11.4 Tres o más errores

    1 - phyper(
      q = 2,
      m = 15,
      n = 85,
      k = 10
    )
    ## [1] 0.1705397

    12.11.5 Gráfica

    x_hiper <- 0:10
    
    prob_hiper <- dhyper(
      x_hiper,
      m = 15,
      n = 85,
      k = 10
    )
    
    plot(
      x_hiper,
      prob_hiper,
      type = "h",
      lwd = 5,
      main = "Facturas con errores",
      xlab = "Número de facturas con errores",
      ylab = "Probabilidad"
    )
    
    points(
      x_hiper,
      prob_hiper,
      pch = 19
    )

    12.12 11. Binomial vs. Hipergeométrica

    12.12.1 Binomial

    Se usa cuando:

    • existe un número fijo de ensayos;
    • cada ensayo tiene éxito o fracaso;
    • los ensayos son independientes;
    • la probabilidad de éxito permanece constante.

    \[ X\sim Binomial(n,p) \]

    12.12.2 Hipergeométrica

    Se usa cuando:

    • existe una población finita;
    • se selecciona una muestra;
    • existen éxitos y fracasos;
    • la selección se realiza sin reemplazo.

    12.13 12. Distribución Poisson

    12.13.1 Contexto administrativo

    Una empresa recibe en promedio:

    \[ \lambda=4 \]

    reclamos por día.

    Definimos:

    \[ X=\text{número de reclamos recibidos en un día} \]

    Entonces:

    \[ X\sim Poisson(4) \]

    12.13.2 Exactamente 3 reclamos

    dpois(
      x = 3,
      lambda = 4
    )
    ## [1] 0.1953668

    12.13.3 Máximo 3 reclamos

    ppois(
      q = 3,
      lambda = 4
    )
    ## [1] 0.4334701

    12.13.4 Más de 6 reclamos

    1 - ppois(
      q = 6,
      lambda = 4
    )
    ## [1] 0.110674

    12.13.5 Gráfica

    x_pois <- 0:15
    
    prob_pois <- dpois(
      x_pois,
      lambda = 4
    )
    
    plot(
      x_pois,
      prob_pois,
      type = "h",
      lwd = 5,
      main = "Número de reclamos diarios",
      xlab = "Número de reclamos",
      ylab = "Probabilidad"
    )
    
    points(
      x_pois,
      prob_pois,
      pch = 19
    )

    12.13.6 Media y varianza

    Para una distribución Poisson:

    \[ E(X)=\lambda \]

    \[ Var(X)=\lambda \]

    lambda <- 4
    
    media_pois <- lambda
    var_pois <- lambda
    
    media_pois
    ## [1] 4
    var_pois
    ## [1] 4

    12.14 13. Comparación de las distribuciones

    Distribución Pregunta principal Ejemplo
    Bernoulli ¿Ocurre o no ocurre? Mora / no mora
    Binomial ¿Cuántos éxitos en \(n\) ensayos? Compradores entre 20 clientes
    Geométrica ¿Cuántos ensayos hasta el primer éxito? Llamadas hasta primera venta
    Binomial negativa ¿Cuántos ensayos hasta \(r\) éxitos? Llamadas hasta tercera venta
    Hipergeométrica ¿Cuántos éxitos al muestrear sin reemplazo? Facturas con errores
    Poisson ¿Cuántos eventos ocurren en un intervalo? Reclamos diarios

    12.15 14. Funciones principales de R

    R utiliza una estructura común para las distribuciones.

    Prefijo Significado
    d Probabilidad puntual
    p Probabilidad acumulada
    q Cuantil
    r Simulación

    12.15.1 Binomial

    dbinom(3, size = 10, prob = 0.30)
    ## [1] 0.2668279
    pbinom(3, size = 10, prob = 0.30)
    ## [1] 0.6496107
    qbinom(0.90, size = 10, prob = 0.30)
    ## [1] 5
    rbinom(10, size = 10, prob = 0.30)
    ##  [1] 4 3 4 4 0 3 3 4 4 4

    12.15.2 Poisson

    dpois(3, lambda = 4)
    ## [1] 0.1953668
    ppois(3, lambda = 4)
    ## [1] 0.4334701
    qpois(0.90, lambda = 4)
    ## [1] 7
    rpois(10, lambda = 4)
    ##  [1] 4 4 1 8 4 4 5 2 2 7

    12.15.3 Geométrica

    dgeom(3, prob = 0.20)
    ## [1] 0.1024
    pgeom(3, prob = 0.20)
    ## [1] 0.5904
    qgeom(0.90, prob = 0.20)
    ## [1] 10
    rgeom(10, prob = 0.20)
    ##  [1]  0 13  0  1  0  5  1  1 10  1

    12.15.4 Binomial negativa

    dnbinom(3, size = 3, prob = 0.30)
    ## [1] 0.09261
    pnbinom(3, size = 3, prob = 0.30)
    ## [1] 0.25569
    qnbinom(0.90, size = 3, prob = 0.30)
    ## [1] 13
    rnbinom(10, size = 3, prob = 0.30)
    ##  [1] 15  3 15  9  3  5  1  6  7  4

    12.15.5 Hipergeométrica

    dhyper(2, m = 15, n = 85, k = 10)
    ## [1] 0.2919112
    phyper(2, m = 15, n = 85, k = 10)
    ## [1] 0.8294603
    qhyper(0.90, m = 15, n = 85, k = 10)
    ## [1] 3
    rhyper(10, m = 15, n = 85, k = 10)
    ##  [1] 2 2 1 2 1 3 2 0 4 0

    12.16 15. ¿Cómo seleccionar la distribución?

    Antes de utilizar R, responda:

    12.16.0.1 Pregunta 1

    ¿Existe solamente éxito o fracaso?

    \[ \Rightarrow \boxed{\text{Bernoulli}} \]

    12.16.0.2 Pregunta 2

    ¿Se cuentan éxitos en un número fijo de ensayos?

    \[ \Rightarrow \boxed{\text{Binomial}} \]

    12.16.0.3 Pregunta 3

    ¿Se cuentan ensayos hasta el primer éxito?

    \[ \Rightarrow \boxed{\text{Geométrica}} \]

    12.16.0.4 Pregunta 4

    ¿Se cuentan ensayos hasta alcanzar varios éxitos?

    \[ \Rightarrow \boxed{\text{Binomial negativa}} \]

    12.16.0.5 Pregunta 5

    ¿Se selecciona sin reemplazo de una población finita?

    \[ \Rightarrow \boxed{\text{Hipergeométrica}} \]

    12.16.0.6 Pregunta 6

    ¿Se cuenta el número de eventos en un intervalo?

    \[ \Rightarrow \boxed{\text{Poisson}} \]

    12.17 16. Ejemplo integrado con datos

    Supongamos que una empresa registra el número de reclamos diarios durante 30 días.

    reclamos <- c(
      4,5,3,6,4,7,2,5,4,6,
      3,5,7,4,5,6,2,4,5,3,
      8,4,6,5,3,4,7,5,4,6
    )

    12.18 Paso 1. Definir la variable

    \[ X=\text{número de reclamos recibidos diariamente} \]

    12.18.1 Paso 2. Clasificación

    Es una variable:

    \[ \boxed{\text{cuantitativa discreta}} \]

    porque representa un conteo.

    12.18.2 Paso 3. Explorar los datos

    summary(reclamos)
    ##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
    ##   2.000   4.000   5.000   4.733   6.000   8.000
    mean(reclamos)
    ## [1] 4.733333
    var(reclamos)
    ## [1] 2.271264
    table(reclamos)
    ## reclamos
    ## 2 3 4 5 6 7 8 
    ## 2 4 8 7 5 3 1

    12.18.3 Paso 4. Gráfica observada

    barplot(
      table(reclamos),
      main = "Número de reclamos diarios",
      xlab = "Número de reclamos",
      ylab = "Número de días"
    )

    12.18.4 Paso 5. Identificar la distribución

    Como se cuentan eventos que ocurren durante un intervalo fijo de tiempo:

    \[ \boxed{\text{Poisson}} \]

    12.18.5 Paso 6. Estimar el parámetro

    lambda <- mean(reclamos)
    
    lambda
    ## [1] 4.733333

    12.19 Paso 7. Pregunta administrativa

    La empresa considera crítico recibir:

    \[ 8\text{ o más reclamos} \]

    Queremos:

    \[ P(X\geq8) \]

    prob_critica <- 1 - ppois(
      7,
      lambda = lambda
    )
    
    prob_critica
    ## [1] 0.1070411

    En porcentaje:

    prob_critica * 100
    ## [1] 10.70411

    12.19.1 Paso 8. Construir la distribución teórica

    x <- 0:15
    
    prob_teorica <- dpois(
      x,
      lambda = lambda
    )
    
    data.frame(
      Reclamos = x,
      Probabilidad = prob_teorica
    )

    12.19.2 Paso 9. Gráfica de la distribución

    plot(
      x,
      prob_teorica,
      type = "h",
      lwd = 5,
      main = "Modelo Poisson del número de reclamos",
      xlab = "Número de reclamos",
      ylab = "Probabilidad"
    )
    
    points(
      x,
      prob_teorica,
      pch = 19
    )

    12.19.3 Paso 10. Interpretación

    El resultado de:

    \[ P(X\geq8) \]

    representa la probabilidad de que en un día se reciban al menos 8 reclamos.

    Esta información puede apoyar decisiones relacionadas con:

    • número de empleados necesarios;
    • planeación de turnos;
    • capacidad del servicio al cliente;
    • establecimiento de alertas de alta demanda.

    13 Corte III: Taller 20%

    13.1 Aplicación de variables aleatorias discretas con R

    Trabajo en grupos de 3 integrantes.

    Cada grupo trabajará con uno de los casos propuestos en las áreas de Economía, Administración, Finanzas o Negocios, aplicando la metodología desarrollada durante la clase.

    La ruta de trabajo será:

    \[ \boxed{ \text{Contexto} \rightarrow \text{Datos} \rightarrow \text{Variable aleatoria} \rightarrow \text{Distribución} \rightarrow \text{Parámetros} \rightarrow \text{Probabilidades} \rightarrow \text{Gráfica} \rightarrow \text{Interpretación} \rightarrow \text{Decisión} } \]

    13.2 Instrucciones generales

    Para el caso asignado, cada grupo deberá:

    1. Describir brevemente el contexto del problema.
    2. Definir claramente la variable aleatoria \(X\).
    3. Justificar por qué se trata de una variable aleatoria discreta.
    4. Explorar los datos disponibles mediante medidas descriptivas, tablas y gráficos cuando corresponda.
    5. Identificar y justificar la distribución de probabilidad adecuada.
    6. Identificar o estimar los parámetros necesarios.
    7. Calcular las probabilidades solicitadas utilizando R.
    8. Construir y representar gráficamente la distribución teórica.
    9. Interpretar los resultados en el contexto del problema.
    10. Formular una conclusión, recomendación o decisión sustentada en la evidencia obtenida.

    Importante: No es suficiente presentar código o resultados numéricos.
    Cada probabilidad, tabla o gráfica debe ir acompañada de una interpretación estadística y contextual.


    13.3 Caso 1. Finanzas: riesgo de mora

    Un banco analiza el comportamiento histórico de 50 clientes.

    La variable mora toma los valores:

    \[ 1=\text{cliente en mora}, \qquad 0=\text{cliente sin mora} \]

    mora <- c(
      0,0,0,1,0,0,0,0,1,0,
      0,0,1,0,0,0,0,1,0,0,
      0,0,0,0,1,0,0,0,0,0,
      1,0,0,0,0,0,0,1,0,0,
      0,0,1,0,0,0,0,0,1,0
    )

    Una nueva cartera estará formada por:

    \[ n=20 \]

    clientes.

    13.3.1 Actividades

    1. Explore los datos históricos.
    2. Estime la probabilidad de que un cliente entre en mora.
    3. Identifique y justifique la distribución adecuada para modelar el número de clientes en mora entre los 20 clientes.
    4. Calcule e interprete:

    \[ P(X=4) \]

    1. Calcule:

    \[ P(X\leq4) \]

    1. Calcule:

    \[ P(X\geq5) \]

    1. Construya la distribución completa y represéntela gráficamente.
    2. Determine el número esperado de clientes en mora.
    3. Si el banco considera preocupante observar 5 o más clientes en mora, formule una conclusión para la gestión del riesgo crediticio.

    13.4 Caso 2. Administración: ausentismo laboral

    Una empresa registró durante 40 días el número de empleados ausentes:

    ausentes <- c(
      2,3,1,4,2,3,2,5,1,3,
      2,4,3,2,1,5,3,2,4,2,
      3,1,2,4,3,2,5,2,3,1,
      4,2,3,2,1,3,4,2,3,2
    )

    13.4.1 Actividades

    1. Defina la variable aleatoria.
    2. Explore los datos mediante una tabla de frecuencias, una gráfica, la media y la varianza.
    mean(ausentes)
    ## [1] 2.65
    var(ausentes)
    ## [1] 1.310256
    1. Identifique y justifique una distribución discreta adecuada.
    2. Estime el parámetro correspondiente.
    3. Calcule la probabilidad de observar exactamente 4 empleados ausentes.
    4. Calcule:

    \[ P(X\geq5) \]

    1. Construya y grafique la distribución teórica.
    2. Si 5 o más ausencias representan una jornada crítica, formule una recomendación para la planificación de turnos y reemplazos.

    13.5 Caso 3. Negocios: campaña de marketing

    Una empresa registra si los clientes que reciben una promoción realizan una compra.

    \[ 1=\text{compra}, \qquad 0=\text{no compra} \]

    compra <- c(
      0,1,0,0,1,0,1,0,0,1,
      0,0,1,0,1,0,0,0,1,0,
      1,0,0,1,0,0,1,0,1,0,
      0,1,0,0,0,1,0,1,0,0,
      1,0,0,1,0,0,0,1,0,0,
      1,0,1,0,0,1,0,0,1,0
    )

    La próxima campaña se enviará a:

    \[ n=30 \]

    clientes.

    13.5.1 Actividades

    1. Calcule e interprete la proporción histórica de clientes que realizaron una compra.
    2. Identifique y justifique la distribución apropiada para modelar el número de compradores.
    3. Calcule:

    \[ P(X=10) \]

    1. Calcule:

    \[ P(X\geq10) \]

    1. Calcule:

    \[ P(X<8) \]

    1. Obtenga:

    \[ E(X) \qquad\text{y}\qquad Var(X) \]

    1. Construya y grafique la distribución de probabilidad.
    2. Si la empresa considera exitosa una campaña cuando consigue al menos 10 compradores, evalúe la probabilidad de alcanzar la meta.

    13.6 Caso 4. Economía: creación de empresas

    Una entidad registra el número de nuevas empresas creadas diariamente:

    empresas <- c(
      5,7,4,6,8,5,6,7,3,6,
      5,8,6,4,7,5,6,9,4,6,
      7,5,8,6,4,5,7,6,5,8,
      6,4,7,5,6,8,5,7,4,6
    )

    13.6.1 Actividades

    1. Defina la variable aleatoria.
    2. Explore los datos mediante media, varianza y una gráfica.
    3. Identifique y justifique una distribución adecuada.
    4. Estime el parámetro correspondiente.
    5. Calcule:

    \[ P(X=6) \]

    1. Calcule:

    \[ P(X\leq6) \]

    1. Calcule:

    \[ P(X\geq9) \]

    1. Construya y grafique la distribución teórica.
    2. Si 9 o más registros corresponden a un día de alta demanda, explique las implicaciones para la planificación del servicio.

    13.7 Caso 5. Ventas: primera venta

    Un asesor comercial registra los resultados de distintas llamadas:

    \[ 1=\text{venta}, \qquad 0=\text{no venta} \]

    ventas <- c(
      0,0,1,0,0,0,1,0,1,0,
      0,1,0,0,0,1,0,0,1,0,
      0,0,1,0,1,0,0,0,1,0,
      1,0,0,0,1,0,0,1,0,0
    )

    Defina:

    \[ X=\text{número de llamadas hasta conseguir la primera venta} \]

    13.7.1 Actividades

    1. Estime la probabilidad de realizar una venta en una llamada.
    2. Identifique y justifique la distribución apropiada.
    3. Calcule la probabilidad de que la primera venta ocurra:
      • exactamente en la tercera llamada;
      • exactamente en la quinta llamada;
      • después de la quinta llamada.
    4. Determine:

    \[ E(X) \]

    1. Construya una gráfica de la distribución.
    2. Interprete el valor esperado desde la perspectiva del trabajo del asesor comercial.

    13.8 Caso 6. Ventas: alcanzar tres ventas

    Utilice los mismos datos del caso anterior:

    ventas <- c(
      0,0,1,0,0,0,1,0,1,0,
      0,1,0,0,0,1,0,0,1,0,
      0,0,1,0,1,0,0,0,1,0,
      1,0,0,0,1,0,0,1,0,0
    )

    Defina:

    \[ X=\text{número de llamadas hasta obtener la tercera venta} \]

    13.8.1 Actividades

    1. Estime \(p\) utilizando los datos.
    2. Identifique y justifique la distribución apropiada.
    3. Explique la diferencia entre este problema y el caso de la primera venta.
    4. Calcule la probabilidad de que la tercera venta ocurra:
      • exactamente en la sexta llamada;
      • exactamente en la octava llamada.
    5. Represente gráficamente la distribución.
    6. Interprete los resultados desde la perspectiva de planificación comercial.

    13.9 Caso 7. Auditoría: facturas con errores

    Una empresa posee:

    \[ N=100 \]

    facturas, de las cuales:

    \[ K=15 \]

    presentan errores.

    Un auditor selecciona:

    \[ n=10 \]

    facturas sin reemplazo.

    Defina:

    \[ X=\text{número de facturas con errores en la muestra} \]

    13.9.1 Actividades

    1. Identifique y justifique la distribución apropiada.
    2. Explique por qué este problema no debe modelarse inicialmente como una Binomial.
    3. Calcule:

    \[ P(X=2) \]

    1. Calcule:

    \[ P(X\leq2) \]

    1. Calcule:

    \[ P(X\geq3) \]

    1. Construya y grafique la distribución completa.
    2. Interprete los resultados desde la perspectiva del proceso de auditoría.

    13.10 Caso 8. Control de calidad

    Una planta posee un lote de:

    \[ N=80 \]

    productos, de los cuales:

    \[ K=12 \]

    son defectuosos.

    Se seleccionan:

    \[ n=8 \]

    productos sin reemplazo.

    Defina:

    \[ X=\text{número de productos defectuosos en la muestra} \]

    13.10.1 Actividades

    1. Identifique y justifique la distribución apropiada.
    2. Calcule:

    \[ P(X=0) \]

    1. Calcule:

    \[ P(X=1) \]

    1. Calcule:

    \[ P(X\geq2) \]

    1. Construya y grafique la distribución completa.
    2. Explique qué implicaciones tienen los resultados para el control de calidad.

    13.11 Entrega

    Cada grupo deberá presentar su trabajo en R Markdown incluyendo:

    • contexto del problema;
    • variable aleatoria;
    • distribución seleccionada y justificación;
    • parámetros;
    • código utilizado;
    • probabilidades;
    • gráfica de la distribución;
    • interpretación;
    • conclusión o recomendación final.

    13.11.1 Criterio fundamental

    No escriba únicamente:

    La probabilidad es 0.15.

    Explique el resultado en contexto, por ejemplo:

    Existe aproximadamente un 15 % de probabilidad de que ocurra el evento analizado. Esto indica que…

    La finalidad del taller es utilizar R para transformar:

    \[ \boxed{ \text{Datos} \rightarrow \text{Modelo probabilístico} \rightarrow \text{Interpretación} \rightarrow \text{Decisión} } \]