Taller 1 - Analisis exploratorio de datos

1. Revisión de datos:

1.1 ¿Cuál es la población objetivo? La población objetivo es trabajadores de Colombia de diversos sectores.

1.2 ¿Existe una muestra? ¿Cuál es? Si, la muestra es 300 trabajadores de Colombia de diversos secotores seleccionados a través de mjuestreo aleatorio simple.

1.3 Menciones un parámetro y un estadístico en este estudio. Parámetro: Promedio de edad de la poblacion de trabajadores de Colombia de diversos sectores. Estadístico: Promedio de edad de la muestra de los 300 trabajadores de Colombia de diversos sectores.

1.4 Clasifique cada una de las variables de la base de datos acuerdo con su naturaleza y nivel de medición

Variable Género: Categórica Nominal Variable Estado Civil: Categórica Nominal Variable Nivel de Escolaridad: Categórica Ordinal Variable Nivel de Estrés laboral: Categórica Ordinal Variable Satisfacción Laboral: Categórica Ordinal Variable Edad: Númerica Continua Variable Horas de Trabajo Semanal: Númerica Continua Variable Horas de Sueño: Númerica Continua Variable Salario Mensual: Númerica Continua

2. Preparación de la base de datos:

Cargar base de datos:

library(readr)
Base<- read_csv("dataset_taller1(in).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

names(Base)
## [1] "genero"                "estado_civil"          "nivel_escolaridad"    
## [4] "nivel_estres_laboral"  "satisfaccion_laboral"  "edad"                 
## [7] "horas_trabajo_semanal" "horas_sueno"           "salario_mensual"

Dimesiones de la base de datos

dim(Base)
## [1] 300   9

Mostrar las primeras filas de la base de datos

head(Base)
## # A tibble: 6 × 9
##   genero    estado_civil nivel_escolaridad nivel_estres_laboral
##   <chr>     <chr>        <chr>             <chr>               
## 1 masculino soltero      secundaria        bajo                
## 2 otro      casado       secundaria        bajo                
## 3 femenino  casado       secundaria        bajo                
## 4 femenino  casado       primaria          moderado            
## 5 masculino casado       primaria          moderado            
## 6 masculino viudo        pregrado          alto                
## # ℹ 5 more variables: satisfaccion_laboral <chr>, edad <dbl>,
## #   horas_trabajo_semanal <dbl>, horas_sueno <dbl>, salario_mensual <dbl>

Tipos de datos

str(Base)
## 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

sum(is.na(Base))
## [1] 45

¿Qué se encontró? Realizando la revision de la base de datos se encontraron 45 datos faltantes, lo que indica que la base de datos es incompleta.

Revisión de datos atípicos

summary(Base)
##     genero          estado_civil       nivel_escolaridad  nivel_estres_laboral
##  Length:300         Length:300         Length:300         Length:300          
##  Class :character   Class :character   Class :character   Class :character    
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character    
##                                                                               
##                                                                               
##                                                                               
##                                                                               
##  satisfaccion_laboral      edad       horas_trabajo_semanal  horas_sueno    
##  Length:300           Min.   : 9.00   Min.   :10.79         Min.   : 2.471  
##  Class :character     1st Qu.:28.00   1st Qu.:34.60         1st Qu.: 6.008  
##  Mode  :character     Median :35.00   Median :40.64         Median : 6.958  
##                       Mean   :35.11   Mean   :40.84         Mean   : 6.945  
##                       3rd Qu.:41.00   3rd Qu.:47.46         3rd Qu.: 7.901  
##                       Max.   :61.00   Max.   :71.93         Max.   :11.707  
##                                       NA's   :20                            
##  salario_mensual 
##  Min.   : -9724  
##  1st Qu.:  2031  
##  Median :  3301  
##  Mean   :  7805  
##  3rd Qu.:  4735  
##  Max.   :605894  
##  NA's   :25

¿Qué se encontró? Se econtró 1 valor atípico en la variables de edad y 2 valores atipicos en salario mensual. El valor atípico es -9724 en salario minimo; mientras que en el valor atipico maximo en dichas variables fue de 61 años en edad y 605894 en salario minimo.


3. Organización de datos en tablas de frecuencias:

Tabla para la variable: Nivel de Escolaridad

tabla_nivel_de_escolaridad <- table(Base$nivel_escolaridad)
print(tabla_nivel_de_escolaridad)
## 
##   posgrado   pregrado   primaria secundaria 
##         39        114         46        101

Tabla para la variable: Genero

tabla_genero <- table(Base$genero)
print(tabla_genero)
## 
##  femenino masculino      otro 
##       135       136        29

Tabla para la variable: Edad

Base$edad <- as.numeric(as.character(Base$edad))

Base <- Base[!is.na(Base$edad), ]

num_intervals <- nclass.Sturges(Base$edad)

tabla_edad <- table(
  cut(Base$edad, breaks = num_intervals, include.lowest = TRUE)
)

tabla_edad <- as.data.frame(tabla_edad)

colnames(tabla_edad) <- c("Rango_de_Edad", "Frecuencia")

tabla_edad$frecuencia_relativa <- round(
  prop.table(tabla_edad$Frecuencia) * 100, 2
)

tabla_edad
##    Rango_de_Edad Frecuencia frecuencia_relativa
## 1    [8.95,14.2]          4                1.33
## 2    (14.2,19.4]         12                4.00
## 3    (19.4,24.6]         28                9.33
## 4    (24.6,29.8]         47               15.67
## 5      (29.8,35]         62               20.67
## 6      (35,40.2]         68               22.67
## 7    (40.2,45.4]         34               11.33
## 8    (45.4,50.6]         24                8.00
## 9    (50.6,55.8]         11                3.67
## 10   (55.8,61.1]         10                3.33

Tabla para las variables: Satisfacción Laboral y Nivel de estrés laboral

tabla_contingencia <- table(Base$nivel_estres_laboral, Base$satisfaccion_laboral)

tabla_contingencia
##           
##            alta baja media nan
##   alto       16   22    26   6
##   bajo       22   29    38   4
##   moderado   30   28    74   5

4. Organización de datos en gráficos

Gráfico de tipo diagrama circular para la variable: Genero

tabla_genro <- table(Base$frecuencia_genero)
## Warning: Unknown or uninitialised column: `frecuencia_genero`.
df_genero <- as.data.frame(tabla_genero)
colnames(df_genero) <- c("Frecuencia de Genero", "Frecuencia")

ggplot(df_genero, aes(x = "", y = Frecuencia, fill = `Frecuencia de Genero`)) +  
  geom_bar(stat = "identity", width = 1) +  
  coord_polar("y", start = 0) +  
  labs(title = "Frecuencia de Genero (Gráfico Circular)") +  
  theme_void()

¿Qué ve? Se evidencia que hay mayor porcentaje de hombres con respecto a mujeres y hay mas mujeres y otros combinados con respecto a hombres.

Gráfico de tipo histograma para la variable: Edad

ggplot(Base, aes(x = edad)) +  
  geom_histogram(bins = 10, fill = "steelblue", color = "black", alpha = 0.7) +  
  labs(title = "Distribución de Edades", x = "Edad", y = "Frecuencia") +  
  theme_minimal()

¿Qué ve? Se evidencia un sesgo positivo debido a que la acumulación de datos esta a la izquierda.

Gráfico de tipo caja y bigotes para la variable: salario mensual

options(scipen=999)

boxplot(Base$salario_mensual, horizontal=TRUE, col='cadetblue4', 
        main="Boxplot de Salario Mensual (Sin Valores Extremos)", 
        outline=FALSE)

¿Qué ve? La media tiene un valor de 7805 y la mediana un valor de 3301 mostrado en los cinco números, que indica la presencia de dispersión y valores atipicos. —

5. Hallazgos y conclusiones

  • Dentro de los hallazgos principales se encontro que hacian falta datos, y que a su vez habian datos atipicos.
  • Hay mas hombres trabajadores que mujeres, pero hay mas mujeres y otros que hombres trabajadores.
  • Hay salarios que estan mas dispersos de la media que indican que hay valores atipicos, lo cual influye en la mediana.
  • Hay sesgos postivos en la variable edad.

Hay que tener en cuenta varios factores, dentro de los cuales se encuetran los datos incompletos, valores atipicos, falta de concordancia entre nivel de escolaridad y edad mostrda en la base de datos, ademas de los sesgos.