logo_unam_enacif

Estadística Forense II

Notas de clase

Julio César Martínez Sánchez


Introducción

Este documento ha sido diseñado para complementar el curso de Estadística para las Ciencias Forenses II. Su propósito es ofrecerte un resumen exhaustivo de los temas tratados en las sesiones, incluyendo soluciones detalladas a los ejercicios propuestos y otros recursos útiles para profundizar tu comprensión de los contenidos abordados.

Este material está pensado para enriquecer y no para reemplazar las notas tomadas durante las clases. Funciona como una herramienta de referencia para ayudarte a consolidar y esclarecer los puntos clave del curso, facilitando así tu proceso de aprendizaje y entendimiento de la materia.



Creación de un Proyecto

Un proyecto en R es una carpeta que agrupa todos los archivos relacionados con tu investigación, tales como scripts, datos y resultados. Esto te ayudará a mantener todo organizado y facilitará volver a trabajar en el análisis en cualquier momento. También es útil para asegurar que los resultados puedan ser reproducidos en otro momento. Para crear un proyecto sigue los siguientes pasos:

Paso 1: Crea un Nuevo Proyecto

  1. Ve al menú superior y selecciona File > New Project.

  2. En la ventana que se abre, elige la opción New Directory para crear una nueva carpeta.

  3. Luego, selecciona New Project para empezar un proyecto desde cero.


proyecto_1


Paso 2: Nombrar y Guardar el Proyecto

  1. A continuación, ingresa un nombre para tu proyecto, elige un nombre que te ayude a identificarlo fácilmente más adelante.

  2. Después, selecciona la ubicación en tu computadora donde deseas guardar el proyecto, puede ser una carpeta nueva o una existente.

  3. Finalmente, haz clic en Create Project para confirmar la creación.


proyecto_2


  1. Una vez que hayas creado tu proyecto, ve a la esquina superior derecha de RStudio. Deberías ver el nombre de tu proyecto allí, lo que indica que está activo y listo para que trabajes en él.

Paso 3: Directorio de trabajo

  1. Usa el panel de archivos en la esquina inferior derecha para navegar a través de las carpetas de tu proyecto.


proyecto_4


  1. Haz clic en la carpeta que contiene el archivo con el que deseas trabajar. Luego, haz clic en la pelotita azul (botón con tres puntos horizontales) al lado del nombre de la carpeta y selecciona Set As Working Directory.

proyecto_5


Esto configurará la carpeta seleccionada como el directorio de trabajo, lo que significa que cualquier script que ejecutes buscará archivos y guardará resultados relativos a esta ubicación.



Regresión logística

Un modelo de regresión logística es un método utilizado para modelar la probabilidad de que ocurra un evento que solo tiene dos posibles resultados. Es útil en situaciones donde la variable dependiente (la que queremos predecir) es categórica y toma solo dos valores, como “sí” o “no”, “éxito” o “fracaso”.

Este modelo estima la probabilidad de que la variable dependiente (usualmente denotada por \(Y\)) pertenezca a una categoría en particular (usualmente representada como 1), dado un conjunto de variables independientes (denotadas por \(X_i\)). Matemáticamente, este modelo se expresa a través de la siguiente ecuación:

\[ Y=\text{logit}(p) = \ln\left(\frac{p}{1 - p}\right) = \beta_0 + \beta_1X_1 + \beta_2X_2 + \cdots + \beta_nX_n \]

donde:

  • \(p\) es la probabilidad de que el evento de interés ocurra (es decir, que la variable dependiente sea 1).
  • \(\text{logit}(p)\) es el logaritmo de los momios de que el evento ocurra.
  • \(\beta_0, \beta_1, \beta_2, \ldots, \beta_n\) son los coeficientes del modelo estimados a partir de los datos.
  • \(X_1, X_2, \ldots, X_n\) son las variables independientes.


Implementación en R

En la siguiente sección, exploraremos de manera detallada el procedimiento paso a paso para realizar la implementación en R. Cada paso está meticulosamente diseñado para guiar a las y los estudiantes a través del proceso, asegurando una comprensión clara y facilitando una ejecución sin contratiempos.


