se utiliza para variables ordinales y/o cuando se se violan supuestos de distribución normal
es equivalente a la correlación de Pearson del ranking de las observaciones analizadas
es alta cuando las observaciones tienen un ranking similar
se le asigna un número de ranking a cada valor
el valor más bajo obtiene el mayor ranking, y el más alto el menor
en caso de valores repetidos se produce un "empate", y entonces el ranking se promedia.
data$educ
[1] 2 3 4 4 5 7 8 8
Como estos valores están ordenados de menor a mayor, entonces en principio los valores de ranking serían:
8 7 6 5 4 3 2 1
.
Pero, hay un par de empates
el valor 4 está repetido y corresponden a los ranking 6 y 5, por lo tanto a ambos se les asigna el promedio de estos rankings: 5,5
lo mismo sucede con el valor 8 en los rankings 2 y 1, por lo tanto a ambos se les asigna el valor 1,5
data
id educ ing mean_educ dif_m_educ dif_m_educ2 mean_ing dif_m_ing1 1 2 1 5.125 -3.125 9.765625 5.375 -4.3752 2 3 3 5.125 -2.125 4.515625 5.375 -2.3753 3 4 3 5.125 -1.125 1.265625 5.375 -2.3754 4 4 5 5.125 -1.125 1.265625 5.375 -0.3755 5 5 4 5.125 -0.125 0.015625 5.375 -1.3756 6 7 7 5.125 1.875 3.515625 5.375 1.6257 7 8 9 5.125 2.875 8.265625 5.375 3.6258 8 8 11 5.125 2.875 8.265625 5.375 5.625 dif_m_ing2 dif_xy predict1 19.140625 13.671875 1.02 5.640625 5.046875 2.43 5.640625 2.671875 3.84 0.140625 0.421875 3.85 1.890625 0.171875 5.26 2.640625 3.046875 8.07 13.140625 10.421875 9.48 31.640625 16.171875 9.4
data %>% select (educ, ing)
educ ing1 2 12 3 33 4 34 4 55 5 46 7 77 8 98 8 11
data %>% select (educ, ing) %>% mutate(., educ_rank=c(8,7,5.5,5.5,4,3,1.5,1.5))
educ ing educ_rank1 2 1 8.02 3 3 7.03 4 3 5.54 4 5 5.55 5 4 4.06 7 7 3.07 8 9 1.58 8 11 1.5
data %>% select (educ, ing) %>% mutate(., educ_rank=c(8,7,5.5,5.5,4,3,1.5,1.5)) %>% mutate(., ing_rank=c(8,6.5,6.5,4,5,3,2,1))
educ ing educ_rank ing_rank1 2 1 8.0 8.02 3 3 7.0 6.53 4 3 5.5 6.54 4 5 5.5 4.05 5 4 4.0 5.06 7 7 3.0 3.07 8 9 1.5 2.08 8 11 1.5 1.0
data %>% select (educ, ing) %>% mutate(., educ_rank=c(8,7,5.5,5.5,4,3,1.5,1.5)) %>% mutate(., ing_rank=c(8,6.5,6.5,4,5,3,2,1))cor(data_spr$educ_rank, data_spr$ing_rank)
educ ing educ_rank ing_rank1 2 1 8.0 8.02 3 3 7.0 6.53 4 3 5.5 6.54 4 5 5.5 4.05 5 4 4.0 5.06 7 7 3.0 3.07 8 9 1.5 2.08 8 11 1.5 1.0
[1] 0.9394112
Cálculo directo en R
:
cor.test(data$educ, data$ing, "two.sided", "spearman")
Spearman's rank correlation rhodata: data$educ and data$ingS = 5.0895, p-value = 0.0005311alternative hypothesis: true rho is not equal to 0sample estimates: rho 0.9394112
Recomendado cuando hay un set de datos pequeños y/o cuando hay mucha repetición de observaciones en el mismo ranking
Se basa en una comparación de pares de observaciones concordantes y discordantes
Recomendado cuando hay un set de datos pequeños y/o cuando hay mucha repetición de observaciones en el mismo ranking
Se basa en una comparación de pares de observaciones concordantes y discordantes
En R
:
cor.test(data$educ, data$ing, "two.sided", "kendall")
Kendall's rank correlation taudata: data$educ and data$ingz = 2.9115, p-value = 0.003597alternative hypothesis: true tau is not equal to 0sample estimates: tau 0.8680791
Pearson es el coeficiente de correlación por defecto
En caso de datos en escala de medición ordinal se puede aplicar Spearman (aunque Pearson es también aceptado en este contexto).
Kendall se reporta en casos muy específicos donde hay un set de datos pequeños y repetición de observaciones en el mismo ranking ("empates")
data$edad <- c(50, 65, 27, 15, 40, 22, 25, 38)
Tenemos 3 variables, y por lo tanto los siguentes pares de correlaciones posibles: ingreso-educación, ingreso-edad, y educación-edad
cor_mat <- data
cor_mat <- data %>% select(educ, ing, edad)
cor_mat <- data %>% select(educ, ing, edad) %>% cor(.)
cor_mat <- data %>% select(educ, ing, edad) %>% cor(.)cor_mat
educ ing edadeduc 1.0000000 0.9512367 -0.4704649ing 0.9512367 1.0000000 -0.4058455edad -0.4704649 -0.4058455 1.0000000
cor_mat <- data %>% select(educ, ing, edad) %>% cor(.)cor_matround(cor_mat, 3)
educ ing edadeduc 1.0000000 0.9512367 -0.4704649ing 0.9512367 1.0000000 -0.4058455edad -0.4704649 -0.4058455 1.0000000
educ ing edadeduc 1.000 0.951 -0.470ing 0.951 1.000 -0.406edad -0.470 -0.406 1.000
cor_mat <- data %>% select(educ, ing, edad) %>% cor(.)cor_matround(cor_mat, 3)sjPlot::tab_corr(cor_mat)
educ ing edadeduc 1.0000000 0.9512367 -0.4704649ing 0.9512367 1.0000000 -0.4058455edad -0.4704649 -0.4058455 1.0000000
educ ing edadeduc 1.000 0.951 -0.470ing 0.951 1.000 -0.406edad -0.470 -0.406 1.000
educ | ing | edad | |
---|---|---|---|
educ | 0.951 | -0.470 | |
ing | 0.951 | -0.406 | |
edad | -0.470 | -0.406 | |
Computed correlation used pearson-method with listwise-deletion. |
tabla de doble entrada donde las variables se presentan tanto en las filas como en las columnas
el coeficiente de correlación correspondiente al par de variables aparece en la intersección de las columnas
tabla de doble entrada donde las variables se presentan tanto en las filas como en las columnas
el coeficiente de correlación correspondiente al par de variables aparece en la intersección de las columnas
existe información redundante
sjPlot::tab_corr(cor_mat, triangle = "lower", title = "Tabla de correlaciones del ejemplo" )
educ | ing | edad | |
---|---|---|---|
educ | |||
ing | 0.951 | ||
edad | -0.470 | -0.406 | |
Computed correlation used pearson-method with listwise-deletion. |
library(corrplot)
library(corrplot)corrplot(cor_mat)
corrplot(cor_mat, method = 'number')
corrplot(cor_mat, method = 'number', type = 'lower', number.cex = 3, tl.cex = 3, diag = FALSE)
corrplot.mixed(cor_mat, lower = "number", upper = "circle", number.cex = 3, tl.cex = 3, diag = "n")
corrplot(cor_mat, type = "lower", addCoef.col = 'white', number.cex = 3, tl.cex = 3, diag = FALSE)
corrplot(cor_mat, type = "lower", addCoef.col = 'white', number.cex = 3, tl.cex = 3, diag = FALSE, method = 'square')
Cuando hay casos perdidos en las variables, ¿cuál es el número de casos de la matriz de correlaciones?
Las correlaciones bivariadas se calculan con información completa, por lo tanto si hay un dato perdido en una de las variables se elimina el caso completo
Algunas funciones lo hacen de manera automática, en otras hay que especificarlo previamente
Agreguemos un caso perdido (NA en R) a una de nuestras variables
data$edad
[1] 50 65 27 15 40 22 25 38
data$edad <-replace(data$edad, data$edad==15, NA)data$edad
[1] 50 65 27 NA 40 22 25 38
cormat_NA <- data %>% select(educ, ing, edad) %>% cor(.)round(cormat_NA,3)
educ ing edadeduc 1.000 0.951 NAing 0.951 1.000 NAedad NA NA 1
cormat_listwise <- data %>% select(educ, ing, edad) %>% cor(., use = "complete.obs")round(cormat_listwise, 3)
educ ing edadeduc 1.000 0.962 -0.669ing 0.962 1.000 -0.494edad -0.669 -0.494 1.000
las correlaciones bivariadas requieren eliminación de casos perdidos tipo listwise, es decir, si hay un dato perdido en una variable se pierde el caso completo
Para conocer el número de casos con que se calculó la matriz:
sum(complete.cases(data))
[1] 7
Por lo tanto, en el cálculo se perdió el caso o fila completa de la base (de 8 casos) que tenía el caso perdido.
en el caso de las matrices de correlaciones es posible tomar la opción pairwise para casos perdidos
pairwise quiere decir que se eliminan los casos perdidos solo cuando afectan al cálculo de un par específico.
en el caso de nuestro ejemplo, si consideramos listwise todas las correlaciones tienen 7 casos, pero con pairwise la correlación entre educación e ingreso mantendría 8 casos.
por lo tanto, pairwise permite mayor rescate de información y mayor N en el cálculo de matrices de correlaciones
data %>% select(educ, ing, edad) %>% cor(., use = "pairwise")
educ ing edadeduc 1.0000000 0.9512367 -0.6693607ing 0.9512367 1.0000000 -0.4941732edad -0.6693607 -0.4941732 1.0000000
En este caso vemos una leve variación en el coeficiente comprometido (educ-ing) comparando listwise con pairwise
data %>% select(educ,ing,edad) %>% psych::pairwiseCount()
educ ing edadeduc 8 8 7ing 8 8 7edad 7 7 7
Se indica que en las correlaciones con edad se utilizaron 7 casos, mientras en la correlación entre ingreso y educación se utilizan 8 casos con el método pairwise
Para medir hechos observables simples usualmente se utiliza una pregunta (ej: edad)
Fenómenos complejos se miden en general con más de una pregunta, con el objetivo de dar mejor cuenta del atributo (i.e. minimizar error de medición)
en general las encuestas suelen incluir varias preguntas respecto de un mismo tema -> baterías de indicadores múltiples
cubren distintos aspectos de un mismo fenómeno complejo que no se agota en solo un indicador -> minimiza error de medición
en general las encuestas suelen incluir varias preguntas respecto de un mismo tema -> baterías de indicadores múltiples
cubren distintos aspectos de un mismo fenómeno complejo que no se agota en solo un indicador -> minimiza error de medición
problema: ¿cómo se analizan indicadores que están relacionados?¿cómo se muestran los resultados?
(likert plot,
sjPlot
)
2. Bivariado: tablas/gráficos de correlaciones
(corrplot
)
Se podría asumir un concepto o dimensión subyacente a la batería de items
Para facilitar el avance en el análisis (por ejemplo, relacionar ese concepto subyacente con otras variables), muchas veces se reduce la batería a algún tipo de índice (sumativo/promedio)
¿Podemos asegurar que los items están realmente midiendo lo mismo?
En este marco se asume que el indicador es distinto del atributo, y que la medición del atributo o variable latente conlleva error
Cuando la el atributo se mide con más de una pregunta, se puede intentar estimar la variable latente mediante índices o técnicas de análisis factorial
antes de agrupar indicadores en un índice hay que evaluar si los indicadores se encuentran relacionados
Matriz hipotética de indicadores que miden un mismo constructo
Matriz hipotética de indicadores que miden constructos independientes
Matriz hipotética de variables que miden dos constructos independientes
var | label | n | NA.prc | mean | sd | range | |
---|---|---|---|---|---|---|---|
2 | falthab | Razones pobreza falta de habilidad | 1228 | 1.365462 | 2.630293 | 1.254220 | 4 (1-5) |
3 | malasue | Razones pobreza mala suerte | 1227 | 1.445783 | 2.019560 | 1.140079 | 4 (1-5) |
1 | faltesf | Razones pobreza falta de esfuerzo | 1238 | 0.562249 | 3.155897 | 1.290758 | 4 (1-5) |
4 | sisecon | Razones pobreza sistema económico | 1218 | 2.168675 | 4.036946 | 1.095047 | 4 (1-5) |
5 | siseduc | Razones pobreza sistema educativo | 1227 | 1.445783 | 4.088835 | 1.088767 | 4 (1-5) |
cormat <- cor(data)cormat
falthab malasue faltesf sisecon siseducfalthab 1 NA NA NA NAmalasue NA 1 NA NA NAfaltesf NA NA 1 NA NAsisecon NA NA NA 1 NAsiseduc NA NA NA NA 1
Esta función no resulta ya que requiere que no existan casos perdidos
Entonces:
cormat <- cor(na.omit(data))cormat
falthab malasue faltesf sisecon siseducfalthab 1.000000000 0.31793357 0.36246039 -0.02787884 -0.005893529malasue 0.317933565 1.00000000 0.16936872 0.02755708 0.013865045faltesf 0.362460395 0.16936872 1.00000000 -0.06579454 -0.020114542sisecon -0.027878843 0.02755708 -0.06579454 1.00000000 0.593625639siseduc -0.005893529 0.01386504 -0.02011454 0.59362564 1.000000000
tab_corr(data)
Razones pobreza falta de habilidad | Razones pobreza mala suerte | Razones pobreza falta de esfuerzo | Razones pobreza sistema económico | Razones pobreza sistema educativo | |
---|---|---|---|---|---|
Razones pobreza falta de habilidad | 0.318*** | 0.362*** | -0.028 | -0.006 | |
Razones pobreza mala suerte | 0.318*** | 0.169*** | 0.028 | 0.014 | |
Razones pobreza falta de esfuerzo | 0.362*** | 0.169*** | -0.066* | -0.020 | |
Razones pobreza sistema económico | -0.028 | 0.028 | -0.066* | 0.594*** | |
Razones pobreza sistema educativo | -0.006 | 0.014 | -0.020 | 0.594*** | |
Computed correlation used pearson-method with listwise-deletion. |
corrplot(cormat)
corrplot::corrplot(cormat, method = "color", addCoef.col = "#000390", type = "upper", tl.col = "black", col=colorRampPalette(c("white","#0068DC"))(8), bg = "white", na.label = "-")
índice de consistencia interna de una batería
en general, interpretable como la correlación [absoluta] promedio entre distintas variables que componen una batería de medición
varía entre 0 y 1; valores más cercanos a 1 indican mayor consistencia
en general valores sobre 0.6 se consideran aceptables
funcion alpha de la librería psych
se genera un objeto (lo llamaremos alpha). Contiene bastante información, por ahora nos enfocaremos solo en el valor de alpha (raw_alpha
)
names(data)
[1] "falthab" "malasue" "faltesf" "sisecon" "siseduc"
alpha <-psych::alpha(data)
Some items ( falthab malasue faltesf ) were negatively correlated with the total scale and probably should be reversed. To do this, run the function again with the 'check.keys=TRUE' option
alpha$total$raw_alpha
[1] 0.4363206
puntaje 0.43, por lo tanto bajo los valores aceptables de consistencia interna
esto ya se podía anticipar desde la matriz de correlaciones, que aparentemente mostraba dos dimensiones subyacentes a la batería
además, se genera un mensaje de advertencia sobre posibles items codificados a la inversa (dada la correlación entre items de dimensiones distintas)
construcción de índices basados en la información de la matriz de correlaciones
análisis factorial
vamos a generar 2 índices a partir de esta batería: uno para atribución interna (falthab,faltesf,malasue) y otro para externa (sisecon,siseduc)
tema valores perdidos:
Indice de atribución interna y externa (promedios)
data <- cbind(data, "interna_prom"=rowMeans(data %>% select(falthab,faltesf,malasue), na.rm=TRUE))data <- cbind(data, "externa_prom"=rowMeans(data %>% select(sisecon,siseduc), na.rm=TRUE))names(data)
[1] "falthab" "malasue" "faltesf" "sisecon" [5] "siseduc" "interna_prom" "externa_prom"
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |