library(descr)
library(dplyr)
library(plotrix)
library(datos)
library(showtextdb)
library(sysfonts)
library(showtext)
library(ggplot2)
library(modeest)
library(car)
set.seed(6600)
rows <- c("X1","X2","X3","X4","X5","X6","X7","X8","X9","X10","X11","X12","X13","X14","X15","X16","X17","X18","X19","X2O","X21","X22","X23","X24","X25")
muestra1 <- read.table(file="https://jse.amstat.org/datasets/body.dat.txt", header = FALSE)
colnames(muestra1) <- rows
muestra1 <- muestra1[,c(6,7,8,13,15,23,24,25)]
Hombres <- subset(muestra1,X25==1)
Mujeres <- subset(muestra1,X25==0)
muestra_hombres <-  Hombres[sample(nrow(Hombres),size=50),0:7]
muestra_mujeres <-  Mujeres[sample(nrow(Mujeres),size=50),0:7]

Introducción

Este trabajo busca realizar un análisis de una base de datos de medidas antropomórficas para la cual se realizaran pruebas de hipótesis e intervalos de confianza para los datos que se describirán a continuación, como un breve análisis de regresión lineal.

Descripción de la base de datos

La Base de datos contiene los datos de medidas antropométricas de un grupo de 507 personas, conformada por 247 individuos hombres y 260 mujeres de las cuales se analizaran las 8 variables siguientes:

  • X6 : Diámetro del codo, suma de dos codos en cm.
  • X7 : Diámetro de muñeca, suma de dos muñecas en cm.
  • X8 : Diámetro de rodilla, suma de dos rodillas en cm.
  • X13 : Circunferencia abdominal, pasando por el ombligo en cm.
  • X15 : Circunferencia del muslo en cm.
  • X23 : Peso (kg).
  • X24 : Altura (cm).
  • X25 : Género (1: hombre, 0: mujer)

Para realizar los análisis posteriores se tomo dos muestras aleatorias de 50 individuos de la base de datos, una conformada por solo hombres y la otra conformada por solo mujeres,Las cuales se muestran a continuación.

Muestra de datos para los hombres:

muestra_hombres

Muestra de datos para las mujeres:

muestra_mujeres

Actividad 2

  1. Construya intervalos de confianza del 90% para el promedio de las 3 primeras variables. Escriba la interpretación en el contexto de cada caso.

Diámetro del codo:

# Calcular intervalo de confianza del 90% para el promedio de las tres primeras variables
intervalo_var1 <- t.test(muestra1$X6, conf.level = 0.9)$conf.int
intervalo_var1
## [1] 13.28620 13.48422
## attr(,"conf.level")
## [1] 0.9
## [1] 374 220

Interpretación:

El intervalo de confianza del 90% para la variable diámetro de codo de la muestra muestra1 es (13.28, 18.48). Esto implica que con un nivel de confianza del 90%, podemos afirmar que el verdadero valor medio de la variable diámetro de codo en la población se encuentra dentro de este intervalo.

En otras palabras, si se repitiera el muestreo y se calcularan intervalos de confianza en cada muestra, el 90% de esos intervalos incluirían el verdadero valor medio de la variable diámetro de codo.

Diámetro de la muñeca:

intervalo_var2 <- t.test(muestra1$X7, conf.level = 0.9)$conf.int
intervalo_var2
## [1] 10.47349 10.61172
## attr(,"conf.level")
## [1] 0.9
## [1] 374 220

Interpretación:

El intervalo de confianza del 90% para la variable diámetro de muñeca de la muestra muestra1 es (10.47, 10.61). Esto implica que con un nivel de confianza del 90%, podemos afirmar que el verdadero valor medio de la variable diámetro de muñeca en la población se encuentra dentro de este intervalo.

En otras palabras, si se repitiera el muestreo y se calcularan intervalos de confianza en cada muestra, el 90% de esos intervalos incluirían el verdadero valor medio de la variable muñeca de rodilla.

Diámetro de la rodilla:

intervalo_var3 <- t.test(muestra1$X8, conf.level = 0.9)$conf.int
intervalo_var3
## [1] 18.71203 18.90927
## attr(,"conf.level")
## [1] 0.9
## [1] 374 220

