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]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.
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:
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_hombresmuestra_mujeres# 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
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.
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
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.
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
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.
# 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
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.
# 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
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
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.
# 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
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.
# 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
# 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
# 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
# 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
# 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
# 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
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')