Daniel Santiago Ballesteros Rocha (dballesterosr@unal.edu.co)
Alan Joel Lizarazo Canon (allizarazoc@unal.edu.co)
Nataly Pascuales Gomez (npascuales@unal.edu.co)
A partir de una tabla que contiene los datos de medidas antropométricas de un grupo de 507 individuos con 8 variables, se creó una semilla donde se obtuvo una muestra de 50 individuos hombres y 50 individuos mujeres con las siguientes variables:
La base de datos original contiene 25 variables y usted puede verla en el fichero de datos: body_dat.csv que se encuentra en https://jse.amstat.org/v11n2/datasets.heinz.html
Inicialmente, es necesario comprobar la normalidad de los datos, lo cual se puede lograr mediante gráficos como el qqplot y un gráfico de densidad, pero se debe verificar finalmente con una prueba de hipótesis. Para este caso utilizamos los test de normalidad de Lilliefors y Anderson-Darling (en algunos caso fue necesario utilizar el test de Shapiro y el de Cramer - von también)
lillie.test(X6)
ad.test(X6)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X6
D = 0.071649, p-value = 0.2349
Anderson-Darling normality test
data: X6
A = 0.40053, p-value = 0.3555
par(mfrow=c(1,2))
require(car)
qqPlot(X6, pch=20, main='QQplot para Diámetro del codo', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X6), main='Densidad para Diámetro del codo', las=1,
xlab='Diámetro del codo (cm)', ylab='Densidad')Obteniendo para los dos test valores de p mayores a 0.05 donde no se rechaza la hipótesis nula (H0: La distribución es normal) y por tanto, la distribución es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos está sobre la linea diagonal y en el gráfico de densidad que tiene forma de campana.
lillie.test(X7)
ad.test(X7)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X7
D = 0.082675, p-value = 0.08863
Anderson-Darling normality test
data: X7
A = 0.53138, p-value = 0.1704
par(mfrow=c(1,2))
require(car)
qqPlot(X7, pch=20, main='QQplot para Diámetro de la muñeca', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X7), main='Densidad para Diámetro de la muñeca', las=1,
xlab='Diámetro de la muñeca (cm)', ylab='Densidad')Obteniendo para los dos test valores de p mayores a 0.05 donde no se rechaza la hipótesis nula (H0: La distribución es normal) y por tanto, la distribución es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos se desvía de la linea diagonal y en el gráfico de densidad que no tiene forma de campana.
lillie.test(X8)
ad.test(X8)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X8
D = 0.082271, p-value = 0.09186
Anderson-Darling normality test
data: X8
A = 0.4249, p-value = 0.3112
par(mfrow=c(1,2))
require(car)
qqPlot(X8, pch=20, main='QQplot para Diámetro de la rodilla', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X8), main='Densidad para Diámetro de la rodilla', las=1,
xlab='Diámetro de la rodilla (cm)', ylab='Densidad')Obteniendo para los dos test valores de p mayores a 0.05 donde no se rechaza la hipótesis nula (H0: La distribución es normal) y por tanto, la distribución es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos está sobre la linea diagonal y en el gráfico de densidad que tiene forma de campana.
lillie.test(X13)
ad.test(X13)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X13
D = 0.079641, p-value = 0.1231
Anderson-Darling normality test
data: X13
A = 0.90831, p-value = 0.01991
par(mfrow=c(1,2))
require(car)
qqPlot(X13, pch=20, main='QQplot para Circunferencia abdominal', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X13), main='Densidad para Circunferencia abdominal', las=1,
xlab='Circunferencia abdominal (cm)', ylab='Densidad')En este caso, para los dos test se obtuvieron resultados diferentes, donde en uno se rechaza la hipótesis nula (H0: La distribución es normal) y en el otro no, por tanto, hicimos dos pruebas de hipótesis de normalidad adicionales:
shapiro.test(X13)
cvm.test(X13)
Shapiro-Wilk normality test
data: X13
W = 0.95944, p-value = 0.00367
Cramer-von Mises normality test
data: X13
W = 0.1428, p-value = 0.02905
Con esto, concluimos que sí se rechaza la hipótesis nula y por tanto la distribución NO es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos se desvía de la linea diagonal y en el gráfico de densidad que no tiene forma de campana.
lillie.test(X15)
ad.test(X15)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X15
D = 0.092706, p-value = 0.03382
Anderson-Darling normality test
data: X15
A = 0.55748, p-value = 0.1464
par(mfrow=c(1,2))
require(car)
qqPlot(X15, pch=20, main='QQplot para Circunferencia del muslo', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X15), main='Densidad para Circunferencia del muslo', las=1,
xlab='Circunferencia del muslo (cm)', ylab='Densidad')En este caso, para los dos test se obtuvieron resultados diferentes, donde en uno se rechaza la hipótesis nula (H0: La distribución es normal) y en el otro no, por tanto, hicimos otra prueba de hipótesis de normalidad adicional:
cvm.test(X15)
Cramer-von Mises normality test
data: X15
W = 0.091273, p-value = 0.1462
Con esto, concluimos que no se rechaza la hipótesis nula y por tanto la distribución es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos solo se desvía ligeramente de la linea diagonal y en el gráfico de densidad que se asemeja mas a la forma de campana.
lillie.test(X23)
ad.test(X23)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X23
D = 0.12127, p-value = 0.0009842
Anderson-Darling normality test
data: X23
A = 1.4569, p-value = 0.0008692
par(mfrow=c(1,2))
require(car)
qqPlot(X23, pch=20, main='QQplot para Peso', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X23), main='Densidad para Peso', las=1,
xlab='Peso (cm)', ylab='Densidad')Obteniendo para los dos test valores de p muy por debajo de 0.05 donde se rechaza la hipótesis nula (H0: La distribución es normal) y por tanto, la distribución NO es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos está sobre la linea diagonal y en el gráfico de densidad que tiene forma de campana.
lillie.test(X24)
ad.test(X24)
Lilliefors (Kolmogorov-Smirnov) normality test
data: X24
D = 0.079161, p-value = 0.1282
Anderson-Darling normality test
data: X24
A = 0.46047, p-value = 0.2554
par(mfrow=c(1,2))
require(car)
qqPlot(X24, pch=20, main='QQplot para Altura', las=1,
xlab='Cuantiles teoricos', ylab='Cuantiles muestrales')
plot(density(X24), main='Densidad para Altura', las=1,
xlab='Altura (cm)', ylab='Densidad')Obteniendo para los dos test valores de p mayores a 0.05 donde no se rechaza la hipótesis nula (H0: La distribución es normal) y por tanto, la distribución es normal; algo que también se puede evidenciar en el qqplot donde la distribución de puntos está sobre la linea diagonal y en el gráfico de densidad que tiene forma de campana.
En esta sección del trabajo se pretende mostrar la manera de calcular intervalos de confianza con las distintas opciones disponibles en el programa R. Para esto, es importante conocer a qué nos referimos cuando se habla de intervalos de confianza.
Un intervalo de confianza es un rango de valores que se utiliza para estimar un parámetro poblacional desconocido con un determinado nivel de confianza. Es una forma de expresar la incertidumbre en torno a una estimación de un parámetro poblacional, como la media, la proporción o la varianza.
A continuación el desarrollo de la actividad
a. Construya intervalos de confianza del 90% para el promedio de las 3 primeras variables. Escriba la interpretación en el contexto de cada caso.
Para este punto es necesario evidenciar la normalidad de las variables, la cual fue analizada anteriormente, por lo que se puede proceder con el cálculo de los intervalos de confianza
Primera variable X6 (Diámetro del codo):
resX6 <- t.test(x = X6, conf.level = 0.90)$conf.int
round(resX6, 3)Invervalo: [1] 13.152 13.580
Invervalo: attr(,"conf.level")
Invervalo: [1] 0.9
Con una confianza del 90% se estima que la media de la variable X6 (Diámetro del codo) se encuentra entre 13.152 y 13.580
Segunda variable X7 (Diámetro de la muñeca):
resX7 <- t.test(x = X7, conf.level = 0.90)$conf.int
round(resX7, 3)Invervalo: [1] 10.381 10.679
Invervalo: attr(,"conf.level")
Invervalo: [1] 0.9
Con una confianza del 90% se estima que la media de la variable X7 (Diámetro de la muñeca) se encuentra entre 10.381 y 10.679
Tercera variable X8 (Diámetro de la rodilla):
resX8 <- t.test(x = X8, conf.level = 0.90)$conf.int
round(resX8, 3)Invervalo: [1] 18.565 19.029
Invervalo: attr(,"conf.level")
Invervalo: [1] 0.9
Con una confianza del 90% se estima que la media de la variable X8 (Diámetro de la rodilla) se encuentra entre 18.565 y 19.029
Teniendo en cuenta los intervalos de confianza calculados en la parte a de la actividad 2, es posible evidenciar que de las tres variables, la que presenta una media mayor es la X8 (Diámetro de la rodilla), mientras que la que presenta un promedio menor es la X7 (Diámetro de la muñeca); cabe mencionar que dichas medidas son realizadas en centímetros (cm).
b. Construya un intervalo de confianza del 99% para la proporción de las mujeres que miden menos de 165 cm. Interprete.
Para los siguientes ítems de la actividad 2 es necesario segmentar la muestra analizada por géneros (Hombre (1) y mujer (0)), lo cual se realiza a continuación:
mujeres <- muestra1[muestra1$X25=="0", ]
hombres <- muestra1[muestra1$X25=="1", ]tabla.muj <- data.frame(mujeres$X24)
n <- nrow(tabla.muj)
menos165 <- mujeres[mujeres$X24 < "165", ]
tabla.x <- data.frame(menos165$X24)
x <- nrow(tabla.x)
resX24.muj <- prop.test(x = x, n = n, conf.level = 0.99)$conf.int
round(resX24.muj, 3)Invervalo: [1] 0.269 0.626
Invervalo: attr(,"conf.level")
Invervalo: [1] 0.99
Es posible evidenciar que con un nivel de confianza del 99%, la proporción de las mujeres que miden menos de 165 cm se encuentra entre 0.269 y 0.626
A manera de comparación, se calculará el intervalo de confianza para la proporción de las mujeres que miden menos de 165 cm de manera manual con las fórmulas de los intervalos de confianza, las cuales son:
ICi = pgorro - zalfamed * sqrt(pgorro*qgorro/n)
ICs = pgorro + zalfamed * sqrt(pgorro*qgorro/n)
n <- n
x <- x
pgorro <- x/n
zalfamed <- qnorm(0.005, 0, 1, lower.tail = FALSE)
ICi <- pgorro - zalfamed * sqrt(pgorro*(1-pgorro)/n)
round(ICi, 3)
ICs <- pgorro + zalfamed * sqrt(pgorro*(1-pgorro)/n)
round(ICs, 3)Invervalo: [1] 0.259
Invervalo: [1] 0.621
Con una confianza del 99% (calculado manualmente) se estima que la proporción de las mujeres que miden menos de 165 cm se encuentra entre 0.259 y 0.621
c. Construya un intervalo de confianza del 95% para la diferencia de promedios de la circunferencia abdominal entre hombres y mujeres. Interprete.
En este punto es necesario realizar el análisis de la normalidad de la muestra (X13), ya que para poder calcular el respectivo intervalo de confianza la muestra debe tener una distribución normal. Se está hablando de un intervalo de confianza para la diferencia de medias de muestras independientes.
En la parte superior se realizaron las pruebas de normalidad para la variable X13 (Circunferencia abdominal, pasando por el ombligo en cm), en donde se evidenció que el comportamiento de esta no es normal, sin embargo a continuación se anexan los gráficos qqplot e histograma para esta variable tanto en hombres como mujeres y así confirmar este hecho.
par(mfrow=c(2,2))
require(car)
layout(matrix(1:4,2,2))
qqPlot(hombres$X13, pch=19, las=1, main='QQplot circ. abdominal hombres',
xlab='Cuantiles teóricos', ylab='Cuantiles muestrales')
hist(hombres$X13, las=1, xlab='Altura', ylab='Frecuencia',
main='Histograma circ. abdominal hombres', col = "cyan")
qqPlot(mujeres$X13, pch=19, las=1, main='QQplot circ. abdominal mujeres',
xlab='Cuantiles teóricos', ylab='Cuantiles muestrales')
hist(mujeres$X13, las=1, xlab='Altura', ylab='Frecuencia',
main='Histograma circ. abdominal mujeres', col = "salmon")Ahora, para complementar, se realizará la prueba de normalidad de Shapiro - Wilk para ambas muestras (hombres y mujeres), las hipótesis nula y alternativa son:
H0: La muestra proviene de una distribución normal.
H1: La muestra NO proviene de una distribución normal.
Se esperaría obtener valores p superiores al α = 0.05 para así mantener la hipótesis nula.
shapiro.test(hombres$X13)$p.valueValor de P para hombres [1] 0.5110533
shapiro.test(mujeres$X13)$p.valueValor de P para mujeres [1] 0.0002655266
Como es posible evidenciar en los gráficos y en las pruebas de normalidad realizadas, no es posible realizar la construcción del intervalo de confianza solicitado, pues la variable en general X13 no presenta una distribución normal; siendo específicos, la muestra para las mujeres es la que no cumple con dicha distribución (Valor p 0.000265, muy inferior a 0.05)
d. Construya un intervalo de confianza del 95% para la diferencia de promedios de las rodillas entre hombres y mujeres. Interprete.
Al igual que en el punto aterior, se expondrán los gráficos de las muestras tanto de hombres como mujeres para evaluar la normalidad, pues es el mismo tipo de intervalo de confianza (diferencia de medias de muestras independientes)
par(mfrow=c(2,2))
require(car)
layout(matrix(1:4,2,2))
qqPlot(hombres$X8, pch=19, las=1, main='QQplot rodilla hombres',
xlab='Cuantiles teóricos', ylab='Cuantiles muestrales')
hist(hombres$X8, las=1, xlab='Altura', ylab='Frecuencia',
main='Histograma rodilla hombres', col = "#9AFF9A")
qqPlot(mujeres$X8, pch=19, las=1, main='QQplot rodilla mujeres',
xlab='Cuantiles teóricos', ylab='Cuantiles muestrales')
hist(mujeres$X8, las=1, xlab='Altura', ylab='Frecuencia',
main='Histograma rodilla mujeres', col = "#CD5B45")Como se puede observar en los gráficos, para los hombres se podría evidenciar un comportamiento de una distribución normal, sin embargo para las mujeres no. Por esto se realizarán diferentes pruebas de normalidad a las muestras con las respectivas hipótesis nula y alternativa:
H0: La muestra proviene de una distribución normal.
H1: La muestra NO proviene de una distribución normal.
shapiro.test(hombres$X8)$p.valueValor de P para hombres con Shapiro - Wilk [1] 0.5048331
ad.test(hombres$X8)$p.valueValor de P para hombres con Anderson - Darling [1] 0.5483122
lillie.test(hombres$X8)$p.valueValor de P para hombres con Lilliefors [1] 0.5683213
shapiro.test(mujeres$X8)$p.valueValor de P para mujeres con Shapiro - Wilk [1] 0.0003841391
ad.test(mujeres$X8)$p.valueValor de P para mujeres con Anderson - Darling [1] 0.003213479
lillie.test(mujeres$X8)$p.valueValor de P para mujeres con Lilliefors [1] 0.0127313
Como es posible evidenciar en las tres pruebas realizadas, el valor p para la muestra de las mujeres es bastante inferior al α = 0.05, por lo que se puede deducir que esta no proviene de una distribución normal, a pesar de que en el análisis de la variable en general (X8), si hay resultado una distribución normal, por esta razón, no es posible construir el intervalo de confianza solicitado.
e. Construya intervalos de confianza del 90% para la varianza poblacional de la circunferencia del muslo para las mujeres.
En este punto, al igual que en los anteriores, es necesario verificar que la muestra proviene de una distribución normal, prueba que se realizó al comienzo
resX15.muj <- stests::var.test(x = mujeres$X15, conf.level=0.90)$conf.int
round(resX15.muj, 3)Invervalo: [1] 17.079 33.391
Invervalo: attr(,"conf.level")
Invervalo: [1] 0.9
La varianza poblacional de la circunferencia del muslo para las mujeres se encuentra entre 17.079 y 33.391
a.Elabore una prueba de hipótesis con α = 0.05 para probar si la media de la variable X6 es diferente de 13 cm.
Teniendo en cuenta que la distribución de la variable X6 es normal, se determina la hipótesis nula y la hipótesis alternativa dónde:
H0: μ = 13 cm
H1: μ ≠ 13 cm
a <- t.test(X6, alternative='two.sided', conf.level=0.95, mu=13)
a$p.valueValor de p: [1] 0.005539672
Se obtiene un valor de p de 0.0055. Teniendo en cuenta un valor de significania del 5%, se rechaza la hipótesis nula de que la media es igual a 13 cm, por tanto la media de la variable X6 sí es diferente de 13 cm, algo que también es posible observar elaborando el boxplot.
ggplot(data=muestra1,aes(x="",y=X6))+
geom_boxplot(fill="lightblue")+
labs(title = "Boxplot",
subtitle = "Diámetro del codo",
x="X6",
y="Diámetro del codo (cm)")+
stat_boxplot(geom = "errorbar", width = 0.15) +
theme_bw(base_size = 15)+
theme(plot.title = element_text(size = 20),
axis.text = element_text(size = 12),
axis.title = element_text(size = 14))+
geom_hline(yintercept = 13, color = "red",linetype=2) +
scale_y_continuous(breaks=seq(0,20, by=1))b. Elabore una prueba de hipótesis con α = 0.01 para probar si la media de la variable X15 es mayor de 55 cm.
Teniendo en cuenta que la distribución de la variable X15 es normal, se determina la hipótesis nula y la hipótesis alternativa dónde:
H0: μ <= 55 cm
H1: μ > 55 cm
b <- t.test(X15, alternative='greater', conf.level=0.99, mu=55)
b$p.valueValor de p: [1] 0.004413383
Se obtiene un valor de p de 0.0044. Teniendo en cuenta un valor de significancia del 1%, se rechaza la hipótesis nula de que la media es igual a 55 cm, por tanto, con la hipótesis alternativa se determina que la media de la variable X15 sí es mayor a 55 cm, algo que también es posible observar elaborando el boxplot.
ggplot(data=muestra1,aes(x="",y=X15))+
geom_boxplot(fill="lightblue")+
labs(title = "Boxplot",
subtitle = "Circunferencia del muslo",
x="X15",
y="Circunferencia del muslo (cm)")+
stat_boxplot(geom = "errorbar", width = 0.15) +
theme_bw(base_size = 15)+
theme(plot.title = element_text(size = 20),
axis.text = element_text(size = 12),
axis.title = element_text(size = 14))+
geom_hline(yintercept = 55, color = "red",linetype=2)+
scale_y_continuous(breaks=seq(46,73, by=3))c. Elabore una prueba de hipótesis con α = 0.10 para probar si la los promedios de la variable X7 en hombres y mujeres son iguales.
Para este caso, necesitamos obtener por separado los datos del diametro de la muñeca para hombres y mujeres
hombres <- muestra1 [muestra1$X25=="1", ]
mean(hombres$X7)Promedio diametro de la muñeca para hombres [1] 11.196
mujeres <- muestra1 [muestra1$X25=="0", ]
mean(mujeres$X7)Promedio diametro de la muñeca para mujeres [1] 9.864
Teniendo en cuenta que la variable X7 es normal, se determina la hipótesis nula y la hipótesis alternativa dónde:
H0: μ hombres = μ mujeres
H1: μ hombres ≠ μ mujeres
Inicialmente se hace una prueba de hipótesis para determinar si las varianzas son iguales
vw <- stats::var.test(x=hombres$X7, y=mujeres$X7, null.value=1, alternative="two.sided", conf.level=0.95)
vw$p.valueValor de p: [1] 0.6808186
Se obtiene un valor de p de 0.67. Teniendo en cuenta un valor de significancia del 10%, no se rechaza la hipótesis nula de que el cociente de varianzas es igual a 1, y se determina que las varianzas son iguales. Por lo que, se hace la prueba de hipótesis para la diferencia de medias con varianzas iguales.
c <- t.test(x=hombres$X7, y=mujeres$X7,alternative="two.sided", mu= 0, paired = F,var.equal=T,conf.level=0.90)
c$p.valueValor de p: [1] 5.190308e-19
Se obtiene un valor de p de 5.19 e-19. Teniendo en cuenta un valor de significancia del 10% por lo que se rechaza la hipótesis nula de que las dos medias son iguales (diferencia de medias = 0), por tanto, las media del diámetro de la muñeca entre hombres y mujeres sí es diferente, algo que también es posible observar elaborando el boxplot.
dfh7 <- data.frame(x7=hombres$X7)
dfm7 <- data.frame(x7=mujeres$X7)
dfh7$grupo <- "Hombres"
dfm7$grupo <- "Mujeres"
dfa7 <- rbind(dfh7,dfm7)
ggplot(data=dfa7,aes(x="",y=x7))+
geom_boxplot(fill="lightblue")+
labs(title = "Boxplot",
subtitle = "Diámetro de mu\u00F1eca",
x="",
y="Diámetro de mu\u00F1eca (cm)")+
facet_wrap(~ grupo, nrow = 1)+
stat_boxplot(geom = "errorbar", width = 0.15) +
theme_bw(base_size = 15)+
theme(plot.title = element_text(size = 18),
axis.text = element_text(size = 10),
axis.title = element_text(size = 12))+
scale_y_continuous(breaks=seq(9,12, by=1))d. 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.
Como se determinó anteriormente, esta variable no tiene una distribución normal, algo que es necesario para realizar esta prueba de hipótesis. Sin embargo, teniendo en cuenta que la muestra es mayor a 30, la prueba t de Student puede ser robusta ante desviaciones moderadas de la normalidad por lo que se hace la prueba de hipótesis teniendo en cuenta lo mencionado anteriormente a la hora de realizar el análisis
Se determina la hipótesis nula y la hipótesis alternativa dónde:
H0: μ hombres <= μ mujeres
H1: μ hombres > μ mujeres
Inicialmente se hace una prueba de hipótesis para determinar si las varianzas son iguales
vx <- stats::var.test(x=hombres$X13, y=mujeres$X13, null.value=1, alternative="greater", conf.level=0.95)
vx$p.valueValor de p: [1] 0.9666634
Se obtiene un valor de p de 0.067. Teniendo en cuenta un valor de significancia del 5%, no se rechaza la hipótesis nula de que el cociente de varianzas es igual a 1, y se determina que las varianzas son iguales. Por lo que, teniendo en cuenta esto, se hace la prueba de hipótesis para la diferencia de medias con varianzas iguales.
d <- t.test(x=hombres$X13, y=mujeres$X13,alternative = "two.sided" , mu= 0, paired = F, var.equal=T, conf.level=0.95)
d$p.valueValor de p: [1] 0.1541259
Se obtiene un valor de p de 0.077. Teniendo en cuenta un valor de significancia del 5% por lo que no se rechaza la hipótesis nula de que la media de la circunferencia abdominal en hombres es menor o igual a la las mujeres. Por tanto, se determina que el promedio de la variable X13 no es mayor en hombres que en mujeres. Sin embargo, es necesario considerar la robustez de este resultado teniendo en cuenta lo mencionado anteriormente respecto a la normalidad, que el valor de p está muy cerca de entrar en la zona de rechazo con α = 0.05, y los valores atípicos, que se encuentran en Mujeres (como se observa en el boxplot) que son el 8% de los datos totales para este grupo.
dfh13 <- data.frame(x13=hombres$X13)
dfm13 <- data.frame(x13=mujeres$X13)
dfh13$grupo <- "Hombres"
dfm13$grupo <- "Mujeres"
dfa13 <- rbind(dfh13,dfm13)
ggplot(data=dfa13,aes(x="",y=x13))+
geom_boxplot(fill="lightblue")+
labs(title = "Boxplot",
subtitle = "Circunferencia abdominal",
x="",
y="Circunferencia abdominal (cm)")+
facet_wrap(~ grupo, nrow = 1)+
stat_boxplot(geom = "errorbar", width = 0.15) +
theme_bw(base_size = 15)+
theme(plot.title = element_text(size = 18),
axis.text = element_text(size = 10),
axis.title = element_text(size = 12))+
scale_y_continuous(breaks=seq(9,12, by=1))e. ¿Es la varianza de la variable X13 en las mujeres mayor que 80?, pruebe con α = 0.01.
Para este caso, como también se esta trabajando con la variable X13 se debe tener en cuenta lo mencionado en el punto inmediatamente anterior
Se determina la hipótesis nula y la hipótesis alternativa dónde:
H0: σ2 mujeres <= 80
H1: σ2 mujeres > 80
e <- stests::var.test(x=mujeres$X13, null.value=80, alternative="greater", conf.level=0.99)
e$p.valueValor de p: [1] 0.05016783
Se obtiene un valor de p de 0.05017. Teniendo en cuenta un valor de significancia del 1%, no se rechaza la hipótesis nula de que la varianza de la circunferencia abdominal en mujeres es menor o igual a 80. Por tanto, las evidencias no son suficientes para afirmar que la varianza de la variable X13 en mujeres es mayor a 80.
f. ¿Es la varianza de la variable X8 en los hombres diferente de 1.5?, pruebe con α = 0.01.
Teniendo en cuenta que la distribución de la variable X8 es normal, se determina la hipótesis nula y la hipótesis alternativa dónde:
H0: σ2 hombres = 1.5
H1: σ2 hombres ≠ 1.5
f <- stests::var.test(x=hombres$X8, null.value=1.5, alternative="two.sided", conf.level=0.99)
f$p.valueValor de p: [1] 0.479383
Se obtiene un valor de p de 0.479383. Teniendo en cuenta un valor de significancia del 1%, no se rechaza la hipótesis nula de que la varianza del diámetro de la rodilla en hombres igual a 1.5. Por tanto, las evidencias no son suficientes para afirmar que la varianza de la variable X8 en hombres sea diferente a 1.5.
Para llevar a cabo el análisis de regresión lineal es necesario, primero, establecer el nivel de correlación entre las variables a seleccionar. En ese sentido, se tomará como referencia un nivel de correlación mínimo de 0.6 entre las variables que se prueben. Y en caso de que hayan varias correlaciones superiores a este número, se tomará la más alta (sin tener en cuenta la correlación entre la variable y sí misma, que evidentemente tendrá correlación de 1):
X6 Diámetro del codo
library(dplyr)
corr <- data.frame(cor(muestra1))
cor_ordenada <- arrange(corr, desc(X6))
head(cor_ordenada, 3)Tomaremos, entonces, la relación con X7 (Diámetro de la muñeca) (1). Realizamos el mismo ejercicio con variables distintas cuya mayor correlación con otras aún no se haya planteado
X8 Diámetro de Rodilla
cor_ordenada <- arrange(corr, desc(X8))
head(cor_ordenada, 3)Analizaremos X8 y X23 (2)
X13 Circunferencia abdominal en cm
cor_ordenada <- arrange(corr, desc(X13))
head(cor_ordenada, 3)Analizaremos X13 y X23 (3)
X15 Circunferencia del muslo en cm
cor_ordenada <- arrange(corr, desc(X15))
head(cor_ordenada, 3)Analizaremos X15 y X13 (4)
X23 Peso en kg
cor_ordenada <- arrange(corr, desc(X23))
head(cor_ordenada, 3)Analizaremos X23 y X6 (5)
X24 Altura en cm
cor_ordenada <- arrange(corr, desc(X24))
head(cor_ordenada, 3)Analizaremos X24 y X23 (6)
(1) X6 ~ X7
Cómo el diámetro de las muñecas influye en el diámetro de los codos
reg.lin <- lm(X6 ~ X7, data = muestra1)
summary(reg.lin)
ggplot(muestra1, aes(x=X7, y=X6)) +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=TRUE, col='dodgerblue1') +
theme_light() +
labs(x = "Diámetro de muñecas", y = "Diámetro de codos")
Call:
lm(formula = X6 ~ X7, data = muestra1)
Residuals:
Min 1Q Median 3Q Max
-1.76918 -0.47673 -0.06918 0.33144 1.79405
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.70383 0.84301 0.835 0.406
X7 1.20249 0.07977 15.074 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.712 on 98 degrees of freedom
Multiple R-squared: 0.6987, Adjusted R-squared: 0.6956
F-statistic: 227.2 on 1 and 98 DF, p-value: < 2.2e-16
El principal elemento a destacar es que el valor p es MUY pequeño, lo que quiere decir que la relación entre X6 y X7 es significativa pues la hipótesis nula que se asume por defecto en la regresión lineal ("No hay relación significativa entre X6 y X7") cae en la región de rechazo del 5%, por lo que es desmentida. También es resaltable que la desviación estandar es relativamente baja como se puede apreciar en la gráfica y en el sumario. Finalmente, se puede evidenciar que el diámetro de los codos (como variable independiente) permite explicar alrededor del 70% de la variabilidad del diámetro de las muñecas
Ahora, para llevar a cabo las predicciones es necesario cerciorarse de que los datos residuales (diferencia entre los valores observados y los valores predichos) cuenten con una distribución normal, cosa que con las variables no es de tanta necesidad.
residuos <- rstandard(reg.lin)
qqnorm(residuos)
qqline(residuos)Como vemos, los puntos se ven bastante alineados por lo que podemos asumir normalidad (la normalidad no tiene que ser perfecta)
Con lo anterior dicho, se buscará predecir el comportamiento del diámetro de las muñecas con base en diametros de los codos superiores o iguales a 15 y menores o iguales a 17
diam_grande <- data.frame(X7 = seq(15,17,0.5))
predicc <- predict(reg.lin, diam_grande)
tabla <- data.frame(diam_grande, predicc)
tabla(2) X8 ~ X23
Cómo el peso influye en el diámetro de las rodillas
reg.lin <- lm(X8 ~ X23, data = muestra1)
summary(reg.lin)
ggplot(muestra1, aes(x=X23, y=X8)) +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=TRUE, col='dodgerblue1') +
theme_light() +
labs(x = "Peso", y = "Diámetro de las rodillas")
Call:
lm(formula = X8 ~ X23, data = muestra1)
Residuals:
Min 1Q Median 3Q Max
-1.6448 -0.5770 0.0157 0.6153 3.1769
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 12.987508 0.445393 29.16 <2e-16 ***
X23 0.085527 0.006439 13.28 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.8397 on 98 degrees of freedom
Multiple R-squared: 0.6429, Adjusted R-squared: 0.6392
F-statistic: 176.4 on 1 and 98 DF, p-value: < 2.2e-16
Nuevamente, lo que más resalta es lo pequeño que es el valor de P, permitiendo rechazar la hipótesis nula ("El modelo de regresión no es válido") y validando, por lo tanto, el modelo de regresión aplicado. Con respecto a qué tanto el peso permite explicar la variabilidad del diámetro de las rodillas, encontramos que lo puede explicar en un 63% (algo inferior a la correlación anterior), lo cual sigue siendo aceptable.
Pasamos a determinar si los residuos se distribuyen normal
residuos <- rstandard(reg.lin)
qqnorm(residuos)
qqline(residuos)Concluímos a partir de la gráfica que se trata de una distribución normal. Ya para el ejercicio de predicción, buscaremos saber cómo sería el diámetro de las rodillas de una persona con bajo peso (20 kg) y el de una persona con sobrepeso (200 kg)
infra_sobre_peso <- data.frame(X23 = c(20,200))
predicc <- predict(reg.lin, infra_sobre_peso)
tabla <- data.frame(infra_sobre_peso, predicc)
tabla(3) X13 ~ X23
Cómo la circunferencia abdominal se ve influenciada por el peso
reg.lin <- lm(X13 ~ X23, data = muestra1)
summary(reg.lin)
ggplot(muestra1, aes(x=X23, y=X13)) +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=TRUE, col='dodgerblue1') +
theme_light() +
labs(x = "Peso", y = "Circunferencia abdominal")
Call:
lm(formula = X13 ~ X23, data = muestra1)
Residuals:
Min 1Q Median 3Q Max
-13.6540 -4.7390 -0.5566 3.9095 22.4546
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 50.39257 3.47645 14.49 <2e-16 ***
X23 0.50854 0.05026 10.12 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 6.554 on 98 degrees of freedom
Multiple R-squared: 0.5109, Adjusted R-squared: 0.5059
F-statistic: 102.4 on 1 and 98 DF, p-value: < 2.2e-16
Como en los casos anteriores, encontramos un valor P muy inferior al 5% por lo que el modelo se muestra como apropiado para correlacionar estas dos variables. Algo interesante que también se puede encontrar es el valor de R cuadrado que redondea el 50%, lo que quiere decir que la variable Peso sólo puede explicar el 50% de la variabilidad de la circunferencia abdominal, una capacidad de predicción bastante más reducida que con otras combinaciones vistas.
Pasamos a determinar si los residuos se distribuyen normal
residuos <- rstandard(reg.lin)
qqnorm(residuos)
qqline(residuos)Se evidencia a través de la gráfica que los residuos se distribuyen normal. Ya para el ejercicio de predicción, se buscará conocer la circunferencia abdominal de personas que pesen entre 80 y 100kg
circunf_peso <- data.frame(X23 = seq(80,100,5))
predicc <- predict(reg.lin, circunf_peso)
tabla <- data.frame(circunf_peso, predicc)
tabla(4) X15 ~ X13
Cómo la circunferencia del muslo se ve influenciada por la circunferencia abdominal
reg.lin <- lm(X15 ~ X13, data = muestra1)
summary(reg.lin)
ggplot(muestra1, aes(x=X13, y=X15)) +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=TRUE, col='dodgerblue1') +
theme_light() +
labs(x = "Peso", y = "Circunferencia abdominal")
Call:
lm(formula = X15 ~ X13, data = muestra1)
Residuals:
Min 1Q Median 3Q Max
-7.9373 -1.8068 -0.3219 2.2129 8.8612
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 29.14715 3.03267 9.611 8.46e-16 ***
X13 0.31828 0.03549 8.967 2.11e-14 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 3.293 on 98 degrees of freedom
Multiple R-squared: 0.4507, Adjusted R-squared: 0.4451
F-statistic: 80.41 on 1 and 98 DF, p-value: 2.106e-14
En este caso, el valor P aumentó levemente si lo comparamos con los valores de las correlaciones anteriores, pero sigue siendo lo suficientemente bajo como para no pasar el 5% y, por lo tanto, invalidar el modelo. Así mismo, la circunferencia abdominal sólo puede explicar el 44% de la variabilidad de la circunferencia del muslo, por lo que el nivel de precisión ha disminuido frente a casos anteriores.
Pasamos a determinar si los residuos se distribuyen normal
residuos <- rstandard(reg.lin)
qqnorm(residuos)
qqline(residuos)Es visible la tendencia a la distribución normal en la gráfica. Ahora para el ejercicio de predicción, se buscará conocer la circunferencia del muslo de personas con circuferencia abdominal de 75 y 80cm
muslo_circun <- data.frame(X13 = c(75, 80))
predicc <- predict(reg.lin, muslo_circun)
tabla <- data.frame(muslo_circun, predicc)
tabla(5) X23 ~ X6
Cómo el peso de la persona se ve influenciada por el diámetro del codo
reg.lin <- lm(X23 ~ X6, data = muestra1)
summary(reg.lin)
ggplot(muestra1, aes(x=X6, y=X23)) +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=TRUE, col='dodgerblue1') +
theme_light() +
labs(x = "Diametro del codo", y = "Peso")
Call:
lm(formula = X23 ~ X6, data = muestra1)
Residuals:
Min 1Q Median 3Q Max
-14.809 -5.809 -1.342 5.340 24.091
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -43.4486 7.8725 -5.519 2.79e-07 ***
X6 8.3327 0.5863 14.212 < 2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 7.528 on 98 degrees of freedom
Multiple R-squared: 0.6733, Adjusted R-squared: 0.67
F-statistic: 202 on 1 and 98 DF, p-value: < 2.2e-16
El valor P se encuentra también muy por debaje del límite del 5%, por lo que el modelo es válido para la regresión lineal. Ahora, es interesante evidenciar como esta relación que sin profundizar mucho no tiene mucha relación (diametro del codo y el peso), cuenta con un mayor porcentaje de explicación de la variabilidad de la variable dependiente (peso) en contraste con otras correlaciones que aparentan tener mayor sentido
Pasamos a determinar si los residuos se distribuyen normal
residuos <- rstandard(reg.lin)
qqnorm(residuos)
qqline(residuos)Se concluye la distribución normal de los residuos.Para el ejercicio de predicción, se buscará conocer el peso de la persona a partir de un diámetro de los codos entre 14 y 16cm
peso_codos <- data.frame(X6 = seq(14, 16,0.5))
predicc <- predict(reg.lin, peso_codos)
tabla <- data.frame(peso_codos, predicc)
tabla(6) X24 ~ X23
Cómo la altura de la persona se ve influenciada por su peso
reg.lin <- lm(X24 ~ X23, data = muestra1)
summary(reg.lin)
ggplot(muestra1, aes(x=X23, y=X24)) +
geom_point() +
geom_smooth(method='lm', formula=y~x, se=TRUE, col='dodgerblue1') +
theme_light() +
labs(x = "Peso", y = "Altura")
Call:
lm(formula = X24 ~ X23, data = muestra1)
Residuals:
Min 1Q Median 3Q Max
-24.7665 -3.9232 0.3895 3.9014 15.4367
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 137.35745 3.30754 41.53 <2e-16 ***
X23 0.50441 0.04782 10.55 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 6.236 on 98 degrees of freedom
Multiple R-squared: 0.5317, Adjusted R-squared: 0.5269
F-statistic: 111.3 on 1 and 98 DF, p-value: < 2.2e-16
Siguiendo lo encontrado con otras correlaciones, el valor P sigue siendo muy inferior al 5%, y el valor de R cuadrado sigue encontrandose entre el 50 y 60% (en este caso, 52%). Por lo que también se trata de una regresión válida y relativamente precisa en determinar la variabilidad de la variable dependiente (altura)
Pasamos a determinar si los residuos se distribuyen normal
residuos <- rstandard(reg.lin)
qqnorm(residuos)
qqline(residuos)Se puede notar en la gráfica una muy fuerte tendencia hacia la distribución normal, por lo que se puede pasar al ejercicio de predicción. Para llevar a cabo este, buscaremos determinar la altura de la persona de pesos bajos: de 20 a 30kg
altura_peso <- data.frame(X23 = seq(20, 30,1))
predicc <- predict(reg.lin, altura_peso)
tabla <- data.frame(altura_peso, predicc)
tabla