Interpretación:

El intervalo de confianza del 90% para la variable diámetro de rodilla de la muestra muestra1 es (18.71, 18.90). Esto implica que con un nivel de confianza del 90%, podemos afirmar que el verdadero valor medio de la variable diámetro de rodilla en la población se encuentra dentro de este intervalo.

En otras palabras, si se repitiera el muestreo y se calcularan intervalos de confianza en cada muestra, el 90% de esos intervalos incluirían el verdadero valor medio de la variable diámetro de rodilla.

  1. Construya un intervalo de confianza del 99% para la proporción de las mujeres que miden menos de 165 cm. Interprete.
# Contar el número de mujeres que miden menos de 165 cm
mujeres_menos_165 <- sum(muestra_mujeres$X24 < 165)

# Calcular la proporción de mujeres que miden menos de 165 cm
proporcion_mujeres_menos_165 <- mujeres_menos_165 / nrow(muestra_mujeres)

# Calcular el intervalo de confianza del 99% para la proporción
intervalo_confianzab <- prop.test(mujeres_menos_165, nrow(muestra_mujeres), conf.level = 0.99)$conf.int
intervalo_confianzab
## [1] 0.3288626 0.6711374
## attr(,"conf.level")
## [1] 0.99
## [1] 50 41

Interpretación:

Podemos decir que con un nivel de confianza del 99%, estimamos que la proporción de mujeres en la población que miden menos de 165 cm está entre 0.32 y 0.67.

  1. Construya un intervalo del 95% para la diferencia de promedios de la circunferencia abdominal entre hombres y mujeres. Interprete.
# Calcular la media y la desviación estándar de las rodillas para hombres y mujeres
media_hombresc <- mean(muestra_hombres$X13)
media_mujeresc <- mean(muestra_mujeres$X13)
desviacion_hombresc <- sd(muestra_hombres$X13)
desviacion_mujeresc <- sd(muestra_mujeres$X13)
n_hombresc <- length(muestra_hombres$X13)
n_mujeresc <- length(muestra_mujeres$X13)

# Calcular la diferencia de promedios de las rodillas entre hombres y mujeres
diferencia_promediosc <- media_hombresc - media_mujeresc

# Calcular el error estándar de la diferencia de promedios
error_estandarc <- sqrt((desviacion_hombresc^2/n_hombresc) + (desviacion_mujeresc^2/n_mujeresc))

# Calcular el intervalo de confianza del 95% para la diferencia de promedios
intervalo_confianzac <- c(diferencia_promediosc - 1.96*error_estandarc, diferencia_promediosc + 1.96*error_estandarc)
intervalo_confianzac
## [1] 0.1846102 7.2073898
## [1]  7 33
## [1] 28 31

Interpretación:

Podemos decir que con un nivel de confianza del 95%, estimamos que la diferencia de promedios de la circunferencia abdominal entre hombres y mujeres está entre 0.1846102 y 7.2073898. Esto significa que, en promedio, se espera que la circunferencia abdominal de los hombres sea entre 0.1846102 y 7.2073898 cm mayor que la de las mujeres. d. Construya un intervalo del 95% para la diferencia de promedios de las rodillas entre hombres y mujeres. Interprete.

# Calcular la media y la desviación estándar de las rodillas para hombres y mujeres
media_hombresd <- mean(muestra_hombres$X8)
media_mujeresd <- mean(muestra_mujeres$X8)
desviacion_hombresd <- sd(muestra_hombres$X8)
desviacion_mujeresd <- sd(muestra_mujeres$X8)
n_hombresd <- length(muestra_hombres$X8)
n_mujeresd <- length(muestra_mujeres$X8)

# Calcular la diferencia de promedios de las rodillas entre hombres y mujeres
diferencia_promediosd <- media_hombresd - media_mujeresd

# Calcular el error estándar de la diferencia de promedios
error_estandard <- sqrt((desviacion_hombresd^2/n_hombresd) + (desviacion_mujeresd^2/n_mujeresd))

