Introducción

El presente informe aplica diversas técnicas de análisis multivariado (Análisis Discriminante Lineal y Regresión Logística) sobre la base de datos antropométrica del hombro (Datos hombro.sav), utilizando las variables Longitud Máxima de la Clavícula Derecha (\(\text{LMCD}\)) y Circunferencia en el Punto Medio de la Clavícula Derecha (\(\text{C12CD}\)) con el objetivo de evaluar su capacidad para la determinación del sexo.

1. Comparación por Sexo (Prueba t o U de Mann-Whitney)

Se evalúa la existencia de diferencias estadísticamente significativas entre hombres y mujeres para las variables \(\text{LMCD}\) y \(\text{C12CD}\), seleccionando la prueba adecuada según el supuesto de normalidad (Prueba de Shapiro-Wilk).

# Función para realizar Shapiro-Wilk y elegir la prueba de comparación
comparar_por_sexo <- function(data, variable) {
  grupo_H <- data[[variable]][data$sexoN == "Hombre"]
  grupo_M <- data[[variable]][data$sexoN == "Mujer"]
  
  # Shapiro-Wilk test for normality
  p_norm_H <- shapiro.test(grupo_H)$p.value
  p_norm_M <- shapiro.test(grupo_M)$p.value
  
  # Seleccionar prueba
  if (p_norm_H > 0.05 & p_norm_M > 0.05) {
    # Paramétrico: t-test (asumiendo varianzas iguales por simplicidad)
    test <- t.test(data[[variable]] ~ data$sexoN, var.equal = TRUE)
    prueba_usada <- "t de Student"
  } else {
    # No paramétrico: U de Mann-Whitney (wilcox.test)
    test <- wilcox.test(data[[variable]] ~ data$sexoN)
    prueba_usada <- "U de Mann-Whitney"
  }
  
  resultados <- data.frame(
    Variable = variable,
    Media_Hombre = mean(grupo_H, na.rm = TRUE),
    Media_Mujer = mean(grupo_M, na.rm = TRUE),
    p_Shapiro_Hombre = p_norm_H,
    p_Shapiro_Mujer = p_norm_M,
    Prueba_Usada = prueba_usada,
    p_Valor = test$p.value
  )
  
  return(resultados)
}

# Aplicar a LMCD y C12CD
res_lmcd <- comparar_por_sexo(Hombro_sinNA_LMCD_C12CD, "LMCD")
res_c12cd <- comparar_por_sexo(Hombro_sinNA_LMCD_C12CD, "C12CD")

# Combinar y mostrar resultados
tabla_comparacion <- bind_rows(res_lmcd, res_c12cd)
print(round(tabla_comparacion, 4))

Interpretación: Se debe interpretar si los valores p de las pruebas de comparación son menores a \(\alpha = 0.05\). Si lo son, se rechaza la hipótesis nula (\(\text{H}_{0}\)) de que no existen diferencias por sexo y se concluye que la media de la variable es significativamente diferente entre hombres y mujeres.

Conclusión clave: Se espera rechazar la hipótesis nula (\(\text{H}_{0}\))5, lo que confirma que las medias de \(\text{LMCD}\) y \(\text{C12CD}\) son significativamente diferentes entre hombres y mujeres, validando su uso en los modelos de determinación sexual.

2. Función Discriminante con LMCD (LDA)

Se ajusta un modelo de Análisis Discriminante Lineal (\(\text{LDA}\)) para clasificar el sexo utilizando únicamente la variable \(\text{LMCD}\).

# Ajustar el modelo LDA
lda_lmcd <- lda(sexoN ~ LMCD, data = Hombro_sinNA_LMCD_C12CD)

# Extraer coeficientes y constante (b)
a_lmcd <- coef(lda_lmcd)
pred0_lmcd <- predict(lda_lmcd, newdata = data.frame(LMCD = 0))
b_lmcd <- pred0_lmcd$x

# Predicciones y punto de corte (Cutoff)
pred_lmcd <- predict(lda_lmcd)
centroide_H_lmcd <- mean(pred_lmcd$x[Hombro_sinNA_LMCD_C12CD$sexoN == "Hombre"])
centroide_M_lmcd <- mean(pred_lmcd$x[Hombro_sinNA_LMCD_C12CD$sexoN == "Mujer"])
cutoff_lmcd <- mean(c(centroide_H_lmcd, centroide_M_lmcd))

# Tabla de clasificación y precisión
tabla_clas_lmcd <- table(Observado = Hombro_sinNA_LMCD_C12CD$sexoN, Predicho = pred_lmcd$class)
prop_clas_lmcd <- sum(diag(tabla_clas_lmcd)) / sum(tabla_clas_lmcd) * 100

