Primero se carga el paquete tibble, el cual permite consturir data frames de forma más versatil que la función data.frame(), nativa de R.
Como segundo paso, se crea el data frame conocido como tibble. Nótese que la función no es tibble, es tribble
Nota. La virgulilla ~ indica que se trata de un nombre del vector (variable). Véase como el nombre va entre comillas porque se trata de un nombre que tiene espacios en blanco: PREGUNTA 1
library(tibble)
z <- tribble(~ folio, ~"PREGUNTA 1", ~"PREGUNTA 2", ~"PREGUNTA 10", ~"GRADO PREGUNTA 1", ~"GRADO PREGUNTA 2", ~"GRADO PREGUNTA 10",
1, "a", "b", "c", NA, NA, NA,
2, "", "c", "d", 1, 2, NA,
3, "c", "d", "e", 1, 2, NA)
z
En el recien creado tibble, la variable g3 tiene formato lgl que significa logical, es decir el tipo de variable es logico: TRUE (VERDADERO), FALSE (FALSO). Así que para cambiar esta variable a double o númerica utilizamos el comando as.numeric. Obsérvese que se hace referencia al nombre de la variable GRADO_PREGUNTA 10 del data frame z utilizando un corchete doble; esa es la forma de referirnos a un elemento dentor de un data frame, porque tiene 2 dimensiones: renglones y columnas. Adicionalmente, cuando usamos el doble corchete estamos indicando a R que queremos utilizar el formato de esa columna, en este caso, un vector de tipo caracter y no un objeto list, el cual no puede ser convertido a un vector numérico.
z[[7]] <- as.numeric(z$"GRADO PREGUNTA 10")
z
El objetivo de ordenar los datos (tidy data) es poner todas las variables que contienen preguntas: PREGUNA 1 a PREGUNTA 10, en una sola columna y hacer lo mismo con sus calificaciones de grado: GRADO_PREGUNTA 1 a GRADO_PREGUNTA 10. Por supuesto, cada palabra con su respectiva calificación: PREGUNTA 1 con GRADO_PREGUNTA 1, PREGUNTA 2 con GRADO_PREGUNTA 2, y así sucesivamente.
Primero hay que cargar la libreria, en este caso se usa el paquete tidyverse (recordemos que tidyverse es un conjunto de programas), que incluye el paquete tidyr, el cual contiene la función gather. Una vez cargada la libreria, se usa dicha función para formar todas las columnas en una sola.
library(tidyverse)
z2 <- z %>%
gather(col = "PREGUNTA 1":"GRADO PREGUNTA 10", key = "preguntas", value = "respuestas")
z2
Esta maniobra nos permitirá separar del nombre de la variable (v.gr. PREGUNTA 1) su índice o número que señala el orden de pregunta.
Se utiliza la función extract que fue para después relacionarlo con las desu mismo índice obtener el número de preguntaordenar las variables en un par de columnas de acuerdo a su correspondencia; en lugar de en una sola, como están en este momento. Para ello se va a utilizar posteriormente la función spread
z3 <- z2 %>%
extract(col = "preguntas", into = c("preguntas", "indice_de_pregunta"),
regex = "(.*)\\s([[:digit:]]+)")
z3
Esta maniobra nos permitirá ordenar las variables en un par de columnas de acuerdo a su correspondencia; en lugar de en una sola, como están en este momento. Para ello se va a utilizar posteriormente la función spread
Vamos a pasar de una sola columna preguntas a dos columnas distintas, pero relacionadas, utilizando la función spread
z4 <- z3 %>%
spread(key = preguntas, value = respuestas, convert = TRUE)
z4
El primer paso es invertir las calificaciones de importancias, en este caso es la variable GRADO PALABRA. Al número 1 le asignamos el 10, al 2 le asignamos el 9, al 3 el 8, y así sucecivamente. En lugar de recodificar los valores, como suele hacerse, utilizaremos un truco que consiste en restarle a la escala original el máximo número de la escala más 1, en este caso el número que restaremos será 11 a la columna vector que contiene la importancia GRADO PALABRA.
library(tidyverse)
rsn.df <- read_csv("rsn.csv")
rsn.df$`GRADO PALABRA` <- 11 - rsn.df$`GRADO PALABRA`
Se utiliza la función count de Dplyr que me cuenta por grupos. En este ejemplo cuenta por cada red y grupo de edad; al final pondera por el grado de palabra y ordena, lo cual nos ayuda a ver que término o palabra fua la más mencionada.
rsn_edad.df <- rsn.df %>%
count(RED, EDAD_RNG, PALABRA, wt = `GRADO PALABRA`, sort = T)
La distancia semántica de una plabra se calcula dividiendo su peso semántico entre el peso semántico máximo que haya alcanzado cualquier palabra dentro del grupo de análisis.
rsn_edad.df <- rsn_edad.df %>%
group_by(RED, EDAD_RNG) %>%
mutate(DISTANCIA = n/max(n)) %>%
ungroup
Se utiliza el paquete ggplot2, muy porbablemente es el más popular para graficar en R.
Debido a que se utilizará una gráfica de radar, también llamada de telaraña o polar, necesitamos que las distancia semánticas sean menores conforme más se asocian al concepto. El método que usamos para lograrlo es muy sencillo; restamos 1 a la distancia que obtuvo la palabra. Así la palabra con el cociente 1 tendrá cero distancia del concepto; mientras que la palabra con un cociente cercano a cero tendrá una distancia de casi 1. Para hacer mucho más entendible esta distancia la convertiremos en porcentajes multiplicando el resultado por 100.
rsn_edad.df
## # A tibble: 4,895 x 5
## RED EDAD_RNG PALABRA n DISTANCIA
## <chr> <chr> <chr> <dbl> <dbl>
## 1 justicia 16 a 29 igualdad 393 1.00
## 2 movimiento68 16 a 29 estudiantes 392 1.00
## 3 ciudadano 16 a 29 derechos 383 1.00
## 4 democracia 45-59 libertad 354 1.00
## 5 ciudadano 45-59 persona 333 1.00
## 6 movimiento68 16 a 29 injusticia 333 0.849
## 7 ciudadano 45-59 derechos 316 0.949
## 8 democracia 16 a 29 igualdad 315 1.00
## 9 movimiento68 45-59 injusticia 314 1.00
## 10 ciudadano 16 a 29 persona 312 0.815
## # ... with 4,885 more rows