# Calcular el intervalo de confianza del 95% para la diferencia de promedios
intervalo_confianzad <- c(diferencia_promediosd - 1.96*error_estandard, diferencia_promediosd + 1.96*error_estandard)
intervalo_confianzad
## [1] 1.043199 1.912801
## [1] 35 45
## [1] 28 31

Interpretación:

Podemos decir que con un nivel de confianza del 95%, estimamos que la diferencia de promedios de las medidas de rodillas entre hombres y mujeres está entre 1.043199 y 1.912801. Esto significa que, en promedio, se espera que las medidas de rodillas de los hombres sean entre 1.043199 y 1.912801 cm mayores que las de las mujeres.

  1. Construya intervalos de confianza del 90% para la varianza poblacional de la circunferencia del muslo para las mujeres.
# Calcular la varianza de la circunferencia del muslo en mujeres
varianzae <- var(muestra_mujeres$X15)

# Obtener los grados de libertad
ne <- length(muestra_mujeres$X15)
dfe <- ne - 1

# Calcular los valores críticos de la distribución chi-cuadrado
alphae <- 1 - 0.90
chi_cuadrado_infe <- qchisq(alphae/2, dfe)
chi_cuadrado_supe <- qchisq(1 - alphae/2, dfe)

# Calcular los límites del intervalo de confianza
limite_inferiore <- (ne - 1) * varianzae / chi_cuadrado_supe
limite_superiore <- (ne - 1) * varianzae/ chi_cuadrado_infe

# Crear el intervalo de confianza
intervalo_confianza <- c(limite_inferiore, limite_superiore)
intervalo_confianza
## [1] 10.68120 20.88328

Interpretación:

Podemos decir que con un nivel de confianza del 90%, estimamos que la varianza poblacional de la circunferencia del muslo en mujeres está entre 10.68120 y 20.88328.

Actividad 3

  1. Elabore una prueba de hipótesis con a=0.05 para probar si la media de la variable X6 es diferente de 13 cm.
# Realizar la prueba de hipótesis
resultado_pruebaa <- t.test(muestra1$X6, mu = 13, alternative = "two.sided")

# Obtener los resultados de la prueba
valor_pa <- resultado_pruebaa$p.value
estadistico_pruebaa <- resultado_pruebaa$statistic

# Comparar el valor p con el nivel de significancia
if (valor_pa < 0.05) {
  mensajea <- "Rechazamos la hipótesis nula"
} else {
  mensajea <- "No rechazamos la hipótesis nula"
}

# Imprimir los resultados
cat("Valor p:", valor_pa, "\n")
## Valor p: 3.316099e-10
cat("Estadístico de prueba:", estadistico_pruebaa, "\n")
## Estadístico de prueba: 6.411073
cat(mensajea)
## Rechazamos la hipótesis nula
  1. Elabore una prueba de hipótesis con a = 0.01 para probar si la media de la variable X15 es mayor de 55 cm.
# Realizar la prueba de hipótesis
resultado_pruebab <- t.test(muestra1$X15, mu = 55, alternative = "greater", conf.level = 0.99)

# Obtener los resultados de la prueba
valor_pb <- resultado_pruebab$p.value
estadistico_pruebab <- resultado_pruebab$statistic

# Comparar el valor p con el nivel de significancia
if (valor_pb < 0.01) {
  mensajeb <- "Rechazamos la hipótesis nula"
} else {
  mensajeb <- "No rechazamos la hipótesis nula"
}

# Imprimir los resultados
cat("Valor p:", valor_pb, "\n")
## Valor p: 1.203427e-19
cat("Estadístico de prueba:", estadistico_pruebab, "\n")
## Estadístico de prueba: 9.369478
cat(mensajeb)
## Rechazamos la hipótesis nula
  1. Elabore una prueba de hipótesis con a = 0.10 para probar si la los promedios de la variable X7 en hombres y mujeres son iguales.
# Realizar la prueba de hipótesis
resultado_pruebac <- t.test(muestra_hombres$X7, muestra_mujeres$X7, alternative = "two.sided", conf.level = 0.90)

# Obtener los resultados de la prueba
valor_pc <- resultado_pruebac$p.value
estadistico_pruebac <- resultado_pruebac$statistic

