Facultad de Derecho y Ciencia Politica

Escuela de Ciencia Política

Guia de Clase de ESTADISTICA


Exploración Bivariada (parte 2)

1. Carga de data:

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)

2. EXPLOREMOS

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

2. PRE PROCESAMIENTO:

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

c. Tipo 2: CAT - CAT

Aqui plantearemos hipótesis entre DOS CATEGÓRICAS.

  • HIPOTESIS NULA o H0: Las variables no tiene relación.

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):

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

c. Tipo 3: NUM - NUM

Aqui 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(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