# --- Resultados Textuales ---
cat("\n**Modelo Discriminante con LMCD**\n")
cat(paste0("Función discriminante: D(x) = ", round(a_lmcd[1], 4), " * LMCD + ", round(b_lmcd[1], 4), "\n"))
cat(paste0("Punto de corte: ", round(cutoff_lmcd[1], 4), ". Si D > ", round(cutoff_lmcd[1], 4), " se clasifica como Hombre.\n\n"))

cat("\n**Tabla de Clasificación**\n")
print(tabla_clas_lmcd)
cat(paste0("\n**Porcentaje de clasificación correcta:** ", round(prop_clas_lmcd, 2), "%\n\n"))

# Ejemplo de aplicación (LMCD hipotético, e.g., 150)
LMCD_hipotetico <- 150
D_ejemplo_lmcd <- (a_lmcd[1] * LMCD_hipotetico) + b_lmcd[1]
clasificacion_lmcd <- ifelse(D_ejemplo_lmcd > cutoff_lmcd, "Hombre", "Mujer")
cat(paste0("**Ejemplo de Aplicación** (LMCD=", LMCD_hipotetico, " mm):\n"))
cat(paste0("D = ", round(D_ejemplo_lmcd, 4), ". Clasificación: ", clasificacion_lmcd, "\n"))

# Crea el dataframe para el gráfico (Necesario para el siguiente chunk)
data_scores_lmcd <- data.frame(D_score = pred_lmcd$x, sexoN = Hombro_sinNA_LMCD_C12CD$sexoN)
# Gráfico para LDA (histograma de puntuaciones con corte)
ggplot(data_scores_lmcd, aes(x = D_score, fill = sexoN)) +
  geom_density(alpha = 0.4) +
  geom_vline(xintercept = cutoff_lmcd, linetype = "dashed", color = "black") +
  labs(title = "Distribución de Puntuaciones Discriminantes (LMCD)",
       x = "Puntuación Discriminante (D)",
       y = "Densidad") +
  theme_minimal()

Conclusión clave: El modelo multifactorial \((\text{LMCD} + \text{C12CD})\) debe ofrecer un mayor porcentaje de clasificación correcta que el modelo unifactorial, demostrando el valor predictivo conjunto de la longitud y la robustez de la clavícula.

3. Función Discriminante con LMCD y C12CD (LDA Múltiple)

Se ajusta un modelo \(\text{LDA}\) para clasificar el sexo utilizando las dos variables \(\text{LMCD}\) y \(\text{C12CD}\) simultáneamente.

# Ajustar el modelo LDA
lda_lmcd_c12cd <- lda(sexoN ~ LMCD + C12CD, data = Hombro_sinNA_LMCD_C12CD)

# Extraer coeficientes y constante (b)
a_lmcd_c12cd <- coef(lda_lmcd_c12cd)
pred0_lmcd_c12cd <- predict(lda_lmcd_c12cd, newdata = data.frame(LMCD = 0, C12CD = 0))
b_lmcd_c12cd <- pred0_lmcd_c12cd$x

# Predicciones y punto de corte
pred_lmcd_c12cd <- predict(lda_lmcd_c12cd)
centroide_H_lmcd_c12cd <- mean(pred_lmcd_c12cd$x[Hombro_sinNA_LMCD_C12CD$sexoN == "Hombre"])
centroide_M_lmcd_c12cd <- mean(pred_lmcd_c12cd$x[Hombro_sinNA_LMCD_C12CD$sexoN == "Mujer"])
cutoff_lmcd_c12cd <- mean(c(centroide_H_lmcd_c12cd, centroide_M_lmcd_c12cd))

# Tabla de clasificación y precisión
tabla_clas_lmcd_c12cd <- table(Observado = Hombro_sinNA_LMCD_C12CD$sexoN, Predicho = pred_lmcd_c12cd$class)
prop_clas_lmcd_c12cd <- sum(diag(tabla_clas_lmcd_c12cd)) / sum(tabla_clas_lmcd_c12cd) * 100

# --- Resultados ---
cat("\n**Modelo Discriminante con LMCD y C12CD**\n")
cat(paste0("Función discriminante: D(x) = ", round(a_lmcd_c12cd[1, 1], 4), " * LMCD + ", round(a_lmcd_c12cd[1, 2], 4), " * C12CD + ", round(b_lmcd_c12cd[1], 4), "\n"))
cat(paste0("Punto de corte: ", round(cutoff_lmcd_c12cd[1], 4), ". Si D > ", round(cutoff_lmcd_c12cd[1], 4), " se clasifica como Hombre.\n\n"))