# Comparar el valor p con el nivel de significancia
if (valor_pc < 0.10) {
  mensajec <- "Rechazamos la hipótesis nula"
} else {
  mensajec <- "No rechazamos la hipótesis nula"
}

# Imprimir los resultados
cat("Valor p:", valor_pc, "\n")
## Valor p: 1.320957e-17
cat("Estadístico de prueba:", estadistico_pruebac, "\n")
## Estadístico de prueba: 10.45219
cat(mensajec)
## Rechazamos la hipótesis nula
  1. Elabore una prueba de hipótesis con = 0.05 para probar si el promedio de la variable X13 es mayor en hombres que en mujeres.
# Realizar la prueba de hipótesis
resultado_pruebad <- t.test(muestra_hombres$X13, muestra_mujeres$X13, alternative = "greater", conf.level = 0.95)

# Obtener los resultados de la prueba
valor_pd <- resultado_pruebad$p.value
estadistico_pruebad <- resultado_pruebad$statistic

# Comparar el valor p con el nivel de significancia
if (valor_pd < 0.05) {
  mensajed <- "Rechazamos la hipótesis nula"
} else {
  mensajed <- "No rechazamos la hipótesis nula"
}

# Imprimir los resultados
cat("Valor p:", valor_pd, "\n")
## Valor p: 0.0209027
cat("Estadístico de prueba:", estadistico_pruebad, "\n")
## Estadístico de prueba: 2.063046
cat(mensajed)
## Rechazamos la hipótesis nula
  1. ¿Es la varianza de la variable X13 en las mujeres mayor que 80?, pruebe con a=0.01.
# Obtener el tamaño de la muestra
ne <- length(muestra_mujeres$X13)

# Calcular la varianza muestral
varianza_muestrale <- var(muestra_mujeres$X13)

# Calcular los valores críticos de la distribución chi-cuadrado
alphae <- 0.1
chi_criticoe <- qchisq(c(alphae / 2, 1 - alphae / 2), df = ne - 1)

# Calcular los límites del intervalo de confianza
intervalo_confianzae <- ((ne - 1) * varianza_muestrale) / chi_criticoe

# Imprimir los resultados
cat("Intervalo de confianza:", intervalo_confianzae, "\n")
## Intervalo de confianza: 132.1885 67.61063
  1. ¿Es la varianza de la variable X8 en las hombres diferente de 1.5?, pruebe con a=0.01.
# Obtener el tamaño de la muestra
nf <- length(muestra_hombres$X8)

# Calcular la varianza muestral
varianza_muestralf <- var(muestra_hombres$X8)

# Valor de referencia
valor_referenciaf <- 1.5

# Calcular el estadístico de prueba
estadistico_pruebaf <- (nf - 1) * varianza_muestralf / valor_referenciaf

# Obtener el valor crítico de la distribución chi-cuadrado
alphaf <- 0.01
valor_criticof <- qchisq(1 - alphaf/2, df = nf - 1)

# Realizar la prueba de hipótesis
if (estadistico_pruebaf > valor_criticof) {
  mensajef <- "La varianza es diferente de 1.5"
} else {
  mensajef <- "La varianza no es diferente de 1.5"
}
# Imprimir los resultados
cat("Estadístico de prueba:", estadistico_pruebaf, "\n")
## Estadístico de prueba: 39.76053
cat("Valor crítico:", valor_criticof, "\n")
## Valor crítico: 78.23071
cat(mensajef)
## La varianza no es diferente de 1.5

Actividad 4

Elabore un breve análisis regresión lineal para las variables que usted considere que tienen alta correlación.

pairs(muestra_hombres)