Entorno de trabajo

Los paquetes que vamos a utilizar son los siguientes:

foreign: Permiten trabajar con datos de SPSS, Stata y SAS.

stats: Tiene herramientas estadísticas básicas y avanzadas.

tidyverse: Sirve para manipular dataframes y visualizar datos.

readxl: Lee datos de Excel.

caTools: Funciones para manipular y dividir datos.

Antes de comenzar, eliminamos las variables existentes, cerramos los gráficos anteriores y desactivamos las advertencias. Esto nos ofrece un entorno limpio para comenzar a trabajar.


rm(list=ls()); graphics.off(); options(warn=-1)

# Lista de paquetes que vamos a utilizar
paquetes = c("foreign", "stats", "tidyverse", "readxl", "caTools")

# Verificamos que estén instalados y los cargamos
for (i in paquetes) {
    if (!require(i, character.only = TRUE)) {
        install.packages(i)
        library(i, character.only = TRUE)
    } else {
        library(i, character.only = TRUE)
    }
}


Para cargar la base de datos, primero debemos establecer la ruta de trabajo. Una forma sencilla para ubicarla es:

Dirígete a la pestaña que dice Files.

En esta sección, busca el menú desplegable More files commands (pelotita azul).

Navega hasta encontrar la carpeta donde has guardado el archivo llamado “Medidas de pelvis.xlsx”.

Haz clic en la opción Set As Working Directory que aparece en el menú.

Con estos pasos, tu ruta de trabajo estará correctamente establecida y ya podemos importar la base de datos

pelvis = read_excel("Medidas de pelvis.xlsx")


Descripción de la base de datos

La base de datos almacena información sobre mediciones de la pelvis, lo cual es clave en estudios médicos relacionados con la obstetricia y anatomía humana. Estas mediciones incluyen dimensiones externas e internas de la pelvis, lo que proporciona datos para diversas aplicaciones clínicas.


pelvis


El contenido de la base de datos es el siguiente:

ID SEX CE CA CO CD DIK DSSB DVPS LMP LMP_category LBAS LBAI LBPS LBPI LB DIEn DIEn_category DIEk DIKt DIKI DIP EIe EId LME LAE DO1E DO2E AAIe AAId PFIe PFId LS AMB ALPB AAPB ASP AIPe AIPd ADA ASaP ASaL
1 0 171 95 87 106 123 105 160 245 1 224 180 67 85 94 126 2 145 138 112 54.5 156 160 119 113 112 112 106 106 14.5 14.5 103 200 110 118 66 4 3 87 95 220
2 1 181 116 112 116 119 107 166 256 2 225 193 72 86 94 125 2 142 152 124 51.0 157 162 136 131 131 125 107 107 7 8 113 200 121 111 76 9 7 94 95 220
3 1 181 121 113 125 128 127 165 273 3 236 199 75 91 116 148 2 165 153 130 68.0 163 163 139 138 130 132 106 104 7 8 134 200 114 113 90 -2 -1 93 96 189
4 0 175 105 97 123 120 113 170 250 1 212 186 65 87 91 109 1 144 137 118 59.0 165 165 123 116 120 127 101 100 5 5 104 206 128 120 80 3 4 87 107 222
5 0 179 104 99 114 117 97 156 250 1 204 170 71 79 86 111 1 138 132 105 52.0 157 157 115 112 114 112 97 98 5 6 101 192 124 111 70 3 9 99 102 225
6 0 169 104 101 117 117 108 158 261 2 214 177 69 87 89 106 1 131 134 107 39.0 149 149 120 116 113 113 102 100 8 6 99 194 108 109 62 7 9 104 90 214

La descripción de la base de datos es el siguiente:

Variables Descripción
ID Número consecutivo para identificar cada registro
SEX 0 = Hombre 1 = Mujer
CE Conjugata externa: Diámetro entre el punto superior de la sínfisis púbica y la parte superior del proceso espinoso de la quinta vértebra lumbar
CA Conjugata anatómica: Distancia entre el promontorio sacro y el margen anterosuperior de la sínfisis púbica
CO Conjugata obstétrica: Diámetro desde el promontorio sacro hasta el punto posterosuperior de la sínfisis púbica


