Clase Bivariada total

Parte 1 de Bivariada

Paso 1: Cargando la data Usaremos una data de excel google

link="https://docs.google.com/spreadsheets/d/e/2PACX-1vQ_VNceU6ncsQs-_KFvkQsv2XqYKRCMyRYCDYQFosH5bo6Yt-l1gE8ZRdP44m4Rh8lQB2nOY-Y-p0ZP/pub?gid=0&single=true&output=csv"

hsb=read.csv(link,stringsAsFactors = F)

Paso 2: Explorar el contenido de la data

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 ...

Paso 2.1: Pre-procesamiento

Si o si antes del analisis debemos adecuar la data a la metadata La data tiene que reformarse como lo indica la metadata (lo que debemos modificar para un mejor analisis)

Los cambianos necesarios son:

# debe ir como texto , no como variables, sino "identificador"
hsb$ID=as.character(hsb$ID)

# Estas variables deben ir como CATEGORIAL NOMINAL
hsb[,c(2,3,5,6,10)]=lapply(hsb[,c(2,3,5,6,10)],as.factor)

# Estas varialves deben ir como CATEGORIAL ORDINAL
hsb$HSP=as.ordered(hsb$HSP)

En el formateo NO se incluye RECODIFICACION.

La recodificacion es necesaria cuando la VARIABLE CAT presenta etiquetas como Categorias (como en el caso del Indice de Democracia, para las variables Tipo de regimen y Continente)

NO TODAS LAS COLUMNAS SERAN VARIABLES, otras son INDICADORES o claves, estos deben permanecer como texto (CHARACTER)

Mostramos la nueva estructura