cor(muestra_hombres)
##            X6        X7        X8       X13       X15       X23       X24
## X6  1.0000000 0.6967186 0.6594800 0.4138488 0.3984991 0.6049819 0.4949118
## X7  0.6967186 1.0000000 0.5761163 0.5858472 0.3409569 0.6813774 0.3572995
## X8  0.6594800 0.5761163 1.0000000 0.5030849 0.5941533 0.7057870 0.4685840
## X13 0.4138488 0.5858472 0.5030849 1.0000000 0.5172018 0.7786840 0.2728991
## X15 0.3984991 0.3409569 0.5941533 0.5172018 1.0000000 0.7768744 0.2141697
## X23 0.6049819 0.6813774 0.7057870 0.7786840 0.7768744 1.0000000 0.5422984
## X24 0.4949118 0.3572995 0.4685840 0.2728991 0.2141697 0.5422984 1.0000000

Comenzando el análisis de regresión por la muestra de hombres, se ven en las anteriores gráficas las correlaciones lineales de las variables, en donde en particular se pueden destacar dos, las cuales son; el peso (X23) con la circunferencia del muslo (X15), y el peso (x23) con la circunferencia abdominal (X13), datos a los cuales se procede a realizar el análisis de regresión. A continuación se presentan las dos gráficas correspondientes a la regresión de estos datos.

ggplot(data = muestra_hombres) +
  geom_point(aes(x = muestra_hombres$X23, y = muestra_hombres$X15),
                     col = 'darkblue',
                     size = 3,
                     alpha = 1/5) + 
  geom_smooth(aes(x = muestra_hombres$X23, y = muestra_hombres$X15), method = 'lm', se= FALSE) +
  labs(title='Peso x Muslo',
       x='Circunferencia muslo', 
       y='Peso')
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = muestra_hombres) +
  geom_point(aes(x = muestra_hombres$X23, y = muestra_hombres$X13),
                     col = 'blue',
                     size = 3,
                     alpha = 1/5) + 
  geom_smooth(aes(x = muestra_hombres$X23, y = muestra_hombres$X13), method = 'lm', se= FALSE) +
  labs(title='Peso x Abdomen',
       x='Circunferencia abdomen', 
       y='Peso')
## `geom_smooth()` using formula = 'y ~ x'

Se crea un vector de pesos para predecir las circunferencias de ambas medidas, tomaremos un rango de 50 a 110:

nuevos.pesos <- data.frame(X23 = seq(50, 110))

regresion1 <- lm(X15 ~ X23, data = muestra_hombres)

plot(muestra_hombres$X23, muestra_hombres$X15, xlab='Peso', ylab='Muslo')

abline(regresion1,col="blue")

ic <- predict(regresion1, nuevos.pesos, interval = 'confidence')

lines(nuevos.pesos$X23, ic[, 2], lty = 2)

lines(nuevos.pesos$X23, ic[, 3], lty = 2)

ic <- predict(regresion1, nuevos.pesos, interval = 'prediction')

lines(nuevos.pesos$X23, ic[, 2], lty = 2, col = 'red')

lines(nuevos.pesos$X23, ic[, 3], lty = 2, col = 'red')

##abdomen

regresion2 <- lm(X13 ~ X23, data = muestra_hombres)

plot(muestra_hombres$X23, muestra_hombres$X13, xlab='Peso', ylab='Abdomen')

abline(regresion2,col="red")

ic <- predict(regresion2, nuevos.pesos, interval = 'confidence')

lines(nuevos.pesos$X23, ic[, 2], lty = 2)

lines(nuevos.pesos$X23, ic[, 3], lty = 2)

ic <- predict(regresion2, nuevos.pesos, interval = 'prediction')

lines(nuevos.pesos$X23, ic[, 2], lty = 2, col = 'red')

lines(nuevos.pesos$X23, ic[, 3], lty = 2, col = 'red')

Continuando con el análisis de la muestra de mujeres primero se revisan las correlaciones como anteriormente se realizo, como se muestra a continuación:

pairs(muestra_mujeres)

cor(muestra_mujeres)
##            X6        X7        X8       X13       X15       X23       X24
## X6  1.0000000 0.7714821 0.6347732 0.5106780 0.4210899 0.5645395 0.4623452
## X7  0.7714821 1.0000000 0.5360540 0.4091600 0.3946417 0.5819890 0.4793430
## X8  0.6347732 0.5360540 1.0000000 0.6807968 0.6612196 0.7757374 0.3539280
## X13 0.5106780 0.4091600 0.6807968 1.0000000 0.7274994 0.7348660 0.1084475
## X15 0.4210899 0.3946417 0.6612196 0.7274994 1.0000000 0.9003786 0.2935936
## X23 0.5645395 0.5819890 0.7757374 0.7348660 0.9003786 1.0000000 0.4891972
## X24 0.4623452 0.4793430 0.3539280 0.1084475 0.2935936 0.4891972 1.0000000