Asignamos etiquetas a las variables categóricas para facilitar la comprensión de los datos. Por ejemplo, en la variable “sexo” usamos las etiquetas “Hombre” y “Mujer”. Para la variable “LMP_category”, que representa la anchura máxima de la pelvis, definimos las categorías como: 1 = Baja (menos de 255 mm), 2 = Media (entre 256 mm y 269 mm), y 3 = Alta (más de 270 mm). Similarmente, en la variable “DIEn_category”, que indica el diámetro interendoischion, las categorías son: 1 = Menor a 115 mm y 2 = Mayor a 116 mm.

pelvis$SEX = factor(pelvis$SEX, 
                   levels = c(0, 1), 
                   labels = c("Hombre", "Mujer"))

pelvis$LMP_category = factor(pelvis$LMP_category, 
                            levels = c(1, 2, 3), 
                            labels = c("Baja", "Media", "Alta"))

pelvis$DIEn_category = factor(pelvis$DIEn_category, 
                             levels = c(1, 2), 
                             labels = c("Menor", "Mayor"))


Base de referencia

Para enfocarnos en las variables más importantes para nuestro análisis, primero definimos un conjunto de variables relevantes. En este caso, seleccionamos las siguientes variables del dataframe pelvis: “ID” (Identificador del sujeto), “SEX” (Sexo del sujeto), “CA” (Categoría A), “LMP_category” (Categoría de la anchura máxima de la pelvis), “LBAS” (Variable Básica L), “LB” (Variable B) y “DIEn_category” (Categoría del diámetro interendoischion).

Posteriormente, utilizamos la función select() para filtrar solo estas columnas y así asegurarnos que nuestro dataframe pelvis contenga únicamente la información esencial:

variables_seleccionadas = c("ID", "SEX", "CA", "LMP_category", "LBAS", "LB", "DIEn_category")

pelvis = pelvis %>% select(all_of(variables_seleccionadas))

Ahora actualizamos los nombres de las columnas para que reflejen más claramente la información que contienen. Para ello, cambiamos los nombres a “ID”, que representa el identificador del sujeto; “SEX”, que indica el sexo del sujeto; “Conjugata_anatomica”, para la medida de la conjugata anatomica; “Ancho_pelvis”, que describe el ancho de la pelvis; “Anchura_macroespina”, relacionada con la anchura en la macroespina; “Espina_isquiatica”, que detalla la medida en la espina isquiática; y “Interendoischions”, que señala la distancia entre los isquiones.

names(pelvis) = c("ID", "SEX", "Conjugata_anatomica", "Ancho_pelvis", "Anchura_macroespina", "Espina_isquiatica", "Interendoischions")


Para las variables que representan medidas y que deben ser tratadas como números, como la “Conjugata_anatomica”, la “Anchura_macroespina” y la “Espina_isquiatica”, hemos convertido sus valores a numéricos. Esto nos permite realizar operaciones matemáticas y estadísticas con estas medidas.

Por otro lado, para las variables que categorizan la información, como el “Ancho_pelvis” y los “Interendoischions”, las hemos convertido en factores. Los factores son útiles en R para manejar datos categóricos porque facilitan la agrupación y comparación de categorías durante el análisis.

Estos ajustes aseguran que cada variable se maneje de acuerdo con su verdadera naturaleza en los análisis subsiguientes, optimizando tanto la interpretación de los resultados como la precisión del estudio.

# Numéricas
pelvis$Conjugata_anatomica = as.numeric(pelvis$Conjugata_anatomica)
pelvis$Anchura_macroespina = as.numeric(pelvis$Anchura_macroespina)
pelvis$Espina_isquiatica = as.numeric(pelvis$Espina_isquiatica)

# Categóricas
pelvis$Ancho_pelvis = as.factor(pelvis$Ancho_pelvis)
pelvis$Interendoischions = as.factor(pelvis$Interendoischions)


