if(!require(psych)) install.packages(“psych”) # Para estadísticas descriptivas avanzadas if(!require(pastecs)) install.packages(“pastecs”) # Para análisis detallado de series if(!require(dplyr)) install.packages(“dplyr”) # Para manipulación de datos if(!require(seminr)) install.packages(“seminr”) # Específico para PLS-SEM
library(psych) library(pastecs) library(dplyr) library(seminr)
data <- corp_rep_data
items_data <- data %>% select_if(is.numeric)
print(“— 1. REPORTE DE NORMALIDAD (Skewness & Kurtosis) —”) desc_stats <- describe(items_data) print(desc_stats[, c(“n”, “mean”, “sd”, “skew”, “kurtosis”)])
problematic_items <- rownames(desc_stats)[abs(desc_stats\(skew) > 2 | abs(desc_stats\)kurtosis) > 2]
if(length(problematic_items) > 0) { print(paste(“ALERTA: Revisar normalidad en los siguientes ítems:”, paste(problematic_items, collapse=“,”))) } else { print(“ESTADO: La distribución de los datos es aceptable para PLS-SEM.”) }
print(“— 2. ANÁLISIS DE DATOS PERDIDOS —”) total_missing <- sum(is.na(items_data)) percent_missing <- mean(is.na(items_data)) * 100
print(paste(“Total de celdas vacías:”, total_missing)) print(paste(“Porcentaje global de datos perdidos:”, round(percent_missing, 2), “%”))
if(percent_missing > 5) { print(“ADVERTENCIA: Los datos perdidos superan el 5%. Se recomienda imputación avanzada (MICE o EM).”) } else { print(“ESTADO: Nivel de datos perdidos aceptable. Se procederá con reemplazo por media si es necesario.”) }
print(“— 3. VERIFICACIÓN DE VARIANZA —”) zero_var <- which(apply(items_data, 2, function(x) sd(x, na.rm = TRUE)) == 0)
if(length(zero_var) > 0) { print(paste(“CRÍTICO: Ítems con varianza cero detectados:”, names(zero_var))) print(“ACCIÓN REQUERIDA: Eliminar estos ítems antes de procesar el modelo SEM.”) } else { print(“ESTADO: Todos los ítems tienen varianza suficiente para el análisis.”) }
print(“— VERIFICACIÓN DE COLUMNAS DUPLICADAS —”) duplicated_columns <- duplicated(t(corp_rep_data))
if(any(duplicated_columns)){ print(“¡ALERTA ROJA! Se han detectado columnas con datos idénticos:”) print(colnames(corp_rep_data)[duplicated_columns]) print(“ACCIÓN: Debe eliminar una de las dos variables antes de continuar.”) } else { print(“ESTADO: No se encontraron variables con valores idénticos.”) }
print(“— ANÁLISIS DE CORRELACIÓN (R = 1.0) —”)
cor_matrix <- cor(corp_rep_data %>% select_if(is.numeric), use = “complete.obs”)
perfect_cor <- which(cor_matrix == 1 & row(cor_matrix) < col(cor_matrix), arr.ind = TRUE)
if(nrow(perfect_cor) > 0) { print(“ALERTA: Se encontraron correlaciones perfectas entre:”) for(i in 1:nrow(perfect_cor)) { var1 <- rownames(cor_matrix)[perfect_cor[i, 1]] var2 <- colnames(cor_matrix)[perfect_cor[i, 2]] print(paste(“Redundancia entre:”, var1, “y”, var2)) } } else { print(“ESTADO: No hay correlaciones perfectas. Los datos son linealmente independientes.”) }