Introducción
se va a analizar la presencia de datos faltantes en la base de datos
correspondiente al proceso de selección y seguimiento de empleados. Las
variables analizadas son IQ, Psy y Perf. El objetivo es identificar el
mecanismo que puede generar los datos faltantes, describir su magnitud y
estructura, y realizar pruebas estadísticas para evaluar si los datos
son compatibles con un mecanismo de ausencia completamente aleatoria
(MCAR).
1. Mecanismo generador
de datos faltantes
1.1 Variable Psy
La variable Psy presenta datos faltantes porque algunos aspirantes no
completaron el cuestionario de bienestar psicológico debido a su
extensión no se establece que la ausencia de Psy dependa de los valores
observados o no observados de las variables del estudio. Por esta razón,
se considera que el mecanismo es compatible con
MCAR.
1.2 Variable
Perf
La variable Perf corresponde al desempeño laboral evaluado después de
seis meses de trabajo, por lo que solamente puede observarse para
quienes ingresaron a trabajar. La empresa contrata a los aspirantes con
IQ > 100, variable completamente observada. Por lo tanto, la ausencia
de Perf está relacionada con una covariable observada, y el mecanismo
corresponde a MAR / CDM .
Observación sobre la
base de datos
En la base aparece un registro con IQ = 99 y Perf observado, lo que
no coincide estrictamente con la regla de que solo se contrata a
aspirantes con IQ > 100. El registro se mantiene en el análisis
porque forma parte de los datos suministrados y no se cuenta con
información adicional que justifique su eliminación o modificación.
2. Descripción de los
datos faltantes
2.1 Carga de los
datos
library(readxl)
library(knitr)
library(ggplot2)
Empleados <- read_excel("D:/Manuel/Downloads/Empleados.xlsx")
names(Empleados)
## [1] "Id" "IQ" "Psy" "Perf"
2.2 Estructura de la
base de datos
str(Empleados)
## tibble [20 × 4] (S3: tbl_df/tbl/data.frame)
## $ Id : num [1:20] 1 2 3 4 5 6 7 8 9 10 ...
## $ IQ : num [1:20] 106 84 87 108 115 92 99 113 78 91 ...
## $ Psy : num [1:20] 10 10 NA NA 14 12 6 14 13 3 ...
## $ Perf: num [1:20] 15 NA NA 10 14 NA 7 12 NA NA ...
La base contiene 20 aspirantes y cuatro variables: Id, IQ, Psy y
Perf. La variable IQ se encuentra completamente observada, mientras que
Psy y Perf presentan datos faltantes.
2.3 Cantidad y
porcentaje de datos faltantes por variable
faltantes <- data.frame(
Variable = c("IQ", "Psy", "Perf"),
Faltantes = c(
sum(is.na(Empleados$IQ)),
sum(is.na(Empleados$Psy)),
sum(is.na(Empleados$Perf))
)
)
faltantes$Observados <- nrow(Empleados) - faltantes$Faltantes
faltantes$Porcentaje_Faltante <- round(
faltantes$Faltantes / nrow(Empleados) * 100,
2
)
kable(
faltantes,
caption = "Cantidad y porcentaje de datos faltantes por variable"
)
Cantidad y porcentaje de datos faltantes por variable
| IQ |
0 |
20 |
0 |
| Psy |
3 |
17 |
15 |
| Perf |
10 |
10 |
50 |
2.4 Gráfico de datos
faltantes
ggplot(faltantes, aes(x = Variable, y = Faltantes)) +
geom_col() +
labs(
title = "Cantidad de datos faltantes por variable",
x = "Variable",
y = "Cantidad de datos faltantes"
) +
theme_minimal()

