Estadística Forense II
Notas de clase
Julio César Martínez Sánchez
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.
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
Ve al menú superior y selecciona File > New Project.
En la ventana que se abre, elige la opción New Directory para crear una nueva carpeta.
Luego, selecciona New Project para empezar un proyecto desde cero.
Paso 2: Nombrar y Guardar el Proyecto
A continuación, ingresa un nombre para tu proyecto, elige un nombre que te ayude a identificarlo fácilmente más adelante.
Después, selecciona la ubicación en tu computadora donde deseas guardar el proyecto, puede ser una carpeta nueva o una existente.
Finalmente, haz clic en Create Project para confirmar la creación.
Paso 3: Directorio de trabajo
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.
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:
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.
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")
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.
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"))
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)
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)
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:
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.
Covariables:
Categóricas:
Numéricas:
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
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()
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), "%"))
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)
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.