A continuación, verificamos e instalamos las librerías necesarias de R antes de cargarlas.
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)
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))
)
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.
# 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í
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.
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.
# 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"))
| Indicador | Valor |
|---|---|
| Número de observaciones | 120 |
| Número de variables | 7 |
# 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)
| 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 |
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.
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)
| 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% |
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.
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.
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
)
| 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 |
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.
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
)
| 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% |
| Sí | 99 | 82.5% |
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.
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.
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
)
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.
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
)
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.
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.
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.