2.5 Casos completos e
incompletos
Empleados$Numero_Faltantes <- rowSums(
is.na(Empleados[, c("IQ", "Psy", "Perf")])
)
casos <- data.frame(
Tipo = c("Casos completos", "Casos incompletos"),
Frecuencia = c(
sum(Empleados$Numero_Faltantes == 0),
sum(Empleados$Numero_Faltantes > 0)
)
)
casos$Porcentaje <- round(
casos$Frecuencia / nrow(Empleados) * 100,
2
)
kable(
casos,
caption = "Casos completos e incompletos"
)
Casos completos e incompletos
| Casos completos |
9 |
45 |
| Casos incompletos |
11 |
55 |
2.6 Número de datos
faltantes por unidad
tabla_unidad <- as.data.frame(table(Empleados$Numero_Faltantes))
names(tabla_unidad) <- c("Numero_de_Faltantes", "Frecuencia")
tabla_unidad$Porcentaje <- round(
tabla_unidad$Frecuencia / nrow(Empleados) * 100,
2
)
kable(
tabla_unidad,
caption = "Número de datos faltantes por unidad"
)
Número de datos faltantes por unidad
| 0 |
9 |
45 |
| 1 |
9 |
45 |
| 2 |
2 |
10 |
2.7 Patrones de datos
faltantes
patrones <- data.frame(
Psy = ifelse(is.na(Empleados$Psy), "Faltante", "Observado"),
Perf = ifelse(is.na(Empleados$Perf), "Faltante", "Observado")
)
patrones_tabla <- as.data.frame(table(patrones$Psy, patrones$Perf))
names(patrones_tabla) <- c("Psy", "Perf", "Frecuencia")
patrones_tabla$Porcentaje <- round(
patrones_tabla$Frecuencia / nrow(Empleados) * 100,
2
)
kable(
patrones_tabla,
caption = "Patrones de datos faltantes en Psy y Perf"
)
Patrones de datos faltantes en Psy y Perf
| Faltante |
Faltante |
2 |
10 |
| Observado |
Faltante |
8 |
40 |
| Faltante |
Observado |
1 |
5 |
| Observado |
Observado |
9 |
45 |
Se identifican cuatro patrones de datos faltantes: (1) Psy observado
y Perf observado, (2) Psy observado y Perf faltante, (3) Psy faltante y
Perf observado, (4) Psy faltante y Perf faltante. La estructura es
multivariada (más de una variable con faltantes) y
no monótona (existen casos con Psy faltante y Perf
observado, y viceversa).
2.8 Porcentaje global
de datos faltantes
total_faltantes <- sum(is.na(Empleados[, c("IQ", "Psy", "Perf")]))
total_observaciones <- nrow(Empleados) * 3
porcentaje_global <- round(total_faltantes / total_observaciones * 100, 2)
resultado_global <- data.frame(
Total_Faltantes = total_faltantes,
Total_Observaciones = total_observaciones,
Porcentaje_Faltante = porcentaje_global
)
kable(
resultado_global,
caption = "Resumen global de datos faltantes"
)
Resumen global de datos faltantes
| 13 |
60 |
21.67 |
2.9 Interpretación de
los datos faltantes
De los 20 aspirantes analizados, la variable IQ no presenta valores
faltantes, mientras que Psy presenta 3 valores faltantes (15%) y Perf
presenta 10 valores faltantes (50%). En total se identifican 13 valores
faltantes de 60 observaciones posibles (21.67%). Además, existen 9 casos
completos y 11 casos incompletos. Se identificaron cuatro patrones
diferentes de datos faltantes, por lo que la estructura es multivariada
y no monótona. Los faltantes se concentran principalmente en la variable
Perf.
3. Verificación
estadística del mecanismo de datos faltantes
Empleados$miss_Psy <- ifelse(is.na(Empleados$Psy), 1, 0)
Empleados$miss_Perf <- ifelse(is.na(Empleados$Perf), 1, 0)
kable(
head(Empleados[, c("Id", "IQ", "miss_Psy", "miss_Perf")]),
caption = "Indicadores binarios de datos faltantes"
)
Indicadores binarios de datos faltantes
| 1 |
106 |
0 |
0 |
| 2 |
84 |
0 |
1 |
| 3 |
87 |
1 |
1 |
| 4 |
108 |
1 |
0 |
| 5 |
115 |
0 |
0 |
| 6 |
92 |
0 |
1 |
3.2 Comparación de
varianzas de IQ
3.2.1 Variable
Psy
varianza_Psy <- aggregate(IQ ~ miss_Psy, data = Empleados, FUN = var)
names(varianza_Psy) <- c("Psy_Faltante", "Varianza_IQ")
varianza_Psy$Psy_Faltante <- ifelse(varianza_Psy$Psy_Faltante == 1, "Faltante", "Observado")
kable(varianza_Psy, digits = 2, caption = "Varianza de IQ según estado de Psy")
Varianza de IQ según estado de Psy
| Observado |
221.14 |
| Faltante |
111.00 |
prueba_var_Psy <- var.test(IQ ~ miss_Psy, data = Empleados)
prueba_var_Psy
##
## F test to compare two variances
##
## data: IQ by miss_Psy
## F = 1.9922, num df = 16, denom df = 2, p-value = 0.7709
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.05051929 9.33700728
## sample estimates:
## ratio of variances
## 1.99225
p_var_Psy <- prueba_var_Psy$p.value
resultado_var_Psy <- data.frame(
Estadistico_F = unname(prueba_var_Psy$statistic),
Valor_p = p_var_Psy,
Nivel_Significancia = 0.05,
Decision = ifelse(p_var_Psy < 0.05, "Rechazar H0", "No rechazar H0")
)
kable(resultado_var_Psy, digits = 4, caption = "Prueba F para las varianzas de IQ según Psy")
Prueba F para las varianzas de IQ según Psy
| 1.9922 |
0.7709 |
0.05 |
No rechazar H0 |
Conclusión: No se rechaza H0. No existe evidencia
estadística suficiente para afirmar que las varianzas de IQ sean
diferentes entre los grupos con Psy observado y Psy faltante, lo cual es
compatible con MCAR para Psy.
3.2.2 Variable
Perf
varianza_Perf <- aggregate(IQ ~ miss_Perf, data = Empleados, FUN = var)
names(varianza_Perf) <- c("Perf_Faltante", "Varianza_IQ")
varianza_Perf$Perf_Faltante <- ifelse(varianza_Perf$Perf_Faltante == 1, "Faltante", "Observado")
kable(varianza_Perf, digits = 2, caption = "Varianza de IQ según estado de Perf")
Varianza de IQ según estado de Perf
| Observado |
94.06 |
| Faltante |
33.39 |
prueba_var_Perf <- var.test(IQ ~ miss_Perf, data = Empleados)
prueba_var_Perf
##
## F test to compare two variances
##
## data: IQ by miss_Perf
## F = 2.817, num df = 9, denom df = 9, p-value = 0.1389
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
## 0.6996959 11.3411117
## sample estimates:
## ratio of variances
## 2.816972
p_var_Perf <- prueba_var_Perf$p.value
resultado_var_Perf <- data.frame(
Estadistico_F = unname(prueba_var_Perf$statistic),
Valor_p = p_var_Perf,
Nivel_Significancia = 0.05,
Decision = ifelse(p_var_Perf < 0.05, "Rechazar H0", "No rechazar H0")
)
kable(resultado_var_Perf, digits = 4, caption = "Prueba F para las varianzas de IQ según Perf")
Prueba F para las varianzas de IQ según Perf
| 2.817 |
0.1389 |
0.05 |
No rechazar H0 |
Conclusión: No se rechaza H0. No existe evidencia
estadística suficiente para afirmar que las varianzas de IQ sean
diferentes entre los grupos con Perf observado y Perf faltante.
4. Resumen de
resultados
resumen_pruebas <- data.frame(
Variable = c("Psy - Media", "Perf - Media", "Psy - Varianza", "Perf - Varianza"),
Valor_p = c(
prueba_media_Psy$p.value,
prueba_media_Perf$p.value,
prueba_var_Psy$p.value,
prueba_var_Perf$p.value
)
)
resumen_pruebas$Decision <- ifelse(
resumen_pruebas$Valor_p < 0.05,
"Rechazar H0",
"No rechazar H0"
)
kable(resumen_pruebas, digits = 4, caption = "Resumen de las pruebas estadísticas")
Resumen de las pruebas estadísticas
| Psy - Media |
0.6467 |
No rechazar H0 |
| Perf - Media |
0.0000 |
Rechazar H0 |
| Psy - Varianza |
0.7709 |
No rechazar H0 |
| Perf - Varianza |
0.1389 |
No rechazar H0 |
5. Conclusión
general
De acuerdo con el contexto del estudio, la variable Psy se considera
compatible con un mecanismo MCAR, debido a que la información
suministrada no establece una relación entre su ausencia y los valores
de las variables observadas o no observadas. Por otra parte, Perf se
considera MAR/CDM, debido a que su ausencia está relacionada con el
ingreso del aspirante a la empresa, proceso que depende de IQ, una
variable completamente observada.
El análisis descriptivo muestra que IQ no presenta datos faltantes,
mientras que Psy y Perf sí. Las pruebas estadísticas de comparación de
medias y varianzas de IQ entre grupos observados y faltantes se utilizan
como evidencia complementaria (no concluyente) sobre la compatibilidad
de cada variable con MCAR: no rechazar H0 es compatible con MCAR,
mientras que rechazarla es evidencia en contra de MCAR y, en el caso de
Perf, consistente con MAR/CDM, dado el proceso de selección descrito en
el enunciado.