str(hsb,strict.width="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..
##  $ RACE  : Factor w/ 4 levels "1","2","3","4": 2..
##  $ SES   : int  1 1 1 2 2 2 1 1 2 1 ...
##  $ SCTYP : Factor w/ 2 levels "1","2": 1 1 1 1 1..
##  $ HSP   : Ord.factor w/ 3 levels "1"<"2"<"3": 3..
##  $ LOCUS : num  0.29 -0.42 0.71 0.06 0.22 0.46 0..
##  $ CONCPT: num  0.88 0.03 0.03 0.03 -0.28 0.03 -..
##  $ MOT   : num  0.67 0.33 0.67 0 0 0 0.33 1 0.33..
##  $ CAR   : Factor w/ 17 levels "1","2","3","4",...
##  $ RDG   : num  33.6 46.9 41.6 38.9 36.3 49.5 62..
##  $ WRTG  : num  43.7 35.9 59.3 41.1 48.9 46.3 64..
##  $ MATH  : num  40.2 41.9 41.9 32.7 39.5 46.2 48..
##  $ SCI   : num  39 36.3 44.4 41.7 41.7 41.7 63.4..
##  $ CIV   : num  40.6 45.6 45.6 40.6 45.6 35.6 55..

Paso 3: Probando HIPOTESIS a nivel BIVARIADO Antes recordar que usamos primero la HIPOTESIS NULA de prueba estadisticas para asi saber que pruebas utilizar.

La prueba estadistica depende si la variable numerica a analizar se distribuye normalmente

Para la data que tenemos (hsb), usaremos a MATH como variable numerica de interes, So veamos la distribucion de esta variable:

library(ggplot2)

base=ggplot(data = hsb,aes(x=MATH))

base+geom_histogram(bins = 20)

Usaremos test y graficas para comprobar si MATH se distribuye (u otra VALERIA NUMERICA) tiene una distribucion suficientemente cercana a la normal.

El TEST DE NORMALIDAD a utilizar sera el de SHAPIRO WILK, cuya hipotesis nula es que la variable se distribuye normalmente. Recuerda que si hay NORMALIDAD se usa tecnicas PARAMETRICAS, si NO es NO PARAMETRICAS

A. TIPO 1: NUMERICO-DICOTOMICA

Planteamos la hipotesis entre una variable NUMERIC y una variable CATEGORICA DICO (solo 2 niveles)

-HIPOTESIS NULA o HO : “Los promedios de la variable numerica en cada grupo de la docotomica no se diferencian”

Si tenemos que estos son los promedios de matematicas para H y M :

f1=formula(MATH~SEX)

aggregate(f1,hsb,mean)
##   SEX     MATH
## 1   1 52.34542
## 2   2 51.43456

de esto ¿Podemos inferir que a los hombres les va mejor en MATH?

PASO 1: DECIDIR SI ES PARAMETRICO O NO PARAMETRICO Usamos el metodo gráfico:

library(ggpubr)
## Loading required package: magrittr
ggqqplot(data = hsb,x="MATH")+facet_grid(. ~ SEX)

EXPLICACION: Si los puntos se alejan mucho de la diagonal, se aleja de la NORMALIDAD Es hard hacerlo visualmente, usamos el test Shapiro-Wilk que nos reporta la probabilidad que los datos tengan esa distribucion

# *Funcion ad-hoc*

normalidadTest=function(x){y=shapiro.test(x);c(y$statistic,y$p.value)}

# *Calculando*

resultado=aggregate(f1,hsb,FUN = normalidadTest)

# *Mostrando resultado*

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.9837903 0.0034565
2 0.9790040 0.0001031

El test no arroja que la probabilidad de la variable MATH, se comporta como una curva normal muy BAJA (por se mejor a 0.05). Se rechaza la hipotesis que MATH tiene distribucion normal en cada nivel de SEXO

PASO 2: Aplicando TEST para ACEPTAR o RECHAZAR la HO:

Como sabes que: No es NORMAL, las pruebas a usar son las NO PARAMETRICAS. Pero veamos ambos tipos de pruebas

  • Opcion PARAMETRICA para DICOTOMICA

Si HAY NORMALIDAD usa l PRUEBA T

Esta prueba informa la probabilidad de ma media de MATH sea la misma en ambos grupos de SEX. El p-value es > 0.05 -> aceptamos la HO de la Prueba T

t.test(f1,hsb)
## 
##  Welch Two Sample t-test
## 
## data:  MATH by SEX
## t = 1.1722, df = 560.59, p-value = 0.2416
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -0.6154067  2.4371360
## sample estimates:
## mean in group 1 mean in group 2 
##        52.34542        51.43456
  • Opcion para NO PARAMETRICA para DICOTOMICA

Si NO HAY NORMALIDAD usa la PRUEBA MANN-WHITNEY

# *el test de wilcoxon devuelve Mann Whitney* al recibir "fi"

wilcox.test(f1,hsb)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  MATH by SEX
## W = 46789, p-value = 0.3086
## alternative hypothesis: true location shift is not equal to 0

El p-value NO es significativo. Se ACEPTA LA HO DEL MANN - WHITNEY

B. TIPO 2: NUMERICA - POLITOMICA

Plantearemos una hipotesis entre una variable numerica y una variable categorica politomica (mas de 2 niveles)

  • Hipotesis Nula o HO : Los promedios de las variables numerixas en cada grupo de la politomica NO se diferencian.

Si tenemos quee estos son los promedios de Matematicas segun el programa escolar:

f2=formula(MATH~ HSP)
aggregate(f2,hsb,mean)
##   HSP     MATH
## 1   1 55.81071
## 2   2 49.09172
## 3   3 46.26803

Podemos inferir que a los alumnos del programa general les va mejor en MATH ? PASO 1: Decidir si es PARAMETRICA O NO PARAMETRICA

Usamos el metodo grafico:

library(ggpubr)
ggqqplot(data = hsb,x="MATH")+facet_grid(.~ HSP)

Ahora test SHAPIRO WILK

# calculando

resultado=aggregate(f2,hsb,FUN=normalidadTest)

# mostrando resultado

library(knitr)

shapiroTest=as.data.frame(resultado[,2])
names(shapiroTest)=c("SW_Statistic","Probabilidad")
kable(cbind(resultado[1],shapiroTest))
HSP SW_Statistic Probabilidad
1 0.9888836 0.0187048
2 0.9810514 0.0423975
3 0.9512192 0.0000496

Como al menos 1 tiene probabilidad < 0.05 debemos ir por No parametrico

PASO 2: Aplicando TEST para aceptar o rechazar la HO:

  • Usando opcion PARAMETRICA para POLITOMICA

Corresponde la Prueba F de Schnedecor conocida tb como One-way ANOVA:

summary(aov(f2,data=hsb))
##              Df Sum Sq Mean Sq F value Pr(>F)    
## HSP           2  10515    5258   73.72 <2e-16 ***
## Residuals   597  42579      71                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

LOS " * " indican si el HO es significativo. Podemos rechazarlo, de ahi al menos 1 promedio difiere de los demas. Detectando las diferencias:

library(ggpubr)
ggerrorplot(hsb,x="HSP",y="MATH",desc_stat = "mean_ci")

El nivel 1 se diferencia de los demas.

  • Usando opcion NO PARAMETRICA para Politomica:

Se usa la prueba Kruskal-Wallis:

kruskal.test(f2,hsb)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  MATH by HSP
## Kruskal-Wallis chi-squared = 121.26, df = 2, p-value < 2.2e-16

Si bien no muestra " * " , pero la probailidadd (p-value) es tb < a 0.05

ggplot(data=hsb,aes(x=HSP,y=MATH))+geom_boxplot(notch = T)

Se ha puesto un “notch” al boxplot. Si los notches se intersectan, se asumen igualdad de medianas, de ahi que la opcion 1 es diferente a las demas.

Analizando Writing por Sexo y Nivel Socioeconomico:

Bajar data:

link2="https://docs.google.com/spreadsheets/d/e/2PACX-1vQ_VNceU6ncsQs-_KFvkQsv2XqYKRCMyRYCDYQFosH5bo6Yt-l1gE8ZRdP44m4Rh8lQB2nOY-Y-p0ZP/pub?gid=0&single=true&output=csv"

data=read.csv(link2,stringsAsFactors = F)
str(data)
## '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 ...

Cambios para las variables:

# No variable solo identificador
data$ID=as.character(data$ID)

# variables Nominales
data[,c(2,3,5,6,10)]=lapply(data[,c(2,3,5,6,10)],as.factor)

#variable Ordinal
data$SES=as.ordered(data$SES)
str(data,strict.width="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..
##  $ RACE  : Factor w/ 4 levels "1","2","3","4": 2..
##  $ SES   : Ord.factor w/ 3 levels "1"<"2"<"3": 1..
##  $ SCTYP : Factor w/ 2 levels "1","2": 1 1 1 1 1..
##  $ HSP   : Factor w/ 3 levels "1","2","3": 3 2 2..
##  $ LOCUS : num  0.29 -0.42 0.71 0.06 0.22 0.46 0..
##  $ CONCPT: num  0.88 0.03 0.03 0.03 -0.28 0.03 -..
##  $ MOT   : num  0.67 0.33 0.67 0 0 0 0.33 1 0.33..
##  $ CAR   : Factor w/ 17 levels "1","2","3","4",...
##  $ RDG   : num  33.6 46.9 41.6 38.9 36.3 49.5 62..
##  $ WRTG  : num  43.7 35.9 59.3 41.1 48.9 46.3 64..
##  $ MATH  : num  40.2 41.9 41.9 32.7 39.5 46.2 48..
##  $ SCI   : num  39 36.3 44.4 41.7 41.7 41.7 63.4..
##  $ CIV   : num  40.6 45.6 45.6 40.6 45.6 35.6 55..

Viendo distribucion de Writing

library(ggplot2)
base1=ggplot(data = data,aes(x=WRTG))
base1+geom_histogram(bins = 20)

Tipo 1: NUM DICO

f3=formula(WRTG~ SEX)
aggregate(f3,data,mean)
##   SEX     WRTG
## 1   1 49.78608
## 2   2 54.55443

Se puede inferir que a las mujeres les va mejor en WRTG?

Usando grafico para definir si es PARAMETRICO O NO PARAMETRICO

library(ggpubr)
ggqqplot(data = data,x="WRTG")+facet_grid(.~ SEX)

Usamos Shapiro -Wilk para reportar la probabilidad en su distribucion

normalidadTest=function(x){y=shapiro.test(x);c(y$statistic,y$p.value)}
resultado=aggregate(f3,data,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
t.test(f3,data)
## 
##  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

Tipo 2: NUM POLI

f4=formula(WRTG~SES)
aggregate(f4,data,mean)
##   SES     WRTG
## 1   1 48.70288
## 2   2 52.35853
## 3   3 55.59259

es PARAMETRICO o NO PARAMETRICo

library(ggpubr)
ggqqplot(data=data,x="WRTG")+facet_grid(. ~SES)

Ahora confirmanos SHAPIRO

resultado=aggregate(f4,data,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

Aplicamos TEST para rechazar o no la HO:

PARA PARAMETRICO Prueba F de Schnedecor

summary(aov(f4,data=data))
##              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
library(ggpubr)
ggerrorplot(data, x = "SES", y = "WRTG", desc_stat = "mean_ci"
            )

PAra NO PARAMETRICO

kruskal.test(f4,hsb)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  WRTG by SES
## Kruskal-Wallis chi-squared = 37.037, df = 2, p-value = 9.069e-09
ggplot(data=data, aes(x=SES, y=WRTG)) + geom_boxplot(notch = T)

PArte 2 de BIVARIADA Relacion CAT-CAT , NUM-NUM

1. Cargando data: desde GOOGLE

link3="https://docs.google.com/spreadsheets/d/e/2PACX-1vQ_VNceU6ncsQs-_KFvkQsv2XqYKRCMyRYCDYQFosH5bo6Yt-l1gE8ZRdP44m4Rh8lQB2nOY-Y-p0ZP/pub?gid=0&single=true&output=csv"

hsb2=read.csv(link, stringsAsFactors = F)

2. Explorando

str(hsb2)
## '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 ...

Preprocesamiento

# id como texto (pues no es variable, sino "identificador"
hsb$ID=as.character(hsb$ID)

# estas variables como CATEGORICAS NOMINALES
hsb[,c(2,3,5,6,10)]=lapply(hsb[,c(2,3,5,6,10)],as.factor)

# estas variables como CATEGORICAS ORDINALES
hsb$HSP=as.ordered(hsb$HSP)

Ahora veamos nueva estructura:

str(hsb,strict.width="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..
##  $ RACE  : Factor w/ 4 levels "1","2","3","4": 2..
##  $ SES   : int  1 1 1 2 2 2 1 1 2 1 ...
##  $ SCTYP : Factor w/ 2 levels "1","2": 1 1 1 1 1..
##  $ HSP   : Ord.factor w/ 3 levels "1"<"2"<"3": 3..
##  $ LOCUS : num  0.29 -0.42 0.71 0.06 0.22 0.46 0..
##  $ CONCPT: num  0.88 0.03 0.03 0.03 -0.28 0.03 -..
##  $ MOT   : num  0.67 0.33 0.67 0 0 0 0.33 1 0.33..
##  $ CAR   : Factor w/ 17 levels "1","2","3","4",...
##  $ RDG   : num  33.6 46.9 41.6 38.9 36.3 49.5 62..
##  $ WRTG  : num  43.7 35.9 59.3 41.1 48.9 46.3 64..
##  $ MATH  : num  40.2 41.9 41.9 32.7 39.5 46.2 48..
##  $ SCI   : num  39 36.3 44.4 41.7 41.7 41.7 63.4..
##  $ CIV   : num  40.6 45.6 45.6 40.6 45.6 35.6 55..

Tipo 3. CAT - CAT

Plantearemos hipotesis entre DOS CATEGORIAS

Para este tipo de hipotesis, solo hay pruebas NO PARAMETRICAS

Veamos la relacion entre SEX y SCTYP

Se crea una table de doble entrada. Si tienes una dependiente , esta ca en las filas

columna=hsb2$SEX
fila=hsb$SCTYP
(t=table(fila,columna))
##     columna
## fila   1   2
##    1 232 274
##    2  41  53

Si usas Porcentajes, estos se calcula por la independiente (columnas)

# marginal por columna (suma 1 por columnam NO por fila)
(prop_t=prop.table(t,margin = 2))
##     columna
## fila         1         2
##    1 0.8498168 0.8379205
##    2 0.1501832 0.1620795
library("gplots")
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess
balloonplot(t(prop_t),main="tabla",label=T,show.margins = FALSE)

Pregunta clave: Habra alguna relacion entre ambas? Visualmente ves que los valores por fila son muy similares, loq eu insinua que la independiente no genera diferencias en la dependiente.

Para usar un comino formal usamos la Prueba CHI CUADRADO que tiene por hipotesis nula (NO) es que ambas son independientes (NO HAY ASOCIACION)

PAra este caso:

chisq.test(t)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  t
## X-squared = 0.082049, df = 1, p-value = 0.7745

Si p-value es significativo (0.05), se rechaza la HO. En este caso, se sigue aceptando que NO HAY asociacion (la variable de la columna, no genera diferencias por fila)

Sin embargo, si la hibiera, no se sabe que tan intensa o fuerte es esa asociacion. Para ello podemos pedir medidas de intensidad y direccion:

library(oii)
association.measures(fila,columna)
## Chi-square-based measures of association:
##    Phi:                      0.012 
##    Contingency coefficient:  0.012 
##    Cramer's V:               0.012 
## 
## Ordinal measures of association:
##    Total number of pairs:   179700 
##    Concordant pairs:        12296   ( 6.84 %)
##    Discordant pairs:        11234   ( 6.25 %)
##    Tied on first variable:  65741   ( 36.58 %)
##    Tied on second variable: 24034   ( 13.37 %)
##    Tied on both variables:  66395   ( 36.95 %)
## 
##    Goodman-Kruskal Gamma: 0.045 
##    Somers' d (col dep.):  0.022 
##    Kendall's tau-b:       0.016 
##    Stuart's tau-c:        0.012

Arriba vemos todas las medidas, ahora tienes que elegir :

Estas indican intensidad de la asociación, y van de 0 a 1 (mientras más cerca a 0 es menos intenso):

Dos dicotomicas: phi. nominal - nominal/ordinal: Coeficiente de contingencia o Cramer Estas indican intensidad de la asociación y dirección, y van de -1 a 1, donde la cercania a 0 implica asociacion débil:

ordinal - ordinal: coeficiente de Gamma, tau(s); o Sommers’ D. ordinal - dicotomico: coeficiente de Gamma.

4. NUM - NUM

Plantearemos hipótesis entre DOS NUMERICAS.

HIPOTESIS NULA o H0: Las variables no tiene relación. Comencemos por gráficar la relación, suponiendo que MATH es la dependiente:

library(ggpubr)
p1=ggscatter(hsb2,x="SCI",y="MATH",cor.coef = TRUE,cor.method = "pearson")
p1

Otras independientes:

p2=ggscatter(hsb2,x="LOCUS",y="MATH",cor.coef = TRUE,cor.method = "pearson")
p2

p3=ggscatter(hsb2, 
          x = "CONCPT", y = "MATH",
          cor.coef = TRUE, 
          cor.method = "pearson")

p3

p4=ggscatter(hsb2, 
          x = "WRTG", y = "MATH",
          cor.coef = TRUE, 
          cor.method = "pearson")
p4

En todos los casos aparece el coeficiente de Pearson, si el p-valor es significativo, se acepta que haya correlación. La correlación puede ser directa o inversa (si es negativa). La correlación aumenta si se acerca hacia 1 o -1, y se desvanece si se acerca a cero.

# paso 1:
all_ps=ggarrange(p1,p2,p3,p4,
          ncol = 2, nrow = 2) 

# paso 2
annotate_figure(all_ps,
               top = text_grob("Correlacion con MATH", 
                               color = "blue", 
                               face = "bold", 
                               size = 14))

Hemos pedido a Pearson, pero tenemos a Spearman si las variables no se distribuyeran normalmente:

library(dlookr)
## Loading required package: mice
## Loading required package: lattice
## 
## Attaching package: 'mice'
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
## Registered S3 method overwritten by 'xts':
##   method     from
##   as.zoo.xts zoo
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Registered S3 methods overwritten by 'car':
##   method                          from
##   influence.merMod                lme4
##   cooks.distance.influence.merMod lme4
##   dfbeta.influence.merMod         lme4
##   dfbetas.influence.merMod        lme4
## Warning in fun(libname, pkgname): couldn't connect to display ":0"
## 
## Attaching package: 'dlookr'
## The following object is masked from 'package:base':
## 
##     transform
normality(hsb2[,c(13,14,7,8,11)])
## # A tibble: 5 x 4
##   vars   statistic  p_value sample
##   <chr>      <dbl>    <dbl>  <dbl>
## 1 MATH       0.984 2.68e- 6    600
## 2 SCI        0.983 1.83e- 6    600
## 3 LOCUS      0.971 1.63e- 9    600
## 4 CONCPT     0.941 1.07e-14    600
## 5 RDG        0.982 7.37e- 7    600

Si la probabilidad es < 0.05 (p valor), se rechaza la normalidad. De ahi que lo recomendable es mostrar a la correlacion de Spearman, por ejemplo:

s4=ggscatter(hsb2, 
          x = "WRTG", y = "MATH",
          cor.coef = TRUE, 
          cor.method = "spearman")
s4

PD CLASE BIVARIADA