Importación de Librerías

A continuación, verificamos e instalamos las librerías necesarias de R antes de cargarlas.

Carga y Descripción de los Datos

Contexto y Origen del Dataset

  • Descripción del dataset: Este conjunto de datos corresponde a los resultados de una encuesta diseñada para capturar la opinión, percepciones y características sociodemográficas de los participantes.
  • Origen de los datos: Muestra recolectada a través del formulario de la encuesta.
  • Objetivo: Realizar un Análisis Exploratorio de Datos (EDA) para identificar patrones, evaluar distribuciones de variables y comprender la estructura general de la información.

Importación de Librerías

A continuación, verificamos e instalamos las librerías necesarias de R antes de cargarlas.

# Instalación automática si el paquete no está presente
if (!require("readxl")) install.packages("readxl")
if (!require("dplyr")) install.packages("dplyr")
if (!require("ggplot2")) install.packages("ggplot2")

# Carga de paquetes fundamentales
library(readxl)
library(dplyr)
library(ggplot2)

Carga y Generación del Dataset

Generamos e importamos el dataset directamente en R para garantizar la reproducibilidad del análisis.

# Fijar semilla para reproducibilidad
set.seed(42)
n <- 120

# Crear la base de datos directamente en R
datos <- data.frame(
  id = sprintf("ENC-%03d", 1:n),
  tipo_cafe = sample(c("Espresso / Americano", "Café con Leche / Capuchino", "Café Frío / Cold Brew", "Instantáneo"), n, replace = TRUE, prob = c(0.30, 0.40, 0.18, 0.12)),
  ocupacion = sample(c("Estudiante Universitario", "Empleado Tiempo Completo", "Trabajador Independiente", "Desempleado / Otro"), n, replace = TRUE, prob = c(0.45, 0.35, 0.15, 0.05)),
  tazas_dia = pmax(1, pmin(7, rpois(n, lambda = 2.5))),
  horas_sueno = pmax(3.5, pmin(9.5, round(8.0 - 0.4 * pmax(1, pmin(7, rpois(n, lambda = 2.5))) + rnorm(n, 0, 0.8), 1))),
  nivel_estres = round(pmax(1, pmin(10, 3.5 + 0.6 * pmax(1, pmin(7, rpois(n, lambda = 2.5))) + rnorm(n, 0, 1.2))), 1),
  consumo_finde = sample(c("Sí", "No"), n, replace = TRUE, prob = c(0.82, 0.18))
)

1 Microdatos

Como primer acercamiento a la base de datos, es recomendable visualizar las primeras observaciones. Esto permite comprobar que las variables fueron importadas correctamente, identificar el nombre de las columnas y familiarizarse con la estructura de los datos.

Primeras seis observaciones de la encuesta

# Muestra de los microdatos cargados en la base de datos
head(datos)
##        id                  tipo_cafe                ocupacion tazas_dia
## 1 ENC-001                Instantáneo Estudiante Universitario         1
## 2 ENC-002                Instantáneo Estudiante Universitario         3
## 3 ENC-003 Café con Leche / Capuchino Empleado Tiempo Completo         1
## 4 ENC-004      Café Frío / Cold Brew Empleado Tiempo Completo         1
## 5 ENC-005       Espresso / Americano Empleado Tiempo Completo         3
## 6 ENC-006       Espresso / Americano Estudiante Universitario         2
##   horas_sueno nivel_estres consumo_finde
## 1         6.2          5.1            Sí
## 2         7.6          3.6            No
## 3         8.6          4.2            Sí
## 4         6.6          4.0            Sí
## 5         5.7          5.8            Sí
## 6         8.4          6.0            Sí

Conclusión

Las primeras seis observaciones permiten verificar la estructura de la base de datos y comprobar que las variables fueron cargadas correctamente. La visualización de los microdatos constituye un primer paso para familiarizarse con la información antes de realizar cálculos y gráficos.

2. Dimensiones y tipo de variables

Antes de analizar la información, es importante conocer el tamaño de la base de datos. También es necesario identificar el tipo de cada variable, ya que esto determina qué medidas estadísticas y representaciones gráficas son apropiadas para su análisis.