División de la base de datos

Al trabajar con modelos estadísticos, especialmente aquellos que involucran entrenamiento y validación, la reproducibilidad es clave. Para asegurar que los resultados de nuestro análisis puedan ser reproducidos por otros investigadores o en futuras pruebas, comenzamos estableciendo una semilla fija usando set.seed(123). Esto garantiza que cualquier operación aleatoria que siga, como la división del conjunto de datos, sea consistente cada vez que se ejecute el código.

Para la división de los datos del conjunto pelvis, hemos elegido una proporción del 70% para el conjunto de entrenamiento y el 30% para el conjunto de prueba. Utilizando la función sample.split, especificamos esta proporción para asegurar que nuestro modelo se entrene con una amplia mayoría de los datos, reservando una parte suficiente para la validación y pruebas posteriores.

Una vez establecida la división, separamos los datos en dos subconjuntos: pelvis_correr_logit para el entrenamiento, que incluye el 70% de los datos donde el criterio de división es verdadero, y pelvis_validar_logit para la validación, que contiene el 30% restante de los datos donde el criterio de división es falso.

Este método nos permite no solo entrenar nuestro modelo de manera efectiva, sino también validar su rendimiento de manera confiable y reproducible.

# Fijar la semilla para reproducibilidad
set.seed(123)

# Dividir los pelvis en 70% entrenamiento y 30% prueba
dividir = sample.split(pelvis$ID, SplitRatio = 0.7)

pelvis_correr_logit = subset(pelvis, dividir == TRUE)
pelvis_validar_logit = subset(pelvis, dividir == FALSE)


Implementación del modelo

Cuando trabajamos con un conjunto de datos específico, como el de los pelvis para entrenamiento que incluye 179 observaciones, es esencial seleccionar y revisar las variables que utilizarás en el análisis. Aquí está cómo abordamos este paso en un contexto no técnico:

  1. Variable Dependiente: Comenzamos por examinar la distribución de la variable SEX en nuestro conjunto de entrenamiento. Esto implica contar cuántos sujetos se identifican como hombre o mujer. Esta variable es fundamental, ya que actuará como la variable dependiente en nuestro análisis, y entender su distribución nos ayudará a evaluar la representatividad y equilibrio del conjunto de datos.

  2. Covariables:

Categóricas:

  • Ancho de pelvis: Revisamos la frecuencia de las categorías dentro de esta variable para entender cómo se distribuyen los tamaños de pelvis en nuestro conjunto de entrenamiento.
  • Interendoischions: Similar al ancho de pelvis, exploramos cómo se distribuyen las distancias interendoischions entre los sujetos.

Numéricas:

  • Conjugata anatomica: Nos da una idea del tamaño promedio de esta medida específica de la pelvis.
  • Anchura macroespina: Esta media nos informa sobre el ancho promedio en la región de la macroespina.
  • Espina isquiatica: La media aquí nos ayuda a comprender la medida promedio de la espina isquiática entre los sujetos del conjunto de entrenamiento.

Cada uno de estos pasos nos proporciona una visión clara del perfil de los datos con los que trabajaremos, asegurando que las variables seleccionadas son pertinentes para el análisis y reflejan adecuadamente las características del grupo de estudio. Esta metodología no solo prepara el terreno para un análisis estadístico robusto, sino que también garantiza que los resultados sean relevantes y confiables.

# 4.1 Variable dependiente
table(pelvis_correr_logit$SEX)

# 4.2 Covariables
table(pelvis_correr_logit$Ancho_pelvis)
table(pelvis_correr_logit$Interendoischions)

mean(pelvis_correr_logit$Conjugata_anatomica)
mean(pelvis_correr_logit$Anchura_macroespina)
mean(pelvis_correr_logit$Espina_isquiatica)

El siguiente paso en nuestro análisis es correr el modelo logístico. Utilizamos este tipo de modelo porque nuestra variable dependiente, SEX, es binaria, con categorías “Hombre” y “Mujer”.

