Para esta sesión usaremos estos datos:
Traigamosla desde 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)
¿Qué tenemos?
Esto es lo R ha traido:
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 ...
No se puede empezar el análisis sin adecuar la data a la metadata
La data tiene que reformatearse segun lo que indica la metadata:
Los cambios que se necesitan son:
# 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)
Note que el formateo NO INCLUYO RECODIFICACION. La recodificación es necesaria cuando la variable categórica presenta etiquetas como categorÃas (vera ese caso cuando trabaje el Indice de Democracia, para las variables tipo de regimen y continente).
Note además que NO todas las columnas serán variables, otras sera identificadores o claves o keys. Los identificadores deben permanecer como texto (char).
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..
Aqui plantearemos hipótesis entre DOS CATEGÓRICAS.
Para este tipo de hipotesis, solo hay pruebas No paramétricas
Veamos la relacion entre SEX y SCTYP
Se crea una tabla de doble entrada. Si tienes una dependiente, ésta va en las filas.
columna=hsb$SEX
fila=hsb$SCTYP
(t=table(fila,columna))
## columna
## fila 1 2
## 1 232 274
## 2 41 53
Si usas porcentajes, estos se calculan por la independiente (columnas):
# marginal por columna (suma 1 por columna, 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")
# nota que uso la funcion "t()":
balloonplot(t(prop_t), main ="tabla",
label = T, show.margins = FALSE)
La pregunta clave es: Habrá alguna relación entre ambas?
Visualmente ves que los valores por fila son muy similares, lo que insinua que la independiente no genera diferencias en la dependiente.
Para usar un camino formal usamos la prueba Chi Cuadrado, que tiene por hipótesis nula (Ho) es que ambas son independientes (no hay asociación).
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-valor es significativo (0.05), se rechaza la H0. En este caso, se sigue aceptando que NO HAY asociación (la variable de la columna, no genera diferencias por fila).
Sin embargo, si la hubiera, no se sabe que tan intensa o fuerte es esa asociación. 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):
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:
Aqui plantearemos hipótesis entre DOS NUMERICAS.
Comencemos por gráficar la relación, suponiendo que MATH es la dependiente:
library(ggpubr)
p1=ggscatter(hsb,
x = "SCI", y = "MATH",
cor.coef = TRUE,
cor.method = "pearson") # spearman?
p1
Veamos otras independientes:
p2=ggscatter(hsb,
x = "LOCUS", y = "MATH",
cor.coef = TRUE,
cor.method = "pearson")
p2
p3=ggscatter(hsb,
x = "CONCPT", y = "MATH",
cor.coef = TRUE,
cor.method = "pearson")
p3
p4=ggscatter(hsb,
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)
normality(hsb[,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 menor a 0.05 (p valor), se rechaza la normalidad. De ahi que lo recomendable es mostrar al correlación de Spearman, por ejemplo:
s4=ggscatter(hsb,
x = "WRTG", y = "MATH",
cor.coef = TRUE,
cor.method = "spearman")
s4