#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

  1. Tipo numerico-dicotomico(dos variables) #HIPOTESIS NULA o H0: Los promedios de las variable numerica en cada grupo de la dicotómica no se diferencian.
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
  1. Aplicando TEST para aceptar o rechazar la H0:

#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
  1. paso 1:diciendo si es no no parametrico -usamos metodo grafico
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
  1. Aplicando el Test para aceptar o rechazar H0 . Opcion Parametrico para politomica #Aquí corresponde la pruea F de Schnedecor, conocida tambien como one-way ANOVA:
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)