setwd(“~/DAVID”) ##Abriendo paquete pacman library(pacman) ## El archivo esta en formato SPSS, lo abrimos mediante la libreria haven p_load(haven,dplyr,ggplot2,MASS,tinytex) Hombro <- read_sav(“Datos hombro.sav”) table (Hombro\(sexoN) ## Frecuencias de sexo ## Cambiamos las categorías para predecir p(Hombre) Hombro\)sexoN <- factor(Hombro\(sexoN, levels = c(2, 1), labels = c("Mujer", "Hombre")) table (Hombro\)sexoN) ## Frecuencias de sexo
Hombro_sinNA <- na.omit(Hombro[, c(“sexoN”, “LMCD”,“C12CD”)]) # Ajustar modelo logístico binario
##TAREA.NOV 2025 ###TAREA:LMCD #Modelo discrimante #Punto de corte #Tabla y % de clasificación.
setwd(“~/DAVID”) ##Abriendo paquete pacman library(pacman) ## El archivo esta en formato SPSS, lo abrimos mediante la libreria haven p_load(haven,dplyr,ggplot2,MASS,tinytex) Hombro <- read_sav(“Datos hombro.sav”) table (Hombro\(sexoN) ## Frecuencias de sexo ## Cambiamos las categorías para predecir p(Hombre) Hombro\)sexoN <- factor(Hombro\(sexoN, levels = c(2, 1), labels = c("Mujer", "Hombre")) table (Hombro\)sexoN) ## Frecuencias de sexo
Hombro_sinNA <- na.omit(Hombro[, c(“sexoN”, “LMCD”,“C12CD”)]) # Ajustar modelo logístico binario
Hombro_sinNA <- na.omit(Hombro[, c(“sexoN”, “LMCD”)]) # Ajustar el modelo con la base depurada ## El modelo discriminante es D=a*LMCD+b lda1 <- lda(sexoN ~ LMCD, data = Hombro_sinNA) a <- coef(lda1) ## El factor que multiplica a LMCD pred0 <- predict(lda1, newdata = data.frame(LMCD = 0)) b <- pred0\(x # valor de D cuando LMCD=0 es b pred <- predict(lda1) ## Predicción de sexo para todos los valores de # medias de la función discriminante por grupo centroide_H <- mean(pred\)x[Hombro_sinNA$sexoN == “Hombre”])
centroide_M <- mean(pred\(x[Hombro_sinNA\)sexoN == “Mujer”]) # Punto de corte (promedio de centroides, priors iguales) cutoff <- mean(c(centroide_H, centroide_M))
cat(“Función discriminante: D(x) =”, round(a, 4), ” * LMCD + “, round(b, 4),”“) cat(”Punto de corte=“, round(cutoff, 4),”Si D>“,round(cutoff, 4),”es Hombre”)
tabla_clas <- table(Observado = Hombro_sinNA\(sexoN, Predicho = pred\)class) tabla_clas prop_clas <- sum(diag(tabla_clas)) / sum(tabla_clas)*100 cat(“El porcentaje de clasificación correcta es”,round(prop_clas,1),“%”)
###TAREA:C12CD #Modelo discrimante #Punto de corte #Tabla y % de clasificación.
Hombro_sinNA <- na.omit(Hombro[, c(“sexoN”, “C12CD”)]) # Ajustar el modelo con la base depurada ## El modelo discriminante es D=a*C12CD+b lda1 <- lda(sexoN ~ C12CD, data = Hombro_sinNA) a <- coef(lda1) ## El factor que multiplica a C12CD pred0 <- predict(lda1, newdata = data.frame(C12CD = 0)) b <- pred0\(x # valor de D cuando C12CD=0 es b pred <- predict(lda1) ## Predicción de sexo para todos los valores de # medias de la función discriminante por grupo centroide_H <- mean(pred\)x[Hombro_sinNA\(sexoN == "Hombre"]) centroide_M <- mean(pred\)x[Hombro_sinNA$sexoN == “Mujer”]) # Punto de corte (promedio de centroides, priors iguales) cutoff <- mean(c(centroide_H, centroide_M))
cat(“Función discriminante: D(x) =”, round(a, 4), ” * C12CD + “, round(b, 4),”“) cat(”Punto de corte=“, round(cutoff, 4),”Si D>“,round(cutoff, 4),”es Hombre”)
tabla_clas <- table(Observado = Hombro_sinNA\(sexoN, Predicho = pred\)class) tabla_clas prop_clas <- sum(diag(tabla_clas)) / sum(tabla_clas)*100 cat(“El porcentaje de clasificación correcta es”,round(prop_clas,1),“%”)
###TAREA NOV 2025. ##LMCD ## Defino mi directorio de trabajo setwd(“~/DAVID”) ##Abriendo paquete pacman library(pacman) ## El archivo esta en formato SPSS, lo abrimos mediante la libreria haven p_load(haven,dplyr,ggplot2,MASS,tinytex) Hombro <- read_sav(“Datos hombro.sav”) table (Hombro\(sexoN) ## Frecuencias de sexo ## Cambiamos las categorías para predecir p(Hombre) Hombro\)sexoN <- factor(Hombro\(sexoN, levels = c(2, 1), labels = c("Mujer", "Hombre")) table (Hombro\)sexoN) ## Frecuencias de sexo
Hombro_sinNA <- na.omit(Hombro[, c(“sexoN”, “LMCD”,“C12CD”)]) # Ajustar modelo logístico binario
modelo1 <- glm(sexoN ~ LMCD + C12CD, data = Hombro_sinNA, family = binomial(link = “logit”)) summary(modelo1)
Hombro_sinNA$prob_Hombre <- predict(modelo1, type = “response”)
Hombro_sinNA\(predicho <- ifelse(Hombro_sinNA\)prob_Hombre >= 0.5, “Hombre”, “Mujer”)
table(Real = Hombro_sinNA\(sexoN, Predicho = Hombro_sinNA\)predicho)
mean(Hombro_sinNA\(sexoN == Hombro_sinNA\)predicho) * 100
ggplot(Hombro_sinNA, aes(x = prob_Hombre, fill = sexoN)) + geom_density(alpha = 0.4) + geom_vline(xintercept = 0.5, linetype = “dashed”) + theme_minimal() + labs(title = “Probabilidades predichas de ser Hombre”, x = “P(Hombre)”, y = “Densidad”) coef(modelo1) cat(“Ecuación logística:(p) =”, round(coef(modelo1)[1], 4), ” + “, round(coef(modelo1)[2], 4),”LMCD + “, round(coef(modelo1)[3], 4),”C12CD“)
modelo2 <- glm(sexoN ~ LMCD, data = Hombro_sinNA, family = binomial(link = “logit”)) summary(modelo2)
Hombro_sinNA$prob_Hombre2 <- predict(modelo2, type = “response”)
Hombro_sinNA\(predicho2 <- ifelse(Hombro_sinNA\)prob_Hombre2 >= 0.5, “Hombre”, “Mujer”)
table(Real = Hombro_sinNA\(sexoN, Predicho2 = Hombro_sinNA\)predicho2)
mean(Hombro_sinNA\(sexoN == Hombro_sinNA\)predicho2) * 100
ggplot(Hombro_sinNA, aes(x = prob_Hombre, fill = sexoN)) + geom_density(alpha = 0.4) + geom_vline(xintercept = 0.5, linetype = “dashed”) + theme_minimal() + labs(title = “Probabilidades predichas de ser Hombre”, x = “P(Hombre)”, y = “Densidad”) coef(modelo1) cat(“Ecuación logística:(p) =”, round(coef(modelo1)[1], 4), ” + “, round(coef(modelo1)[2], 4),”LMCD + “, round(coef(modelo1)[3], 4),”C12CD“)
modelo1 <- glm(sexoN ~ LMCD + C12CD, data = Hombro_sinNA, family = binomial(link = “logit”)) summary(modelo1)
Hombro_sinNA$prob_Hombre <- predict(modelo1, type = “response”)
Hombro_sinNA\(predicho <- ifelse(Hombro_sinNA\)prob_Hombre >= 0.5, “Hombre”, “Mujer”)
table(Real = Hombro_sinNA\(sexoN, Predicho = Hombro_sinNA\)predicho)
mean(Hombro_sinNA\(sexoN == Hombro_sinNA\)predicho) * 100
ggplot(Hombro_sinNA, aes(x = prob_Hombre, fill = sexoN)) + geom_density(alpha = 0.4) + geom_vline(xintercept = 0.5, linetype = “dashed”) + theme_minimal() + labs(title = “Probabilidades predichas de ser Hombre”, x = “P(Hombre)”, y = “Densidad”) coef(modelo1) cat(“Ecuación logística:(p) =”, round(coef(modelo1)[1], 4), ” + “, round(coef(modelo1)[2], 4),”LMCD + “, round(coef(modelo1)[3], 4),”C12CD“)
modelo3 <- glm(sexoN ~ C12CD, data = Hombro_sinNA, family = binomial(link = “logit”)) summary(modelo3)
Hombro_sinNA$prob_Hombre3 <- predict(modelo3, type = “response”)
Hombro_sinNA\(predicho3 <- ifelse(Hombro_sinNA\)prob_Hombre3 >= 0.5, “Hombre”, “Mujer”)
table(Real = Hombro_sinNA\(sexoN, Predicho3 = Hombro_sinNA\)predicho3)
mean(Hombro_sinNA\(sexoN == Hombro_sinNA\)predicho3) * 100
ggplot(Hombro_sinNA, aes(x = prob_Hombre, fill = sexoN)) + geom_density(alpha = 0.4) + geom_vline(xintercept = 0.5, linetype = “dashed”) + theme_minimal() + labs(title = “Probabilidades predichas de ser Hombre”, x = “P(Hombre)”, y = “Densidad”) coef(modelo1) cat(“Ecuación logística:(p) =”, round(coef(modelo1)[1], 4), ” + “, round(coef(modelo1)[2], 4),”C12CD + “, round(coef(modelo1)[3], 4),”LMCD“)
###Tarea Noviembre 2025.
setwd(“~/DAVID”) ##Abriendo paquete pacman library(pacman) ## El archivo esta en formato SPSS, lo abrimos mediante la libreria haven p_load(haven,dplyr,ggplot2,MASS) Hombro <- read_sav(“Datos hombro.sav”) ## Definimos como factor la variable sexoN Hombro\(sexoN <- factor(Hombro\)sexoN, levels = c(1, 2), labels = c(“Hombre”, “Mujer”)) table (Hombro$sexoN) ## Frecuencias de sexo
res_dmhd <- Hombro %>% group_by(sexoN) %>% summarise( n = sum(!is.na(LMCD)), media = mean(LMCD, na.rm = TRUE), sd = sd(LMCD, na.rm = TRUE) ) %>% mutate(across(c(media, sd), ~round(.x, 2))) res_dmhd
res_abhd <- Hombro %>% group_by(sexoN) %>% summarise( n = sum(!is.na(C12CD)), media = mean(C12CD, na.rm = TRUE), sd = sd(C12CD, na.rm = TRUE) ) %>% mutate(across(c(media, sd), ~round(.x, 2))) res_abhd
ggplot(Hombro, aes(x = LMCD, fill = sexoN)) + geom_density(alpha = 0.5) + labs( title = “LMCD”, x = “LMCD”, y = “Densidad” ) + theme_minimal()
ggplot(Hombro, aes(x = sexoN, y = LMCD, fill = sexoN)) + geom_boxplot(alpha = 0.7) + labs( title = “LMCD”, x = “Sexo”, y = ” ” ) + theme_minimal()
p_load(effsize) # Comparar entre hombres y mujeres cohen.d(Hombro\(LMCD, Hombro\)sexoN,na.rm = TRUE)
t.test(LMCD ~ sexoN, data = Hombro, var.equal = TRUE) t.test(LMCD ~ sexoN, data = Hombro, var.equal = FALSE) ## la alternativa no paramétrica wilcox.test(LMCD ~ sexoN, data = Hombro)
res_dmhd <- Hombro %>% group_by(sexoN) %>% summarise( n = sum(!is.na(C12CD)), media = mean(C12CD, na.rm = TRUE), sd = sd(C12CD, na.rm = TRUE) ) %>% mutate(across(c(media, sd), ~round(.x, 2))) res_dmhd
res_abhd <- Hombro %>% group_by(sexoN) %>% summarise( n = sum(!is.na(LMCD)), media = mean(LMCD, na.rm = TRUE), sd = sd(LMCD, na.rm = TRUE) ) %>% mutate(across(c(media, sd), ~round(.x, 2))) res_abhd
ggplot(Hombro, aes(x = C12CD, fill = sexoN)) + geom_density(alpha = 0.5) + labs( title = “C12CD”, x = “C12CD”, y = “Densidad” ) + theme_minimal()
ggplot(Hombro, aes(x = sexoN, y = C12CD, fill = sexoN)) + geom_boxplot(alpha = 0.7) + labs( title = “C12CD”, x = “Sexo”, y = ” ” ) + theme_minimal()
p_load(effsize) # Comparar entre hombres y mujeres cohen.d(Hombro\(C12CD, Hombro\)sexoN,na.rm = TRUE)
t.test(C12CD ~ sexoN, data = Hombro, var.equal = TRUE) t.test(C12CD ~ sexoN, data = Hombro, var.equal = FALSE) ## la alternativa no paramétrica wilcox.test(C12CD ~ sexoN, data = Hombro) ####Una p < 0,05 significa que la hipótesis nula es falsa y una p > 0,05 que la hipótesis nula es verdadera: siempre nos movemos en el terreno de la probabilidad.
###Estos ejercicios son aplicables en mediciones antropométricas forenses para casos de determinación de sexo.
This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.
When you click the Knit button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
You can also embed plots, for example:
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.