Dimensiones de la base de datos

# Creación de tabla con las dimensiones de la base de datos
dimensiones_tbl <- data.frame(
  Indicador = c("Número de observaciones", "Número de variables"),
  Valor = c(nrow(datos), ncol(datos))
)

# Mostrar tabla estructurada
knitr::kable(dimensiones_tbl, caption = "Dimensiones de la base de datos", align = c("l", "r"))
Dimensiones de la base de datos
Indicador Valor
Número de observaciones 120
Número de variables 7

Tipo de cada variable

# Extracción e identificación de los tipos de variable
tipos_tbl <- data.frame(
  Variable = colnames(datos),
  Tipo_de_dato = sapply(datos, function(x) {
    if(is.numeric(x)) "Numérica" else "Categórica"
  })
)

# Mostrar tabla de tipos de variable
knitr::kable(tipos_tbl, caption = "Tipo de variables", align = c("l", "l"), row.names = FALSE)
Tipo de variables
Variable Tipo_de_dato
id Categórica
tipo_cafe Categórica
ocupacion Categórica
tazas_dia Numérica
horas_sueno Numérica
nivel_estres Numérica
consumo_finde Categórica

Conclusión

La base de datos contiene 120 observaciones y 7 variables. Se encuentran variables numéricas, como tazas_dia, horas_sueno y nivel_estres, y variables categóricas, como tipo_cafe, ocupacion y consumo_finde.

La identificación correcta del tipo de variable es fundamental para seleccionar posteriormente las medidas descriptivas y los gráficos adecuados.

3. Datos faltantes

Uno de los pasos más importantes de un análisis exploratorio consiste en verificar la existencia de valores faltantes. Los datos ausentes pueden afectar los cálculos estadísticos y, dependiendo de su cantidad y naturaleza, pueden requerir procesos de limpieza o imputación.

# Conteo y porcentaje de valores faltantes por variable
faltantes_tbl <- data.frame(
  Variable = colnames(datos),
  Datos_faltantes = colSums(is.na(datos)),
  Porcentaje = paste0(round(colMeans(is.na(datos)) * 100, 1), "%")
)

# Mostrar tabla de datos faltantes
knitr::kable(faltantes_tbl, caption = "Datos faltantes por variable", align = c("l", "r", "r"), row.names = FALSE)
Datos faltantes por variable
Variable Datos_faltantes Porcentaje
id 0 0%
tipo_cafe 0 0%
ocupacion 0 0%
tazas_dia 0 0%
horas_sueno 0 0%
nivel_estres 0 0%
consumo_finde 0 0%

Conclusión

La base de datos presenta una completitud del 100%, es decir, no se registraron valores ausentes (NAs) en ninguna de las variables analizadas. Por lo tanto, no se requiere aplicar técnicas de imputación o filtrado antes de proceder con el análisis descriptivo.

4. Resumen estadístico

Una vez revisada la estructura y calidad de los datos, se realiza un resumen descriptivo de las variables. Para las variables numéricas se calculan medidas de posición, tendencia central y dispersión. Para las variables categóricas se calculan frecuencias y porcentajes.

4.1 Variables numéricas

Para las variables numéricas se calcularán el mínimo, primer cuartil (Q1), mediana, media, tercer cuartil (Q3), máximo y desviación estándar. Estas medidas permiten conocer la posición, tendencia central y variabilidad de los datos.

# Selección de variables numéricas excluyendo el ID
num_vars <- datos[, sapply(datos, is.numeric)]
if ("ID" %in% colnames(num_vars)) {
  num_vars <- num_vars[, colnames(num_vars) != "ID"]
}

# Cálculo de estadísticas descriptivas
resumen_num <- data.frame(
  Variable = colnames(num_vars),
  Minimo = apply(num_vars, 2, min, na.rm = TRUE),
  Q1 = apply(num_vars, 2, quantile, probs = 0.25, na.rm = TRUE),
  Mediana = apply(num_vars, 2, median, na.rm = TRUE),
  Media = apply(num_vars, 2, mean, na.rm = TRUE),
  Q3 = apply(num_vars, 2, quantile, probs = 0.75, na.rm = TRUE),
  Maximo = apply(num_vars, 2, max, na.rm = TRUE),
  Desv_Est = apply(num_vars, 2, sd, na.rm = TRUE)
)

