Al comenzar siempre es importante establecer el idioma adecuado para que el programa reconozca caractreres especiales. En el caso de definir al idioma español, la instrucción a utilizar es:
Sys.setlocale("LC_ALL", "en_US.UTF-8")
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/C"
Sys.setenv(LANG = "spa")
También es importante instalar las librerías que se utilizarán posteriormente, que serán “tidyverse”, “PerformanceAnalytics”, “corrplot”, “haven”. Recuerden que lo primero por hacer con las librerías consiste en instalarlas, para lo que se utiliza el script install.packages("nombre de librería"), uno a la vez. Y posteriormente se activa cada librería con el comando library(nombre de librería).
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.3 ✓ purrr 0.3.4
## ✓ tibble 3.1.3 ✓ dplyr 1.0.7
## ✓ tidyr 1.1.3 ✓ stringr 1.4.0
## ✓ readr 2.0.1 ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(PerformanceAnalytics)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## Attaching package: 'xts'
## The following objects are masked from 'package:dplyr':
##
## first, last
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library(corrplot)
## corrplot 0.84 loaded
library(haven)
Además es muy relevante establecer la ubicación del directorio de trabajo, con el fin que el programa identifique el archivo del que extraerá y, también, guardará la información solicitada.
getwd() ##directorio actual
## [1] "/Users/Gustavo 1/Dropbox/R/Rmarkdown"
setwd("/Users/Gustavo 1/Dropbox/R") ##Esta permite cambiar y definir el directorio deseado
list.files() ##Esta permite enlistas los archivos dentro del directorio
## [1] "_f33dc7a6f28c9f1b7593f7d02d195d31_intro_to_data_Coursera.html"
## [2] "200613COVID19MEXICO.csv"
## [3] "api13.1.dta"
## [4] "apilog.dta"
## [5] "autoestima.csv"
## [6] "avgpm25.csv"
## [7] "Base Voto x Mujeres Experimento 1 copia.csv"
## [8] "base_alternancias.csv"
## [9] "Base_datos_Informe_Pais.xlsx"
## [10] "base_municipios_final_datos_01.csv"
## [11] "base_voto_mujeres_2012_2018.csv"
## [12] "base_votos_2015_2018.csv"
## [13] "Bertrand_data.dta"
## [14] "Card and Krueger (1994).dta"
## [15] "Clase 2 DGAPA.xlsx"
## [16] "Clase 4 DGAPA.xlsx"
## [17] "Componente principal SPP.jpeg"
## [18] "Concentrado_Elecciones_Federales_1976_2018 copia.csv"
## [19] "concentrado.csv"
## [20] "concentradohogar 1.dta"
## [21] "concentradohogar.dta"
## [22] "concentradohogardia3.dta"
## [23] "conejos.csv"
## [24] "Copia de factorial 3x2x2.csv"
## [25] "copia_semillas.csv"
## [26] "cuadro_latino.csv"
## [27] "Curso Intro a R I y II"
## [28] "curso_data_ibero"
## [29] "data_clientelismo.csv"
## [30] "data_clientelismo.dta"
## [31] "datos_2_fac_aleat.csv"
## [32] "datos_computos_distritos_diputado.txt"
## [33] "datos_covid1.txt"
## [34] "datos_covid2.csv"
## [35] "datos_covid3.xlsx"
## [36] "datos_gc.csv"
## [37] "datos_morena_frag.xlsx"
## [38] "datos_repeticiones.csv"
## [39] "datos_telas.csv"
## [40] "datosgen.txt"
## [41] "Dee.dta"
## [42] "diccionario_datos_covid19"
## [43] "Diferencia_votos_DIP_FED_2015.csv"
## [44] "diminish.txt"
## [45] "ENCOVID_19_abril"
## [46] "encuesta_abierta_morena_2020.xlsx"
## [47] "Encuesta_Gea.dta"
## [48] "encuesta_nina_w_ 2016"
## [49] "enpol_sec_5_6.csv"
## [50] "enpol_sec7_1.csv"
## [51] "enpol_sec8_9_10.csv"
## [52] "experim_azucar.csv"
## [53] "figura1pulpo.csv"
## [54] "guia_ponencia_morena.docx"
## [55] "ICI_2018.xlsx"
## [56] "idh_mpio_2000_2005.csv"
## [57] "idh_mpio_2000_2005.xls"
## [58] "indices_spp_subnacional_1980_2018.xlsx"
## [59] "jerarquico_cruzado.csv"
## [60] "Latinobarometro_2018_Esp_Spss_v20190303.sav"
## [61] "Latinobarometro_2018_Esp_Stata_v20190303.dta"
## [62] "Latinobarometro2016Esp_v20170205.dta"
## [63] "mediciones_repetidas.csv"
## [64] "Mi_Exportación.xlsx"
## [65] "modelo_jerarquico.csv"
## [66] "morena_nueva_encuesta_2020.xlsx"
## [67] "morena-bd-integrada-estimación-empresas.xlsx"
## [68] "NES96.dta"
## [69] "partylevel_20130907.csv"
## [70] "presid06computo.dta"
## [71] "Principal Component Analysis R Program and Output.pdf"
## [72] "rdrobust_senate.dta"
## [73] "resultados_diputadosfederales_2018.csv"
## [74] "Rmarkdown"
## [75] "rubiaprom.csv"
## [76] "scripts"
## [77] "SDEMT319_10.dta"
## [78] "sdemt319_10.sav"
## [79] "SDEMT319.dta"
## [80] "Tabasco_votos_dip_loc_2018_dif.csv"
## [81] "tarea_hipertension.csv"
## [82] "TiposErrores.png"
## [83] "Voto electronico.csv"
## [84] "voto_cand_socioec_2012.csv"
## [85] "voto_cand_socioec_2015.csv"
## [86] "voto_cand_socioec_2018.csv"
## [87] "votos_diputados_2015.csv"
## [88] "votos_mujeres_2012_2018_copia.csv"
## [89] "votos_mujeres_2012_2018.csv"
Una vez establecido el directorio de trabajo, se debe cargar la base de datos o data frame en el ambiente del programa, con el que se analizará la información. Para ello habrá que “cargar” la información sobre el Índice de Desarrollo Humado elaborado por el Programa de las Naciones Unidas para el Desarrollo para el caso de México, medido a nivel municipal y que contiene información para los años 2000 y 2005.
datos_idh <- read.csv("/Users/Gustavo 1/Dropbox/R/idh_mpio_2000_2005.csv", header = TRUE) #ruta de acceso a los datos, 'header = TRUE' en caso de que el archivo cuente con nombres de las variables.
El análisis de la asociación entre variables de tipo continua (ya sea que se trate de escalas de intervalo o razón) se apoya en técnicas estadísticas diferentes a las utilizadas para el análisis de datos categóricos.
Al analizar la relación existente entre variables mediante técnicas bivariadas, es importante distinguir que el análisis de la asociación es conceptualmente distinto del estudio del efecto causal. Esto a su vez supone el uso de técnicas diferentes, también.
El análisis del efecto causal es una medida de la causalidad (KKV, 1997), en donde se evalúa la influencia de una variable independiente (X) sobre una variable dependiente (Y). Sin embargo la dirección de esta influencia X -> Y no es la misma en el sentido inverso X <- Y.
En cambio, el análisis de la asociación estadística entre dos variables no es una manera de observar la causalidad, en cambio se considera parte de los estudios descriptivos. En todo caso, el análisis de la asociación permite describir inicialmente la relación existente entre dos variables, pero se asume que no se puede conocer (aún) la dirección de la influencia. Esto es, en el análisis de la asociación se reconoce que la relación calculada entre X - Y, será la misma entre Y - X, y por tanto no se puede conocer cuál es la causa y cuál es el efecto.
El estudio de la asociación bivariada también está sujeto a la intervención de variables intervinientes (Z) no observadas que, en ocasiones, pueden mediar entre la relación X - Y. Esto puede dar pie a la identificación de correlaciones espúreas.
Una primera aproximación descriptiva a la evaluación de la correlación de dos variables continuas es a partir de graficar su asociación. Para ello es útil el diagrama de dispersión, en el que cada par de datos o coordenadas de las variables representadas, se traduce en un punto dentro de la gráfica.
A continuación revisaremos la asociación existente entre la tasa de mortalidad infantil y el ingreso per cápita (medido en dólares), ambos registrados para el año 2005. Para ello se utilizará el script pairs(var_1, var_2) del sistema base de R:
pairs(datos_idh$tasa_mortalidad_infantil_2005 ~ datos_idh$usd_ppc_2005)
Otra manera de visualizar la dispersión de ambas variables, a la vez que se arroja más información sobre la distribución de las variables es mediante el script chart.Correlation(objeto, histogram = TRUE, method = "pearson"), que es parte de la librería PerformanceAnalytics. Pero dicho comando requiere trabajar con un objeto tipo matriz. Por ello primero se construirá un objeto tipo matriz con las variables de interés, y después se cargará dicho objeto al comando de interés, de la siguiente forma:
dat_cor <- data.frame(datos_idh$tasa_mortalidad_infantil_2005,
datos_idh$usd_ppc_2005) #se crea un objeto del tipo data frame con las variables de interés
chart.Correlation(dat_cor, #aquí se carga el objeto tipo matriz
histogram = TRUE, #se acepta la elaboración de histograma
method = "pearson") #se define el método estadístico para calcular la correlación
En esta última gráfica se puede observar el histograma de distribución para cada una de las variables, en la que se observa si ésta tiende a comportarse parecida a una curva de distribución normal. También se observa el gráfico de dispersión bivariado, en donde se identifica la dirección de la correlación y, a su vez, se calcula el valor del coeficiente de correlación de Pearson (\(r\)), con el que se confirma la dirección de la asociación y, además, se mide la fuerza de dicha relación entre las variables analizadas.
En la situación del análisis bivariado de variables continuas, el análisis de correlación es la técnica que permite identificar varios aspectos de la asociación existente entre las variables analizadas.
El Coeficiente de Correlación de Pearson (representado por \(r\)) es tanto una técnica así como un estadístico de prueba en sí mismo (Salkind, 2013). “El Coeficiente de Correlación de Pearson es un estadístico paramétrico cuya aplicación es adecuada cuando las observaciones, de unidades maestreadas aleatoriamente, están medidas en escalas de intervalos. Se asume que ambas variables tienen una distribución aproximadamente normal, o sea, distribución normal bivariante” (Ramírez-Alán, 2017).
El coeficiente \(r\) ofrece información sobre dos dimensiones de la asociación entre las variables:
Por un lado el signo del coeficiente \(r\) indica el sentido de la asociación. Si el signo es positivo (\(+r\)) entonces la asociación bivariada es directa, de manera que a medida que una variable aumenta también lo hace la otra variable. Si el signo es negativo (\(-r\)), la asociación es indirecta, lo que indica que si una variable tiende a incrementarse entonces la otra tiende a reducirse.
Por otro lado, el valor absoluto numérico del coeficiente \(r\) indica la fuerza de la asociación. Los valores posibles de \(r\) se encuentran dentro del rango que va de 0 a 1 (\(0<|r|<1\)). A medida que el valor absoluto de \(r\) (\(|r|\)) se acerca a 0, se indica que la asociación bivariada es débil o nula, mientras que cuando es más próxima a 1 se indica que la asociación es más fuerte.
La manera de interpretar la asociación entre dos variables X y Y, en la que se conoce el valor de su coeficiente de correlación (\(r\)) permite inferir que “a medida que una variable se incrementa en 1 unidad, la otra se moverá en una proporción de \(r\)”.
En el caso de un coeficiente \(|r|=1\) se indica que la asociación entre ambas variables es directamente proporcional y del tipo lineal, pues en la medida en que una variable se incrementa en una unidad, también se incrementará la otra variable en una unidad.
La relación existente entre el coeficiente \(r\) y la revisión gráfica de dispersión de los datos sigue la siguiente lógica: en el caso ideal de que \(r\) adopte un valor igual a 1, se considera que la distribución de ambas variables se comportaría como una línea recta con una pendiente de 45 grados.
Cuando \(|r| = 0\) se indica que la asociación es nula entre ambas variables, o que aún cuando una variable tienda a variar, la otra variable se mantendrá constante.
De manera cualitativa, la fuerza de la correlación se puede interpretar de la siguiente manera:
| Rangos de r | Grado de la asociación |
|---|---|
| 0 - .20 | Débil / Sin relación |
| 0.20 - 0.40 | Baja |
| 0.40 - 0.60 | Moderada |
| 0.60 - 0.80 | Fuerte |
| 0.80 - 1 | Muy fuerte |
El cálculo del *Coeficiente de Correlación de Pearson** (\(r\)) se puede obtener de diversas formas en R. Por ejemplo, en la gráfica anterior generada por el script chart.Correlation() se calculó por default el valor de \(r\). Y a medida que aumenta el tamaño de la tipografía, se indica mayor fuerza de la asociación.
La forma base de R para calcular el coeficiente de correlación de Pearson es mediante la función cor(y, x).
cor(datos_idh$tasa_mortalidad_infantil_2005, #variable 1
datos_idh$usd_ppc_2005, #variable 2
use = "complete.obs") #este comando permite excluir los valores perdidos y evita que se bloquée el análisis
## [1] -0.6342151
En esta opción, el programa arroja solamente el valor de \(r\), del que se obtienen dos datos: el signo del coeficiente y el valor absoluto del mismo.
Hasta aquí, el cálculo de \(r\) permite describir el sentido y la fuerza de la asociación existente entre dos variables, de manera que aún el análisis aún se encuentra en el ámbito descriptivo.
Una vez calculado el valor del coeficiente \(r\) se conocen las características de la asociación bivariada. Sin embargo hasta el momento no se puede saber si dicha correlación solo ocurre dentro de los datos de la muestra con la que se está trabajando o si esta magnitud de la asociación también permite conocer su comportamiento en la población de la que se extrajo la muestra.
Con el fin de realizar el proceso de inferencia estadística del valor obtenido del coeficiente \(r\) es necesario evaluar la significancia estadística a partir de calcular el valor del estadístico de prueba y su probabilidad asociada. Para ello se parte de establecer que la H0 parte de asumir la independencia de ambas variables entre sí, o en términos del coeficiente de correlación de Pearson se plantea que \(r = 0\), mientras que la Ha consiste en el valor obtenido de \(r\) previamente.
El estadístico de prueba utilizado, si bien consiste en el mismo coeficiente \(r\), también se asume que este tiene un comportamiento parecido al estadístico \(t-Student\). Y de manera que éste último es más conocido en cuanto a su distribución de probabilidad, éste será el estadístico de prueba que se usa en las pruebas de significancia estadística del coeficiente \(r\). El cálculo de la significancia estadística de \(r\) se apoya en la función cor.test().
cor.test(datos_idh $ tasa_mortalidad_infantil_2005,
datos_idh $ usd_ppc_2005)
##
## Pearson's product-moment correlation
##
## data: datos_idh$tasa_mortalidad_infantil_2005 and datos_idh$usd_ppc_2005
## t = -40.619, df = 2452, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.6572889 -0.6099533
## sample estimates:
## cor
## -0.6342151
La información que arroja dicha prueba consiste en: i. el valor de \(r\) que es de -0.6342151, ii. el valor del estadístico de prueba \(t\), de -40.619, iii. los grados de libertad para las variables analizadas, df = 2454, y iv. el p-valor de la hipótesis nula, que es de p-value < 2.2e-16, v. el Intervalo de Confianza con un nivel de confianza del 95%, donde el límite inferior es de -0.6572889 y el límite superior es de -0.6099533 unidades de \(r\).
Estos elementos permiten evaluar la significancia estadística del coeficiente obtenido y, así, decidir si este valor nos ofrece elementos para generalizarlo hacia la población de estudio. A partir del p-value (que es menor a un valor alfa = 0.05) y de los valores del intervalo de confianza (que no cruzan al valor de 0), se puede tomar una decisión sobre la H0, que aquí consiste en rechazarla y, entonces, aceptar que el valor de la asociación entre ambas variables de \(r\) = -0.6342151 no solo para los datos en la muestra sino que, también, se puede generalizar al resto de la población (o municipios del país).
El cálculo del coeficiente de correlación de Pearson (\(r\)) si bien es una prueba bivariada, esto supone que trabaja con pares de variables, también se pueden realizar análisis bivariados para más de dos variables a la vez. Al final el análisis de correlación permite generar diversos valores de coeficientes \(r\) para cada par de variables que se puedan armar en un análisis.
En general, las funciones vistas hasta ahora para el análisis de la correlación también pueden ser aplicadas para más de dos variables a la vez. Para ello se deben realizar algunos acomodos de las variables previamente.
Primero se debe crear un objeto nuevo que involucre a las variables de interés:
df_cor2 <- datos_idh %>%
select(tasa_mortalidad_infantil_2005,
tasa_alfabetizacion_2005,
tasa_asistencia_escolar_2005,
usd_ppc_2005)
Posteriormente se crea la matriz de correlaciones utilizando la función base para el cálculo del valor del coeficiente \(r\).
cor(df_cor2)
## tasa_mortalidad_infantil_2005
## tasa_mortalidad_infantil_2005 1.0000000
## tasa_alfabetizacion_2005 -0.6736789
## tasa_asistencia_escolar_2005 -0.3372782
## usd_ppc_2005 -0.6342151
## tasa_alfabetizacion_2005
## tasa_mortalidad_infantil_2005 -0.6736789
## tasa_alfabetizacion_2005 1.0000000
## tasa_asistencia_escolar_2005 0.1688678
## usd_ppc_2005 0.6340267
## tasa_asistencia_escolar_2005 usd_ppc_2005
## tasa_mortalidad_infantil_2005 -0.3372782 -0.6342151
## tasa_alfabetizacion_2005 0.1688678 0.6340267
## tasa_asistencia_escolar_2005 1.0000000 0.1662611
## usd_ppc_2005 0.1662611 1.0000000
Debido a que los nombres de las variables son largos, la matriz de correlaciones no es muy clara para visualizar. Para ello se modificarán los nombres de las variables con el comando dplyr :: rename(), con el fin de reducir su extensión y mejorar la revisión de la información.
df_cor2 <- df_cor2 %>%
rename(mort_05 = tasa_mortalidad_infantil_2005,
alfab_05 = tasa_alfabetizacion_2005,
esco_05 = tasa_asistencia_escolar_2005,
usd_05 = usd_ppc_2005)
Y se llama de nuevo a la matriz de correlaciones:
cor(df_cor2)
## mort_05 alfab_05 esco_05 usd_05
## mort_05 1.0000000 -0.6736789 -0.3372782 -0.6342151
## alfab_05 -0.6736789 1.0000000 0.1688678 0.6340267
## esco_05 -0.3372782 0.1688678 1.0000000 0.1662611
## usd_05 -0.6342151 0.6340267 0.1662611 1.0000000
Otra forma de generar la matriz de correlaciones, con mayor información sobre el comportamiento de las variables de manera indivudal y sus asociaciones, es mediante chart.Correlation().
chart.Correlation(df_cor2)
En dicha matriz se observan los valores del coeficiente \(r\) para cada cruce de pares de variables. Cuando en un cruce se mide la asociación de la misma variable consigo misma, el valor del coeficiente será igual a 1. Asimismo dicha matriz es de tipo espejo, lo que supone que los datos que se encuentran en la diagonal superior al eje de los valores de \(r=1\) serán los mismos que se ubican en la parte inferior.
###2.4. Matriz de correlaciones con corrplot()
Otra manera, visualmente más amigable, se apoya en el paquete corrplot(), en el que se encuentran diversas funciones para generar gráficos de dispersión y cálculos de \(r\).
Para utilizar las funciones del paquete corrplot:: se debe tener presente que los datos deben estar ordenados en una matriz, para ello primero se debe re organizar la información. En este caso se crea un objeto con las correlaciones entre las variables de interés.
mat_cor <- cor(df_cor2) #los valores de las correlaciones se guardan como objeto
Posteriormente a dicho objeto se le aplican las funciones del paquete para, por un lado, generar una matriz de correlaciones.
corrplot(mat_cor, #objeto en formato matriz
method = "number") #método para visualizar la información
En dicha matriz, las correlaciones directas se señalan en color azul mientras que las asociaciones indirectas están en color rojo. Y a medida que el valor absoluto de la correlación se acerca a uno, el color del número adquiere una tonalidad más intensa o marcada, y viceversa es más tenue.
Otra manera visual de generar una matriz de correlaciones consiste en una combinación de los valores de \(r\) para cada cruce de variables aunado a una representación gráfica de la asociación.
corrplot.mixed(mat_cor)
Además existe una manera para generar una matriz de correlaciones o correlograma en el que se marquen las significancias estadísticas según el nivel de confianza y el nivel de significancia establecido por el analista.
Para ello, primero se genera un objeto lista en el que se calcula el p-valor para cada coeficiente \(r\) dentro de la matriz de correlaciones.
significancia1<- cor.mtest(mat_cor, #objeto matriz de correlaciones
conf.level = .95) #definición del nivel de confianza
Posteriormente se genera el correlograma en el que se incluyen los p-valores para cada coeficiente \(r\), y se indica el nivel de significancia estadística (\(\alpha\)) para evaluar la HO en cada celda.
corrplot(mat_cor, #objeto matriz de correlaciones
p.mat = significancia1$p, #llamado del p-valor para cada coeficiente r
sig.level = 0.05) #definición del nivel de significancia
La información adicional que arroja esta gráfica consiste en señalar las correlaciones que son estadísticamente significativas, en función del nivel de significancia previamente establecido. Las correlaciones que no son estadísticamente significativas son tachadas por el software.
Página de consulta sobre “corrplot” https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html