Se ven en las anteriores gráficas las correlaciones lineales de las variables, en donde en particular se puede destacar en mayor medida con respecto al anterior análisis, es el peso (X23) con la circunferencia del muslo (X15), y el peso (X23) con la circunferencia abdominal (X13), ya no es tan notorio como en la anterior muestra, Ahora podemos ver mas relación entre, el peso (X23) y el diámetro de la rodilla (X8), para lo cual se analizaran las regresiones de estas variables.

ggplot(data = muestra_mujeres) +
  geom_point(aes(x = muestra_mujeres$X23, y = muestra_mujeres$X15),
                     col = 'darkblue',
                     size = 3,
                     alpha = 1/5) + 
  geom_smooth(aes(x = muestra_mujeres$X23, y = muestra_mujeres$X15), method = 'lm', se= FALSE) +
  labs(title='Peso x Muslo',
       x='Circunferencia muslo', 
       y='Peso')
## `geom_smooth()` using formula = 'y ~ x'

ggplot(data = muestra_mujeres) +
  geom_point(aes(x = muestra_mujeres$X23, y = muestra_mujeres$X8),
                     col = 'blue',
                     size = 3,
                     alpha = 1/5) + 
  geom_smooth(aes(x = muestra_mujeres$X23, y = muestra_mujeres$X8), method = 'lm', se= FALSE) +
  labs(title='Peso x Rodilla',
       x='Diametro de rodilla', 
       y='Peso')
## `geom_smooth()` using formula = 'y ~ x'

Se crea un vector de pesos para predecir las medidas mencionadas, tomaremos un rango de 50 a 110 nuevamente:

nuevos.pesos <- data.frame(X23 = seq(50, 110))

regresion3 <- lm(X15 ~ X23, data = muestra_mujeres)

plot(muestra_mujeres$X23, muestra_mujeres$X15, xlab='Peso', ylab='Muslo')

abline(regresion3,col="blue")

ic <- predict(regresion3, nuevos.pesos, interval = 'confidence')

lines(nuevos.pesos$X23, ic[, 2], lty = 2)

lines(nuevos.pesos$X23, ic[, 3], lty = 2)

ic <- predict(regresion3, nuevos.pesos, interval = 'prediction')

lines(nuevos.pesos$X23, ic[, 2], lty = 2, col = 'red')

lines(nuevos.pesos$X23, ic[, 3], lty = 2, col = 'red')

##rodilla

regresion4 <- lm(X8 ~ X23, data = muestra_mujeres)

plot(muestra_mujeres$X23, muestra_mujeres$X8, xlab='Peso', ylab='Rodilla')

abline(regresion4,col="red")

ic <- predict(regresion4, nuevos.pesos, interval = 'confidence')

lines(nuevos.pesos$X23, ic[, 2], lty = 2)

lines(nuevos.pesos$X23, ic[, 3], lty = 2)

ic <- predict(regresion4, nuevos.pesos, interval = 'prediction')

lines(nuevos.pesos$X23, ic[, 2], lty = 2, col = 'red')

lines(nuevos.pesos$X23, ic[, 3], lty = 2, col = 'red')

Referencias

  1. [1] «Journal of Statistics Education, V11N2: Heinz». https://jse.amstat.org/v11n2/datasets.heinz.html (accedido 26 de junio de 2023).
  2. [2] F. Hernández y O. Usuga, Manual de R. Accedido: 26 de junio de 2023. [En línea]. Disponible en: https://fhernanb.github.io/Manual-de-R/
  3. [3] C. Bates, «Getting Started with R Markdown — Guide and Cheatsheet», Dataquest, 9 de julio de 2020. https://www.dataquest.io/blog/r-markdown-guide-cheatsheet/ (accedido 26 de junio de 2023).