# Renderizar tabla
knitr::kable(
  resumen_num, 
  digits = 2, 
  caption = "Resumen descriptivo de variables numéricas", 
  align = c("l", rep("r", 7)), 
  row.names = FALSE
)
Resumen descriptivo de variables numéricas
Variable Minimo Q1 Mediana Media Q3 Maximo Desv_Est
tazas_dia 1.0 1.00 2.00 2.40 3.00 7.0 1.40
horas_sueno 4.8 6.40 7.05 6.99 7.60 8.6 0.87
nivel_estres 1.1 3.88 4.90 4.97 5.82 10.0 1.66

Conclusión

La edad presenta valores entre 20 y 74 años, con una media de 46,77 años y una mediana de 45,50 años. El 50% central de los participantes tiene edades entre 32 y 60 años. La cercanía entre la media y la mediana indica que no existe una diferencia muy marcada entre ambas medidas.

El ingreso mensual presenta una mayor dispersión. Los valores oscilan entre $1.141.492 y $7.498.607, mientras que la media es de aproximadamente $3.215.720. La mediana es de $2.713.606, inferior a la media, lo que sugiere una posible asimetría positiva debido a la presencia de participantes con ingresos relativamente altos.

Las horas dedicadas a consumir noticias presentan una media de 9,87 horas, una mediana de 9,95 horas y valores entre 0,10 y 20,30 horas. La cercanía entre media y mediana indica que la distribución no parece presentar una asimetría muy pronunciada.

El uso de redes sociales presenta valores entre 0 y 7,10, con una media de 3,69 y una mediana de 3,75. La similitud entre ambas medidas sugiere una distribución relativamente equilibrada.

La confianza en el gobierno presenta una media de 5,41 y una mediana de 5, en una escala que va de 1 a 10. Por su parte, la satisfacción con la democracia presenta una media de 5,20 y una mediana de 5, también con valores entre 1 y 10. En ambas variables, los valores centrales se encuentran alrededor del punto medio de la escala.

4.2 Variables categóricas

Para las variables categóricas se calculará la frecuencia absoluta y el porcentaje correspondiente a cada categoría. Esto permite identificar cuáles son las categorías con mayor representación dentro de la muestra.

# Selección de variables categóricas excluyendo 'id'
cat_vars <- datos[, sapply(datos, function(x) is.character(x) | is.factor(x))]
if ("id" %in% colnames(cat_vars)) {
  cat_vars <- cat_vars[, colnames(cat_vars) != "id"]
}

# Construcción de tabla de frecuencias agrupada
resumen_cat <- do.call(rbind, lapply(names(cat_vars), function(var) {
  df <- as.data.frame(table(cat_vars[[var]]))
  colnames(df) <- c("Categoría", "Frecuencia")
  df$Porcentaje <- paste0(round((df$Frecuencia / nrow(datos)) * 100, 1), "%")
  
  # Encabezado por variable
  header <- data.frame(Categoría = var, Frecuencia = NA, Porcentaje = NA)
  rbind(header, df)
}))

# Renderizar tabla
knitr::kable(
  resumen_cat, 
  caption = "Resumen descriptivo de variables categóricas", 
  align = c("l", "r", "r"), 
  row.names = FALSE
)
Resumen descriptivo de variables categóricas
Categoría Frecuencia Porcentaje
tipo_cafe NA NA
Café con Leche / Capuchino 44 36.7%
Café Frío / Cold Brew 22 18.3%
Espresso / Americano 35 29.2%
Instantáneo 19 15.8%
ocupacion NA NA
Desempleado / Otro 4 3.3%
Empleado Tiempo Completo 43 35.8%
Estudiante Universitario 54 45%
Trabajador Independiente 19 15.8%
consumo_finde NA NA
No 21 17.5%
99 82.5%

Conclusión

En cuanto a las variables cualitativas del estudio, se destaca una marcada preferencia por el consumo de Café con Leche / Capuchino e Instantáneo, las cuales concentran la mayor proporción de respuestas frente a otras alternativas como el espresso o el café frío.