cat("\n**Tabla de Clasificación**\n")
print(tabla_clas_lmcd_c12cd)
cat(paste0("\n**Porcentaje de clasificación correcta:** ", round(prop_clas_lmcd_c12cd, 2), "%\n\n"))

# Ejemplo de aplicación (hipotético: LMCD=150, C12CD=28)
LMCD_h <- 150
C12CD_h <- 28
D_ejemplo_multiple <- (a_lmcd_c12cd[1, 1] * LMCD_h) + (a_lmcd_c12cd[1, 2] * C12CD_h) + b_lmcd_c12cd[1]
clasificacion_multiple <- ifelse(D_ejemplo_multiple > cutoff_lmcd_c12cd, "Hombre", "Mujer")
cat(paste0("**Ejemplo de Aplicación** (LMCD=", LMCD_h, " mm, C12CD=", C12CD_h, " mm):\n"))
cat(paste0("D = ", round(D_ejemplo_multiple, 4), ". Clasificación: ", clasificacion_multiple, "\n"))

# Gráfico para LDA (histograma de puntuaciones con corte)
data_scores_lmcd_c12cd <- data.frame(D_score = pred_lmcd_c12cd$x, sexoN = Hombro_sinNA_LMCD_C12CD$sexoN)
ggplot(data_scores_lmcd_c12cd, aes(x = D_score, fill = sexoN)) +
  geom_density(alpha = 0.4) +
  geom_vline(xintercept = cutoff_lmcd_c12cd, linetype = "dashed", color = "black") +
  labs(title = "Distribución de Puntuaciones Discriminantes (LMCD y C12CD)",
       x = "Puntuación Discriminante (D)",
       y = "Densidad") +
  theme_minimal()

4. Modelo Logístico con LMCD (GLM)

Se ajusta un modelo de Regresión Logística (\(\text{GLM}\)) para estimar la probabilidad de ser hombre en función de \(\text{LMCD}\).

# Ajustar el modelo logístico
glm_lmcd <- glm(sexoN ~ LMCD, 
                data = Hombro_sinNA_LMCD_C12CD, 
                family = binomial(link = "logit"))

# Coeficientes
coef_glm_lmcd <- coef(glm_lmcd)

# Predicciones y clasificación
Hombro_sinNA_LMCD_C12CD$prob_Hombre_glm_lmcd <- predict(glm_lmcd, type = "response")
Hombro_sinNA_LMCD_C12CD$predicho_glm_lmcd <- 
  ifelse(Hombro_sinNA_LMCD_C12CD$prob_Hombre_glm_lmcd >= 0.5, "Hombre", "Mujer")

# Tabla de clasificación y precisión
tabla_clas_glm_lmcd <- table(Real = Hombro_sinNA_LMCD_C12CD$sexoN, 
                             Predicho = Hombro_sinNA_LMCD_C12CD$predicho_glm_lmcd)
prop_clas_glm_lmcd <- mean(Hombro_sinNA_LMCD_C12CD$sexoN == Hombro_sinNA_LMCD_C12CD$predicho_glm_lmcd) * 100

# --- Resultados ---
cat("\n**Modelo Logístico con LMCD**\n")
cat(paste0("Ecuación Logística: logit(p) = ", round(coef_glm_lmcd[1], 4), " + ", 
           round(coef_glm_lmcd[2], 4), " * LMCD\n\n"))
cat("\n**Resumen del Modelo**\n")
print(summary(glm_lmcd))

cat("\n**Tabla de Clasificación (Punto de corte p=0.5)**\n")
print(tabla_clas_glm_lmcd)
cat(paste0("\n**Porcentaje de clasificación correcta:** ", round(prop_clas_glm_lmcd, 2), "%\n\n"))

# Ejemplo de aplicación (LMCD hipotético, e.g., 140)
LMCD_hipotetico_glm <- 140
logit_ejemplo_glm_lmcd <- coef_glm_lmcd[1] + (coef_glm_lmcd[2] * LMCD_hipotetico_glm)
prob_ejemplo_glm_lmcd <- exp(logit_ejemplo_glm_lmcd) / (1 + exp(logit_ejemplo_glm_lmcd))
clasificacion_glm_lmcd <- ifelse(prob_ejemplo_glm_lmcd >= 0.5, "Hombre", "Mujer")

cat(paste0("**Ejemplo de Aplicación** (LMCD=", LMCD_hipotetico_glm, " mm):\n"))
cat(paste0("logit(p) = ", round(logit_ejemplo_glm_lmcd, 4), ". P(Hombre) = ", round(prob_ejemplo_glm_lmcd, 4), " (", round(prob_ejemplo_glm_lmcd * 100, 2), "%). Clasificación: ", clasificacion_glm_lmcd, "\n"))

