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
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
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
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
Plantearemos una hipotesis entre una variable numerica y una variable categorica politomica (mas de 2 niveles)
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:
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.
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.
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)
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)
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 ...
# 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..
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.
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