Esto significa que estamos interesados en modelar la probabilidad de que un sujeto sea hombre o mujer basándonos en distintas características pélvicas. Las variables que utilizamos en este modelo son: Conjugata anatomica, Ancho de pelvis, Anchura macroespina, Espina isquiática e Interendoischions.


En términos matemáticos, la ecuación que estamos validando en nuestro modelo es la siguiente:

\[Pr(\text{SEX} = \text{Hombre}) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 \cdot \text{Conjugata_anatomica} + \beta_2 \cdot \text{Ancho_pelvis} + \beta_3 \cdot \text{Anchura_macroespina} + \beta_4 \cdot \text{Espina_isquiatica} + \beta_5 \cdot \text{Interendoischions})}}\]

resultados_logit = glm(SEX ~ Conjugata_anatomica + Ancho_pelvis + Anchura_macroespina + Espina_isquiatica + Interendoischions,
                       data = pelvis_correr_logit, 
                       family = "binomial")

Donde \(\beta_0\), \(\beta_1\),…, \(\beta_5\) son los coeficientes que el modelo estimará para cada predictor. Estos coeficientes determinan la influencia de cada variable en la probabilidad de que los huesos sean de un varón.


Al ejecutar summary(resultados_logit) en R obtenemos un resumen detallado del modelo logístico ajustado. Este resumen incluye:

  • Estimaciones de los coeficientes: Muestra los coeficientes estimados para la intersección y cada predictor en el modelo. Estos coeficientes indican la relación entre cada variable independiente y la probabilidad logarítmica de que la variable dependiente (en este caso, el sexo del sujeto) sea “Hombre”.

  • Errores estándar de los coeficientes: Estos valores te ayudan a entender la precisión de las estimaciones de los coeficientes.

  • Valor-z: Es el cociente entre el coeficiente estimado y su error estándar, utilizado para probar la hipótesis nula de que el coeficiente es igual a cero (no tiene efecto).

  • P-valores: Ayudan a determinar la significancia estadística de cada coeficiente. Un p-valor bajo (comúnmente menor que 0.05) sugiere que es poco probable que el efecto observado se deba al azar, y que la variable correspondiente tiene un impacto significativo en la respuesta.

  • Estadísticas del modelo: Incluyen el logaritmo de la verosimilitud, el AIC (Criterio de Información de Akaike) y el BIC (Criterio de Información Bayesiano), que son útiles para evaluar la calidad del ajuste del modelo.

summary(resultados_logit)
## 
## Call:
## glm(formula = SEX ~ Conjugata_anatomica + Ancho_pelvis + Anchura_macroespina + 
##     Espina_isquiatica + Interendoischions, family = "binomial", 
##     data = pelvis_correr_logit)
## 
## Coefficients:
##                          Estimate Std. Error z value Pr(>|z|)    
## (Intercept)            -29.022037   6.111132  -4.749 2.04e-06 ***
## Conjugata_anatomica      0.034976   0.021811   1.604   0.1088    
## Ancho_pelvisMedia       -1.223737   0.618451  -1.979   0.0478 *  
## Ancho_pelvisAlta        -0.993169   0.828005  -1.199   0.2303    
## Anchura_macroespina      0.003807   0.021333   0.178   0.8584    
## Espina_isquiatica        0.268856   0.041942   6.410 1.45e-10 ***
## InterendoischionsMayor  -1.204948   0.531277  -2.268   0.0233 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 248.14  on 178  degrees of freedom
## Residual deviance: 133.58  on 172  degrees of freedom
## AIC: 147.58
## 
## Number of Fisher Scoring iterations: 6


Interpretación del modelo

Basándonos en la tabla resumen del modelo, hemos identificado que algunas características son clave para determinar el sexo de un individuo: la espina isquiática, la categoría mediana del ancho de pelvis y la medida mayor de interendoischions. Estos resultados nos indican que estas características influyen significativamente en la probabilidad de identificar si un sujeto es hombre o mujer.

