# 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. Revisión de datos:

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


2. Preparación de la base de datos:

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>

Revisión de valores faltantes

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

Revisión de datos atípicos

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()

Gráfico de caja y bigotes para Salario Mensual (sin atípicos)

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. Organización de datos en tablas de frecuencias:

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")
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.


4. Organización de datos en gráficos

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.

5. Hallazgos y conclusiones

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.