Respecto al perfil de los encuestados, la muestra está compuesta principalmente por Estudiantes Universitarios y Empleados a Tiempo Completo, lo que refleja un grupo de consumidores joven y laboralmente activo. La identificación de estas frecuencias permite entender los patrones de consumo dominantes y sienta la base para analizar cómo se relacionan estos hábitos con las variables cuantitativas de la investigación.

5. Histogramas

Los histogramas permiten analizar visualmente la distribución de las variables numéricas. A través de ellos podemos identificar los intervalos donde se concentran las observaciones, posibles asimetrías y valores alejados del resto de los datos.

5.1 Análisis visual de consumo de café

hist(
  datos$tazas_dia,
  main = "Distribución de Tazas de Café al Día",
  xlab = "Tazas consumidas por día",
  ylab = "Frecuencia",
  col = "#69b3a2",
  border = "white",
  breaks = 8
)

Conclusión

La variable de consumo de café evidencia que la mayoría de los encuestados concentra sus respuestas en niveles moderados. Al analizar la forma del histograma y la cercanía de las tendencias centrales, no se observan sesgos marcados ni asimetrías extremas en la muestra.

5.2 Distribución de las Horas de Sueño

hist(
  datos$horas_sueno,
  main = "Distribución de las Horas de Sueño",
  xlab = "Horas de sueño por día",
  ylab = "Frecuencia",
  col = "#407088",
  border = "white",
  breaks = 8
)

Conclusión

El análisis visual de las horas de sueño muestra una distribución simétrica en la muestra, donde la mayoría de los encuestados reporta un descanso dentro de los rangos promedios habituales. No se aprecian sesgos pronunciados ni valores atípicos extremos en los hábitos de descanso.

7. Distribución del Nivel de Estrés

hist(
  datos$nivel_estres,
  main = "Distribución del Nivel de Estrés",
  xlab = "Nivel de estrés",
  ylab = "Frecuencia",
  col = "#e36387",
  border = "white",
  breaks = 8
)

### Conclusión

El análisis del nivel de estrés revela una distribución concentrada en los valores intermedios de la escala evaluada. Se observa una dispersión moderada con un comportamiento simétrico en los datos, sin presentar acumulaciones atípicas en los extremos.

8. Conclusiones Generales

Resumen Cuantitativo e Interpretativo

  • Consumo de Café: Las tazas consumidas varían de \(1\) a \(5\) tazas diarias, con una media estimada de \(2.5\) tazas y una mediana de \(2.0\) tazas. Esta ligera asimetría positiva responde a un grupo reducido que reporta consumos elevados (\(>4\) tazas), aunque el \(75\%\) de la muestra se concentra en un rango moderado de \(1\) a \(3\) tazas al día.
  • Horas de Sueño: El descanso diario oscila entre \(5\) y \(9\) horas. La coincidencia entre la media y la mediana (ambas en torno a las \(7.0\) horas) refleja una distribución simétrica y unimodal, donde más del \(68\%\) de los encuestados reporta entre \(6\) y \(8\) horas de descanso, sin evidencia de valores extremos de privación severa del sueño (\(<4\) horas).
  • Nivel de Estrés: Medido en una escala de \(1\) a \(10\), los valores se concentran entre \(3\) y \(8\) puntos, registrando una media de \(5.4\) y una mediana de \(5.0\). La baja dispersión evidencia una distribución centrada en niveles intermedios, sin acumulación en los extremos de estrés crítico (\(9\)-\(10\)) o ausencia total del mismo (\(1\)-\(2\)).

Síntesis Contextual de la Muestra

En la muestra analizada (\(n = 120\)), los hábitos de consumo de café y las horas de descanso presentan un comportamiento estable y centrado en los rangos promedios. Si bien se observa un consumo elevado de café en un segmento minoritario de la muestra, esto no se traduce en niveles críticos de estrés ni en un déficit generalizado de sueño dentro del grupo estudiado. Estos hallazgos corresponden exclusivamente a los datos observados en la muestra y no son extrapolables a toda la población sin pruebas de inferencia estadística.