# Gráfico de densidades
ggplot(Hombro_sinNA_LMCD_C12CD, aes(x = prob_Hombre_glm_lmcd, fill = sexoN)) +
  geom_density(alpha = 0.4) +
  geom_vline(xintercept = 0.5, linetype = "dashed", color = "black") +
  labs(title = "Probabilidades Predichas de ser Hombre (LMCD)",
       x = "P(Hombre)",
       y = "Densidad") +
  theme_minimal()

Conclusión clave: Los modelos \(\text{GLM}\) proveen una estimación de probabilidad, lo que es útil en casos forenses. El modelo que combina ambas variables debe ser el más preciso.

5. Modelo Logístico con LMCD y C12CD (GLM Múltiple)

Se ajusta un modelo de Regresión Logística (\(\text{GLM}\)) utilizando las dos variables \(\text{LMCD}\) y \(\text{C12CD}\).

# Ajustar el modelo logístico
glm_lmcd_c12cd <- glm(sexoN ~ LMCD + C12CD, 
                     data = Hombro_sinNA_LMCD_C12CD, 
                     family = binomial(link = "logit"))

# Coeficientes
coef_glm_lmcd_c12cd <- coef(glm_lmcd_c12cd)

# Predicciones y clasificación
Hombro_sinNA_LMCD_C12CD$prob_Hombre_glm_lmcd_c12cd <- predict(glm_lmcd_c12cd, type = "response")
Hombro_sinNA_LMCD_C12CD$predicho_glm_lmcd_c12cd <- 
  ifelse(Hombro_sinNA_LMCD_C12CD$prob_Hombre_glm_lmcd_c12cd >= 0.5, "Hombre", "Mujer")

# Tabla de clasificación y precisión
tabla_clas_glm_lmcd_c12cd <- table(Real = Hombro_sinNA_LMCD_C12CD$sexoN, 
                                   Predicho = Hombro_sinNA_LMCD_C12CD$predicho_glm_lmcd_c12cd)
prop_clas_glm_lmcd_c12cd <- mean(Hombro_sinNA_LMCD_C12CD$sexoN == Hombro_sinNA_LMCD_C12CD$predicho_glm_lmcd_c12cd) * 100

# --- Resultados ---
cat("\n**Modelo Logístico con LMCD y C12CD**\n")
cat(paste0("Ecuación Logística: logit(p) = ", round(coef_glm_lmcd_c12cd[1], 4), " + ", 
           round(coef_glm_lmcd_c12cd[2], 4), " * LMCD + ",
           round(coef_glm_lmcd_c12cd[3], 4), " * C12CD\n\n"))
cat("\n**Resumen del Modelo**\n")
print(summary(glm_lmcd_c12cd))

cat("\n**Tabla de Clasificación (Punto de corte p=0.5)**\n")
print(tabla_clas_glm_lmcd_c12cd)
cat(paste0("\n**Porcentaje de clasificación correcta:** ", round(prop_clas_glm_lmcd_c12cd, 2), "%\n\n"))

# Ejemplo de aplicación (hipotético: LMCD=150, C12CD=28)
LMCD_h_glm <- 150
C12CD_h_glm <- 28
logit_ejemplo_glm_multiple <- coef_glm_lmcd_c12cd[1] + (coef_glm_lmcd_c12cd[2] * LMCD_h_glm) + (coef_glm_lmcd_c12cd[3] * C12CD_h_glm)
prob_ejemplo_glm_multiple <- exp(logit_ejemplo_glm_multiple) / (1 + exp(logit_ejemplo_glm_multiple))
clasificacion_glm_multiple <- ifelse(prob_ejemplo_glm_multiple >= 0.5, "Hombre", "Mujer")

cat(paste0("**Ejemplo de Aplicación** (LMCD=", LMCD_h_glm, " mm, C12CD=", C12CD_h_glm, " mm):\n"))
cat(paste0("logit(p) = ", round(logit_ejemplo_glm_multiple, 4), ". P(Hombre) = ", round(prob_ejemplo_glm_multiple, 4), " (", round(prob_ejemplo_glm_multiple * 100, 2), "%). Clasificación: ", clasificacion_glm_multiple, "\n"))

# Gráfico de densidades
ggplot(Hombro_sinNA_LMCD_C12CD, aes(x = prob_Hombre_glm_lmcd_c12cd, fill = sexoN)) +
  geom_density(alpha = 0.4) +
  geom_vline(xintercept = 0.5, linetype = "dashed", color = "black") +
  labs(title = "Probabilidades Predichas de ser Hombre (LMCD y C12CD)",
       x = "P(Hombre)",
       y = "Densidad") +
  theme_minimal()

#INTERPRETACIÓN