# TALLER 01:ANÁLISIS EXPLORATORIO DE DATOS (EDA)
-GRUPO 07-
NRC: 1797 2025-10
Contexto:
En la presente investigación se analiza la relación el nivel de estrés laboral, la satisfacción con el trabajo y otros factores individuales en una muestra de 300 trabajadores de diversos sectores en Colombia. Se busca estudiar a empleados de diferentes industrias, incluyendo sectores administrativos, técnicos y operativos. Se utilizó un muestreo aleatorio simple para seleccionar una muestra representativa de 300 trabajadores con distintas jornadas laborales y niveles salariales. Se recolectaron datos sobre variables clave como el número de horas trabajadas semanalmente, las horas de sueño, el salario mensual, el estado civil y el nivel de educación, con el objetivo de evaluar cómo estos factores influyen en la percepción del estrés y la satisfacción laboral.
1.1 Población objetivo
Trabajadores en Colombia de diversos sectores, incluyendo, administrativo, técnico y operativo
1.2 Muestra: 300 trabajadores seleccionados aleatoriamente de estos sectores
1.3 Mencione un parámetro y un estadístico en este estudio.
Parámetro: Proporción de trabajadores con alto nivel de estrés
Estadístico: Proporción de 300 trabajadores con alto nivel de estrés.
1.4 Clasifique cada una de las variables de la base de datos
acuerdo con su naturaleza y nivel de medición
Variable 1: Género- Categórica nominal
Variable 2: Estado civil- Categórica nominal
Variable 3: Nivel de escolaridad- Categórica ordinal
Variable 4: Nivel de estrés laboral- Categórica ordinal
Variable 5: Satisfacción laboral-Categórica ordinal
Variable 6: Edad-Cuantitativa continua
Variable 7: Horas de trabajo semanal- Cuantitativa continua
Variable 8: Horas de sueño-Cuantitativa continua
Variable 9: Salario mensual- Cuantitativa continua
Cargar base de datos:
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
dataset_psicologia_trabajo_taller1 <- read_csv("C:/Users/Usuario/Downloads/dataset_psicologia_trabajo_taller1.csv")
## Rows: 300 Columns: 9
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (5): genero, estado_civil, nivel_escolaridad, nivel_estres_laboral, sati...
## dbl (4): edad, horas_trabajo_semanal, horas_sueno, salario_mensual
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Nombres de variables
genero, edad, estado_civil, nivel_escolaridad, salario_mensual, nivel_estres_laboral,horas_sueno,horas_trabajo_mensual y satisfaccion_laboral
Dimesiones de la base de datos dim(dataset_psicologia_trabajo_taller1)
Mostrar las primeras filas de la base de datos
data <- read.csv("dataset_psicologia_trabajo_taller1.csv", stringsAsFactors = TRUE)
knitr::kable(head(dataset_psicologia_trabajo_taller1, 10))
| genero | estado_civil | nivel_escolaridad | nivel_estres_laboral | satisfaccion_laboral | edad | horas_trabajo_semanal | horas_sueno | salario_mensual |
|---|---|---|---|---|---|---|---|---|
| masculino | soltero | secundaria | bajo | alta | 10 | 38.61544 | 9.459947 | 3180.7184 |
| otro | casado | secundaria | bajo | baja | 57 | NA | 8.113191 | 2390.1026 |
| femenino | casado | secundaria | bajo | baja | 21 | 37.90977 | 7.113150 | 2812.3719 |
| femenino | casado | primaria | moderado | media | 18 | 31.49480 | 4.597051 | 1148.3891 |
| masculino | casado | primaria | moderado | media | 45 | 34.19477 | 6.630906 | 1332.6812 |
| masculino | viudo | pregrado | alto | alta | 59 | 45.88578 | 5.735130 | 3300.6896 |
| masculino | casado | secundaria | alto | media | 48 | 56.69904 | 10.256414 | 548.9463 |
| femenino | soltero | secundaria | moderado | media | 40 | 43.94672 | 6.736171 | 2392.5767 |
| femenino | casado | pregrado | bajo | nan | 40 | 28.04117 | 7.184807 | 5707.2978 |
| femenino | soltero | pregrado | moderado | alta | 43 | 44.44603 | 7.827228 | 5111.4585 |
Tipos de datos
str(dataset_psicologia_trabajo_taller1)
## spc_tbl_ [300 × 9] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ genero : chr [1:300] "masculino" "otro" "femenino" "femenino" ...
## $ estado_civil : chr [1:300] "soltero" "casado" "casado" "casado" ...
## $ nivel_escolaridad : chr [1:300] "secundaria" "secundaria" "secundaria" "primaria" ...
## $ nivel_estres_laboral : chr [1:300] "bajo" "bajo" "bajo" "moderado" ...
## $ satisfaccion_laboral : chr [1:300] "alta" "baja" "baja" "media" ...
## $ edad : num [1:300] 10 57 21 18 45 59 48 40 40 43 ...
## $ horas_trabajo_semanal: num [1:300] 38.6 NA 37.9 31.5 34.2 ...
## $ horas_sueno : num [1:300] 9.46 8.11 7.11 4.6 6.63 ...
## $ salario_mensual : num [1:300] 3181 2390 2812 1148 1333 ...
## - attr(*, "spec")=
## .. cols(
## .. genero = col_character(),
## .. estado_civil = col_character(),
## .. nivel_escolaridad = col_character(),
## .. nivel_estres_laboral = col_character(),
## .. satisfaccion_laboral = col_character(),
## .. edad = col_double(),
## .. horas_trabajo_semanal = col_double(),
## .. horas_sueno = col_double(),
## .. salario_mensual = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
colSums(is.na(dataset_psicologia_trabajo_taller1))
## genero estado_civil nivel_escolaridad
## 0 0 0
## nivel_estres_laboral satisfaccion_laboral edad
## 0 0 0
## horas_trabajo_semanal horas_sueno salario_mensual
## 20 0 25
Al revisar los valores faltantes en el, se encontró que dos variables tienen datos incompletos. La variable “horas_trabajo_semanal” tiene 20 valores faltantes, mientras que “salario_mensual” presenta 25. Las demás variables no tienen datos perdidos.
Para evitar sesgos y al ser variable numéricas decidimos, imputar por la mediana
datos <- read.csv("dataset_psicologia_trabajo_taller1.csv", sep = ",", header = TRUE)
# Calcular la mediana de horas_trabajo_semanal, omitiendo los valores faltantes
mediana_horas_trabajo <- median(dataset_psicologia_trabajo_taller1$horas_trabajo_semanal, na.rm = TRUE)
# Reemplazar los NA por la mediana
dataset_psicologia_trabajo_taller1$horas_trabajo_semanal[is.na(dataset_psicologia_trabajo_taller1$horas_trabajo_semanal)] <- mediana_horas_trabajo
# Revisar que ya no haya NA
summary(dataset_psicologia_trabajo_taller1$horas_trabajo_semanal)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 10.79 35.12 40.64 40.83 46.94 71.93
# Calcular la mediana de salario mensual (ignorando los NAs)
mediana_salario <- median(dataset_psicologia_trabajo_taller1$salario_mensual, na.rm = TRUE)
# Reemplazar los NA en salario_mensual con la mediana
dataset_psicologia_trabajo_taller1$salario_mensual[is.na(dataset_psicologia_trabajo_taller1$salario_mensual)] <- mediana_salario
summary(dataset_psicologia_trabajo_taller1$salario_mensual)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -9724 2195 3301 7430 4556 605894
summary(dataset_psicologia_trabajo_taller1[, c("edad", "salario_mensual")])
## edad salario_mensual
## Min. : 9.00 Min. : -9724
## 1st Qu.:28.00 1st Qu.: 2195
## Median :35.00 Median : 3301
## Mean :35.11 Mean : 7430
## 3rd Qu.:41.00 3rd Qu.: 4556
## Max. :61.00 Max. :605894
boxplot(dataset_psicologia_trabajo_taller1$edad,
main = "Gráfico caja y bigotes de edad",
ylab = "Edad",
col = "lightblue", border = "blue")
boxplot(dataset_psicologia_trabajo_taller1$salario_mensual,
main = "Gráfico caja y bigotes de Salario mensual",
ylab = "Salario Mensual",
col = "lightgreen", border = "darkgreen")
Para visualizar mejor los valores atípicos en estas dos variables, se realizaron gráficos de caja y bigotes. En ellos se encontró que en la variable edad, existen valores muy bajos como 9, 10, 13, 15, 16 años lo más probable es que sea un error, lo que fomenta sesgos en la investigación.
Por otro lado, en la variable salario mensual, se identifican valores extremos. Hay 5 salarios negativos (-9724), lo cual no es posible en la realidad, y 3 salarios súper altos 236489,390888 y el salario máximo de 605,894, que se alejan demasiado de la media y la mediana, y que alterarían completamente el análisis en la investigación. Por lo tanto, hay presencia de valores atípicos.
Para evitar cualquier sesgo, se corrigió a la mediana.
mediana_edad <- median(datos$edad, na.rm = TRUE)
mediana_salario <- median(datos$salario_mensual, na.rm = TRUE)
# Calcular la mediana de edad sin contar los menores de 18
mediana_edad <- median(dataset_psicologia_trabajo_taller1$edad[dataset_psicologia_trabajo_taller1$edad >= 18], na.rm = TRUE)
# Reemplazar valores menores de 18 por la mediana calculada
dataset_psicologia_trabajo_taller1$edad[dataset_psicologia_trabajo_taller1$edad < 18] <- mediana_edad
# Revisar que ya no haya menores de 18
summary(dataset_psicologia_trabajo_taller1$edad)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 18.00 29.00 36.00 35.86 41.00 61.00
#Calcular la mediana del salario mensual (sin contar los valores atípicos)
mediana_salario <- median(dataset_psicologia_trabajo_taller1$salario_mensual, na.rm = TRUE)
# Definir qué es atípico
atipicos <- dataset_psicologia_trabajo_taller1$salario_mensual < 0 |
dataset_psicologia_trabajo_taller1$salario_mensual %in% c(236489, 390888, 605894)
# Reemplazar esos valores atípicos con la mediana
dataset_psicologia_trabajo_taller1$salario_mensual[atipicos] <- mediana_salario
# Revisar que se hizo bien
summary(dataset_psicologia_trabajo_taller1$salario_mensual)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 214.9 2213.9 3300.7 7647.0 4555.9 605894.3
# Calcular la mediana de los salarios válidos (entre 0 y 13942.921)
mediana_salario <- median(dataset_psicologia_trabajo_taller1$salario_mensual[
dataset_psicologia_trabajo_taller1$salario_mensual > 0 &
dataset_psicologia_trabajo_taller1$salario_mensual <= 13942.921
], na.rm = TRUE)
# Reemplazar valores atípicos (menores a 0 o mayores a 13942.921) por la mediana
dataset_psicologia_trabajo_taller1$salario_mensual <- ifelse(
dataset_psicologia_trabajo_taller1$salario_mensual < 0 |
dataset_psicologia_trabajo_taller1$salario_mensual > 13942.921,
mediana_salario,
dataset_psicologia_trabajo_taller1$salario_mensual
)
# Revisar el resumen para verificar que máximo es 13942.921 o menor
summary(dataset_psicologia_trabajo_taller1$salario_mensual)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 214.9 2213.9 3300.7 3569.1 4524.9 13942.9
De esta forma, indicamos que para la variable edad tiene que ser mayores de 18 años y para la variable salario mensual debe ser un maximo de 13942.921 y sin valores negativos como se encontraba anteriormente. # Gráfico de caja y bigotes para Edad (sin atípicos)
ggplot(datos, aes(x = "", y = edad)) +
geom_boxplot(fill = "purple", color = "pink") +
labs(title = "Gráfico de Caja y Bigotes - Edad (Sin Menores de Edad)",
x = "",
y = "Edad") +
theme_minimal()
library(ggplot2)
ggplot(dataset_psicologia_trabajo_taller1, aes(y = salario_mensual)) +
geom_boxplot(fill = "skyblue", color = "darkblue", notch = TRUE) +
labs(title = "Boxplot Salario Mensual (Sin Atípicos)",
y = "Salario Mensual") +
theme_minimal()
3.1
Tabla para la variable: Estado Civil
#tabla 1
table(dataset_psicologia_trabajo_taller1$estado_civil)
##
## casado divorciado soltero viudo
## 116 46 115 23
Interpretación: La moda en la variable estado civil es “casado”, con 116 participantes. La mediana se encuentra entre “soltero” y “casado”, ya que son las categorías centrales cuando los datos se ordenan en términos de frecuencia. La cantidad de solteros es similar a la de casados (115), mientras que los divorciados (46) y viudos (23) tienen una menor representación en la muestra
Tabla para la variable: Nivel de Escolaridad
#tabla 2
table(dataset_psicologia_trabajo_taller1$nivel_escolaridad)
##
## posgrado pregrado primaria secundaria
## 39 114 46 101
Interpretación: La moda en la variable nivel de escolaridad es “pregrado”, con 114 participantes, lo que indica que la mayoría de los trabajadores han alcanzado este nivel educativo. La mediana se encuentra entre “secundaria” y “pregrado”, ya que son los niveles centrales en la distribución. Los estudios de secundaria son el segundo nivel más frecuente (101), mientras que primaria (46) y posgrado (39) tienen una menor presencia en la muestra.
Tabla para la variable: Nivel de estrés laboral
#tabla 3
table(dataset_psicologia_trabajo_taller1$nivel_estres_laboral)
##
## alto bajo moderado
## 70 93 137
Interpretación: La moda en la variable nivel de estrés laboral es “moderado”, con 137 participantes, lo que indica que la mayoría de los trabajadores experimentan un nivel intermedio de estrés. La mediana también se encuentra en “moderado”, ya que es la categoría central en la distribución. El número de trabajadores con estrés bajo es de 93, mientras que 70 reportan un estrés alto.
Tabla para la variable: Satisfacción laboral
#tabla 4
table(dataset_psicologia_trabajo_taller1$satisfaccion_laboral)
##
## alta baja media nan
## 68 79 138 15
Interpretación: La moda en la variable nivel de satisfacción laboral es “media”, con 138 participantes, lo que indica que la mayoría de los trabajadores tienen una percepción intermedia sobre su satisfacción en el trabajo. La mediana también se encuentra en “media”, ya que es la categoría central cuando se ordenan las frecuencias. El número de trabajadores con satisfacción baja es de 79, mientras que 68 reportan una satisfacción alta. Además, hay 15 valores perdidos (NaN), lo que indica que algunos participantes no respondieron esta pregunta. La cantidad significativa de respuestas en los niveles bajo y medio sugiere que una parte importante de los empleados no se siente completamente satisfecha con su entorno laboral.
3.2
Tabla para la variable: Edad
# Calcular mediana de edad (ignorando NAs)
mediana_edad <- median(datos$edad, na.rm = TRUE)
# Reemplazar NAs por la mediana
datos$edad <- ifelse(is.na(datos$edad), mediana_edad, datos$edad)
datos <- datos %>%
mutate(Edad_Grupo = cut(edad,
breaks = c(18, 23, 28, 33, 38, 43, 48, 53, 58, 62),
right = FALSE))
tabla_agrupada <- datos %>%
group_by(Edad_Grupo) %>%
summarise(
Frecuencia_Absoluta = n()
) %>%
mutate(
Frecuencia_Acumulada = cumsum(Frecuencia_Absoluta),
Frecuencia_Relativa = round(Frecuencia_Absoluta / sum(Frecuencia_Absoluta), 4),
Frecuencia_Relativa_Acumulada = cumsum(Frecuencia_Relativa)
)
knitr::kable(tabla_agrupada, caption = "Tabla Agrupada de Edades")
| Edad_Grupo | Frecuencia_Absoluta | Frecuencia_Acumulada | Frecuencia_Relativa | Frecuencia_Relativa_Acumulada |
|---|---|---|---|---|
| [18,23) | 24 | 24 | 0.0800 | 0.0800 |
| [23,28) | 35 | 59 | 0.1167 | 0.1967 |
| [28,33) | 47 | 106 | 0.1567 | 0.3534 |
| [33,38) | 63 | 169 | 0.2100 | 0.5634 |
| [38,43) | 54 | 223 | 0.1800 | 0.7434 |
| [43,48) | 34 | 257 | 0.1133 | 0.8567 |
| [48,53) | 20 | 277 | 0.0667 | 0.9234 |
| [53,58) | 8 | 285 | 0.0267 | 0.9501 |
| [58,62) | 5 | 290 | 0.0167 | 0.9668 |
| NA | 10 | 300 | 0.0333 | 1.0001 |
sum(is.na(datos$edad))
## [1] 0
Interpretación:
3.3
Tabla para las variables: Estado Civil y Nivel de estrés laboral
#tabla de contingencia
tabla_contingencia <- table(dataset_psicologia_trabajo_taller1$estado_civil,
dataset_psicologia_trabajo_taller1$nivel_estres_laboral)
print(tabla_contingencia)
##
## alto bajo moderado
## casado 33 35 48
## divorciado 9 16 21
## soltero 22 36 57
## viudo 6 6 11
Interpretación: La mayoría de las personas, sin importar su estado civil, presenta un nivel moderado de estrés laboral. Sin embargo, los casados tienden a experimentar más estrés alto en comparación con otros grupos. Por su parte, los divorciados y solteros muestran niveles más equilibrados entre estrés bajo y moderado. Los viudos, aunque son el grupo más pequeño, tienen una distribución similar en los tres niveles de estrés.
Diagrama Circular para la Variable Género
# Gráfico 1
library(ggplot2)
# Crear tabla de frecuencia
tabla_genero <- as.data.frame(table(dataset_psicologia_trabajo_taller1$genero))
tabla_genero <- as.data.frame(table(dataset_psicologia_trabajo_taller1$genero))
tabla_genero$Porcentaje <- round((tabla_genero$Freq / sum(tabla_genero$Freq)) * 100, 1) # Calcular %
ggplot(tabla_genero, aes(x = "", y = Freq, fill = Var1)) +
geom_bar(stat = "identity", width = 1) +
coord_polar("y", start = 0) +
geom_text(aes(label = paste0(Porcentaje, "%")),
position = position_stack(vjust = 0.5), size = 5) + # Agregar etiquetas con %
labs(title = "Distribución por Género", fill = "Género") +
theme_void()
El gráfico muestra la proporción de hombres, mujeres y otras identidades en la muestra. La categoría con el segmento más grande es del género masculino con un 45.3%, esto quiere decir que entre los encuentados hubieron mas hombres, seguido a esto,las mujeres fueron el segundo genero más encuestado.
Histograma para la Variable Edad
# Gráfico 2
ggplot(dataset_psicologia_trabajo_taller1, aes(x = edad)) +
geom_histogram(bins = 10, fill = "pink", color = "purple") + # Color rosa y borde morado
labs(title = "Histograma de Edad", x = "Edad", y = "Frecuencia") +
theme_minimal()
El histograma permite visualizar cómo se distribuyen las edades en la muestra. Con base a esto, se observa que la mayor parte de los trabajadores se encuentra en un rango de 29 a 39 años, lo que sugiere que la muestra está compuesta mayormente por adultos entre 30-40 años.
Diagrama de cajas y bigotes para la variable Edad
# Gráfico 3
ggplot(dataset_psicologia_trabajo_taller1, aes(y = edad)) +
geom_boxplot(fill = "green", color = "darkblue") + # Caja verde y bordes azul oscuro
labs(title = "Gráfico de Caja y Bigotes de Edad", y = "Edad") +
theme_minimal()
Diagrama de barras con la variable de Nivel de estrés laboral
# Gráfico 4
ggplot(dataset_psicologia_trabajo_taller1, aes(x = nivel_estres_laboral, fill = factor(nivel_estres_laboral))) +
geom_bar() +
scale_fill_manual(values = c("purple", "green", "pink", "yellow", "orange", "blue")) +
labs(title = "Distribución del Nivel de Estrés Laboral",
x = "Nivel de Estrés Laboral",
y = "Frecuencia") +
theme_minimal()
La distribución del nivel de estrés laboral muestra que la mayoría de los trabajadores experimentan un nivel de estrés moderado, seguido por aquellos con un nivel bajo. Finalmente, el grupo con estrés alto es el menos frecuente. Esto sugiere que, aunque la mayoría de los empleados no presentan niveles extremos de estrés, sigue siendo un factor relevante dentro del entorno laboral. Es importante analizar las condiciones de trabajo para prevenir un aumento del estrés y promover estrategias que favorezcan el bienestar organizacional.
Conclusiones: El Análisis Exploratorio de Datos (EDA) realizado permitió identificar inconsistencias en las variables, como valores atípicos o errores en las variables de edad y salario mensual, para lo cual, se ajustaron los datos respecto a la mediana para evitar sesgos en la obtención de resultados. Se encontró que variables tales como la del estado civil, nivel educativo y la cantidad de horas trabajadas influyen significativamente en las variables de estrés y satisfacción laboral. Encontramos que la gran mayoría de los trabajadores reportaron niveles moderados de estrés, sugiriendo una mejora en el ambiente laboral mediante estrategias de equilibrio entre la vida personal y el trabajo.
Hallazgos
Estado civil: La mayoría de los entrevistados son casados y solteros
Nivel educativo: Predomina el nivel de pregrado, indicando una fuerza laboral con formación universitaria
Estrés laboral: Los datos reportan principalmente niveles moderados, luego bajos y por último altos.
Satisfacción laboral: En su mayoría, los trabajadores indicaron niveles medios de satisfacción, lo cual indica áreas de mejora en el entorno laboral.