Para facilitar la comprensión del efecto que cada una de estas variables tiene, transformamos los coeficientes del modelo en algo llamado momios (odds ratios). Los momios nos ayudan a entender cómo la probabilidad de ser hombre cambia con diferentes valores de estas características. Aquí te explico cada uno:

  • Espina isquiática: Con un momio de 1.3085, esto significa que un aumento en la medida de la espina isquiática se asocia con una mayor probabilidad de que el sujeto sea hombre.

  • Ancho de pelvis - Mediana: Un momio de 0.2941 indica que tener una pelvis de anchura mediana reduce la probabilidad de ser hombre, en comparación con la categoría de referencia, que es la anchura baja.

  • Interendoischions - Mayor: Un momio de 0.2997 muestra que una mayor distancia entre los isquiones está asociada con una menor probabilidad de ser hombre.

Es importante mencionar que solo estamos interpretando los efectos de las variables que mostraron significancia estadística en el modelo.

Adicionalmente, evaluamos algunas estadísticas descriptivas del modelo para verificar su ajuste y eficacia: - Devianza Residual: Un valor de 133.58 con 172 grados de libertad, comparado con una devianza nula de 248.14 con 178 grados de libertad, indica que el modelo ajusta bien los datos, mejorando significativamente la predicción en comparación con un modelo sin estas variables. - AIC (Criterio de Información de Akaike): Un AIC de 147.58 nos ayuda a entender que el modelo tiene un buen equilibrio entre precisión y simplicidad, sugiriendo que las variables seleccionadas son adecuadas para explicar la variabilidad en el sexo del sujeto sin ser demasiado complejas.

Este análisis nos ofrece una visión clara de cómo ciertas características físicas pueden influir en la identificación del sexo, proporcionando bases sólidas para aplicaciones prácticas en diversos campos como la medicina y la antropología forense.

exp(coefficients(resultados_logit)) %>% round(digits = 4) %>% data.frame()


Validación de los supuestos

Cuando ajustamos un modelo logístico, es importante validar los supuestos subyacentes para asegurarnos de que las inferencias que hacemos son válidas. Una forma de hacer esto es utilizando una prueba ANOVA para modelos de regresión logística, lo que nos ayuda a entender si las variables incluidas en el modelo contribuyen significativamente a explicar la variabilidad en la variable dependiente, en este caso, el sexo.

Esta prueba compara el modelo completo (con todas las variables predictoras incluidas) contra modelos más simples sin algunas de las variables. Esto nos permite evaluar si quitar variables del modelo reduce significativamente su capacidad para explicar la variable dependiente. Además, nos permite evaluar la contribución individual de cada variable para determinar su contribución única al modelo.

El análisis de devianza para nuestro modelo logístico indica que la Espina isquiática y la Conjugata anatomica son predictores fuertes y significativos en la determinación del sexo, mientras que la variable Interendoischions también contribuye, aunque en menor medida. En contraste, el Ancho de pelvis y la Anchura macroespina no ofrecen mejoras significativas en la explicación de la variabilidad del sexo y podrían ser excluidas para simplificar el modelo. Además, la comparación de la devianza residual después de incorporar estas variables muestra una reducción sustancial desde el modelo nulo, lo que refleja un buen ajuste general del modelo. Este ajuste robusto sugiere que el modelo, con las variables significativas, logra capturar eficazmente las diferencias en el sexo de los individuos analizados, proporcionando una base sólida para inferencias precisas y confiables.

anova(resultados_logit, test = 'Chisq')

Después de ajustar nuestro modelo logístico, realizamos predicciones y evaluamos su precisión mediante una matriz de confusión y el cálculo de la precisión global del modelo. Utilizamos los valores ajustados del modelo (resultados_logit$fitted.values), que representan las probabilidades predichas de que la observación sea clasificada como hombre. Establecemos un umbral de 0.5 para decidir la clasificación: si la probabilidad es mayor que 0.5, la predicción es 1 (hombre); si es menor, la predicción es 0 (mujer).

La matriz de confusión compara las clasificaciones reales de las observaciones (datos observados en el modelo) con las predicciones hechas por el modelo. Esta matriz los valores reales de la variable SEX son las filas y las columnas son las predicciones del modelo.

