#EXPLORACION BIVARIADA PARTE 2
1.Cargar la data
linkdrive="https://docs.google.com/spreadsheets/d/e/2PACX-1vRiqzRIJ6IGakPS4g5QgUCEU9yZK5dgk3-95gVPuc7vPcDRrA4H5buJkP0_dedDS1JdqdJVgGH9vJ9F/pub?gid=626146628&single=true&output=csv"
hsb=read.csv(linkdrive, stringsAsFactors = F)
2.Exploremos
str(hsb)
## 'data.frame': 600 obs. of 15 variables:
## $ ID : int 1 2 3 4 5 6 7 8 9 10 ...
## $ SEX : int 2 1 2 2 2 1 1 2 1 2 ...
## $ RACE : int 2 2 2 2 2 2 2 2 2 2 ...
## $ SES : int 1 1 1 2 2 2 1 1 2 1 ...
## $ SCTYP : int 1 1 1 1 1 1 1 1 1 1 ...
## $ HSP : int 3 2 2 3 3 2 1 1 1 1 ...
## $ LOCUS : num 0.29 -0.42 0.71 0.06 0.22 0.46 0.44 0.68 0.06 0.05 ...
## $ CONCPT: num 0.88 0.03 0.03 0.03 -0.28 0.03 -0.47 0.25 0.56 0.15 ...
## $ MOT : num 0.67 0.33 0.67 0 0 0 0.33 1 0.33 1 ...
## $ CAR : int 10 2 9 15 1 11 10 9 9 11 ...
## $ RDG : num 33.6 46.9 41.6 38.9 36.3 49.5 62.7 44.2 46.9 44.2 ...
## $ WRTG : num 43.7 35.9 59.3 41.1 48.9 46.3 64.5 51.5 41.1 49.5 ...
## $ MATH : num 40.2 41.9 41.9 32.7 39.5 46.2 48 36.9 45.3 40.5 ...
## $ SCI : num 39 36.3 44.4 41.7 41.7 41.7 63.4 49.8 47.1 39 ...
## $ CIV : num 40.6 45.6 45.6 40.6 45.6 35.6 55.6 55.6 55.6 50.6 ...
2.2. Pre procesamiento
#ID como texto(pues no es variable, sino "identificador")
hsb$ID=as.character(hsb$ID)
#estas variables son categorias nominales
hsb[,c(2,3,5,6,10)]=lapply(hsb[,c(2,3,5,6,10)],as.factor)
#esta variable es categoria ordinal
hsb$SES=as.ordered(hsb$SES)
La nueva estructura
str(hsb,strict.widht="cut",width=50)
## 'data.frame': 600 obs. of 15 variables:
## $ ID : chr "1" "2" "3" "4" ...
## $ SEX : Factor w/ 2 levels "1","2": 2 1 2 2 2 1 1 2 1 2 ...
## $ RACE : Factor w/ 4 levels "1","2","3","4": 2 2 2 2 2 2 2 2 2 2 ...
## $ SES : Ord.factor w/ 3 levels "1"<"2"<"3": 1 1 1 2 2 2 1 1 2 1 ...
## $ SCTYP : Factor w/ 2 levels "1","2": 1 1 1 1 1 1 1 1 1 1 ...
## $ HSP : Factor w/ 3 levels "1","2","3": 3 2 2 3 3 2 1 1 1 1 ...
## $ LOCUS : num 0.29 -0.42 0.71 0.06 0.22 0.46 0.44 0.68 0.06 0.05 ...
## $ CONCPT: num 0.88 0.03 0.03 0.03 -0.28 0.03 -0.47 0.25 0.56 0.15 ...
## $ MOT : num 0.67 0.33 0.67 0 0 0 0.33 1 0.33 1 ...
## $ CAR : Factor w/ 17 levels "1","2","3","4",..: 10 2 9 15 1 11 10 9 9 11 ...
## $ RDG : num 33.6 46.9 41.6 38.9 36.3 49.5 62.7 44.2 46.9 44.2 ...
## $ WRTG : num 43.7 35.9 59.3 41.1 48.9 46.3 64.5 51.5 41.1 49.5 ...
## $ MATH : num 40.2 41.9 41.9 32.7 39.5 46.2 48 36.9 45.3 40.5 ...
## $ SCI : num 39 36.3 44.4 41.7 41.7 41.7 63.4 49.8 47.1 39 ...
## $ CIV : num 40.6 45.6 45.6 40.6 45.6 35.6 55.6 55.6 55.6 50.6 ...
3.PROBANDO HIPOTESIS A NIVEL BIVARIADO #la clave para hacer la hipotesis es saber “la hipotesis nula” de la prueba estadistica. #la prueba estadistica depende de saber si la variable numerica a analizar se distribuye normalmente
en este caso de utilizara a WRITING como variable numerica de interes. Ahora se vera la distribucion
library(ggplot2)
base=ggplot(data = hsb, aes(x=WRTG))
base+geom_histogram(bins = 20)
#Usaremos tests y graficas para comprobar si MATH se distribuye (u otra variabe numerica) tiene una distribución sufientemente cercana a la normal. #El test de normalidad a utilizar será el de Shapiro Wilk, cuya hipotesis nula es que la variable se distribuye normalmente. #Recuerda que si hay normalidad se usarán técnicas paramétricas, si no la hay, las NO paramétricas.
#IMPORTANTE: Todas las hipotesis nulas serán rechazadas si el test aplicado nos devuelve un p-valor (p-value / prob) menor a 0.05. Cuando un test de hipotesis tiene ese valor, se dice que significativo
f1=formula(WRTG~SEX)
aggregate(f1,hsb,mean)
## SEX WRTG
## 1 1 49.78608
## 2 2 54.55443
se podria inferir que hay un mayor numero de mujeres que sabe leer
.usa el metodo grafico
library(ggpubr)
## Loading required package: magrittr
#necesira estar instalado el paquete:magrittr
ggqqplot(data = hsb, x="WRTG")+ facet_grid(. ~SEX)
#cuando los puntos se alejan mucho de la diagonal, tambien se alejan de la normalidad. Como es dificil descifrarlo al ojo , se puede usa “SHAPIRO.WILK”, que nos reporta la PROBABILIDAD. acuerdese que estamos en si no no es parametrico
normalidadTest=function(x) {y =shapiro.test(x);
c(y$statistic, y$p.value)}
resultado= aggregate(f1, hsb,
FUN = normalidadTest)
library(knitr)
shapiroTest=as.data.frame(resultado[,2])
names(shapiroTest)=c("SW_Statistic","Probabilidad")
kable(cbind(resultado[1],shapiroTest))
SEX | SW_Statistic | Probabilidad |
---|---|---|
1 | 0.9643550 | 2.8e-06 |
2 | 0.9445193 | 0.0e+00 |
El tes | t nos dice que | la probabilidad de la variable WRTG se comporte como curva normal es muy baja (menor a 0.05) por lo cual se rechaza la hipotesis que WRTG tiene distribucion normal en cada nivel de sexo |
#Ya sabemos que lo que corresponde utilizar, si ya sabemos que no es NORMAL, es alguna prueba no paramétrica que me informe si los promedios difieren segun grupo. Pero veamos ambos tipos de pruebas:
-opcion parametrica para dicotomica #si hay normalidad se usa la prueba “t”
t.test(f1,hsb)
##
## Welch Two Sample t-test
##
## data: WRTG by SEX
## t = -6.0807, df = 540.78, p-value = 2.264e-09
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -6.308770 -3.227937
## sample estimates:
## mean in group 1 mean in group 2
## 49.78608 54.55443
el p.value viene hacer no es significativo porque es menor a 0.05
.Opcion no parametrica como dicotomica #si no hay normalidad usa la prueba Mann-Whitney #el test de wilconox devuelve Mann-Whitney
wilcox.test(f1,hsb)
##
## Wilcoxon rank sum test with continuity correction
##
## data: WRTG by SEX
## W = 32624, p-value = 1.255e-08
## alternative hypothesis: true location shift is not equal to 0
el p.value sale NO SIGNIFICATIVO. SE ACEPTA LA H0 DEL MANN-WHITNEY
B. TIPO II: aqui planteamos una variable numerica y variable politomica #Hipotesis Nula o H0: los promedios de las variable numericaen cada grupo de la politomica no se diferencian
f2=formula(WRTG~SES)
aggregate(f2, hsb, mean)
## SES WRTG
## 1 1 48.70288
## 2 2 52.35853
## 3 3 55.59259
library(ggpubr)
ggqqplot(data = hsb, x="WRTG")+
facet_grid(. ~ SES)
PARA PODER VISUALIZARLO MEJOR
resultado=aggregate(f2 ,hsb, FUN = normalidadTest)
library(knitr)
shapiroTest=as.data.frame(resultado[,2])
names(shapiroTest)=c("SW_Statistic", "Probabilidad")
kable(cbind(resultado[1], shapiroTest))
SES | SW_Statistic | Probabilidad |
---|---|---|
1 | 0.9673549 | 0.0020755 |
2 | 0.9517413 | 0.0000000 |
3 | 0.9249929 | 0.0000002 |
la pro | babilidad es me | nor a 0.05 por lo cual se debe pasar al No Parametrico |
summary(aov(f2, data = hsb))
## Df Sum Sq Mean Sq F value Pr(>F)
## SES 2 3552 1776 19.96 4.07e-09 ***
## Residuals 597 53116 89
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#Los astericos indican si el H0 es significativo. Podemos rechazarlo, de ahi que al menos un promedio difiere de los demás. Tratemos de detectar las diferencias:
library(ggpubr)
ggerrorplot(hsb, x="SES", y="WRTG", desc_stat = "mean_ci")
el nivel 3 se diferencia de los demás.
.Opcion No Parametrica Politomica #Aquí puedes usar la prueba de Kruskal-Wallis:
kruskal.test(f2,hsb)
##
## Kruskal-Wallis rank sum test
##
## data: WRTG by SES
## Kruskal-Wallis chi-squared = 37.037, df = 2, p-value = 9.069e-09
#Aqui no muestra asteriscos la probabilidad del p-value es menor a 0.05
-visualmente:
ggplot(data = hsb, aes(x=SES, y=WRTG)) + geom_boxplot(notch = T)