La matriz proporciona una visualización clara de:

Verdaderos positivos (VP): Casos correctamente identificados como hombres. Falsos positivos (FP): Casos incorrectamente identificados como hombres. Verdaderos negativos (VN): Casos correctamente identificados como mujeres. Falsos negativos (FN): Casos incorrectamente identificados como mujeres.

predicciones = ifelse(test = resultados_logit$fitted.values > 0.5, yes = 1, no = 0)
matriz_confusion = table(resultados_logit$model$SEX, predicciones, dnn = c("Observaciones", "Predicciones"))
print(matriz_confusion)

Para calcular la precisión del modelo, procedemos de la siguiente manera:

Sumamos los valores en la diagonal de la matriz de confusión. Estos valores representan las instancias donde el modelo ha predicho correctamente la categoría real. Sumamos todos los valores de la matriz de confusión para obtener el total de predicciones realizadas. Dividimos la suma de los valores correctos (diagonal) entre el total de predicciones. Este cociente nos da la precisión del modelo, que es la proporción de predicciones correctas entre todas las predicciones realizadas.

Finalmente, expresamos la precisión del modelo como un porcentaje para facilitar su interpretación. Por ejemplo, si la precisión calculada es 0.8575, la presentamos diciendo: “La precisión del modelo es: 85.75%”. Este número refleja eficazmente qué tan bien el modelo está realizando sus predicciones basadas en las variables incluidas y nos indica la calidad general del modelo en términos de su capacidad predictiva.

precision = sum(diag(matriz_confusion)) / sum(matriz_confusion)
print(paste("La precisión del modelo es:", round(precision * 100, 2), "%"))


Predicción del modelo

En la fase final de nuestro tutorial sobre el modelo logístico, evaluaremos cómo el modelo ajustado realiza predicciones sobre un conjunto de datos que no fue utilizado durante la etapa de entrenamiento. Este proceso es esencial para verificar la capacidad del modelo de generalizar y funcionar eficazmente con datos nuevos.

Primero, utilizamos la función predict de R para obtener las probabilidades predichas de que cada observación en el conjunto de validación sea clasificada como hombre. Especificamos type = "response" para que la función nos devuelva las probabilidades en lugar de los logit (logaritmos de las odds). Luego, asignamos etiquetas a cada observación basadas en estas probabilidades: si la probabilidad de ser hombre es mayor que 0.5, la observación se etiqueta como “Hombre”; de lo contrario, como “Mujer”.

A continuación, construimos una matriz de confusión usando la función table en R. Esta matriz compara las etiquetas reales de las observaciones (pelvis_validar_logit$SEX) con las predicciones generadas (pelvis_validar_logit$Predicciones). La matriz de confusión nos permite visualizar el número de predicciones correctas, que se encuentran en la diagonal de la matriz, y los errores de clasificación, que aparecen fuera de la diagonal.

La matriz nos muestra los verdaderos positivos (VP) y verdaderos negativos (VN), donde el modelo ha predicho correctamente el sexo del individuo. También nos muestra los falsos positivos (FP) y falsos negativos (FN), que representan los casos en los que el modelo ha fallado al predecir el sexo correcto. Estos resultados son cruciales para evaluar la precisión y la eficacia del modelo en situaciones reales y ayudan a entender su aplicabilidad práctica.

Este análisis final proporciona una valoración integral de cómo el modelo se comporta con datos nuevos, lo cual es un indicador clave de su robustez y fiabilidad.

probabilidades_predichas = predict(resultados_logit, newdata = pelvis_validar_logit, type = "response")
pelvis_validar_logit$Predicciones = ifelse(probabilidades_predichas > 0.5, "Mujer", "Hombre")

table(Observaciones = pelvis_validar_logit$SEX, Predicciones = pelvis_validar_logit$Predicciones)

Material extra

Te invito a visitar mi canal de YouTube Link donde comparto videos sobre estadística multivariada y demografía. Si consideras que el contenido es de tu interés y utilidad, te agradecería mucho si decides suscribirte.