# Verify installation with a simple calculation
2 + 2[1] 4
El siguiente sitio web respalda los contenidos impartidos en la asignatura “Técnicas Multivariantes en Investigación de Mercados” y reproduce los cálculos estadísticos de las sesiones de organizadas dentro del máster oficial en Marketing e Investigación de mercados con R.
Así, este material organizado por sesiones, ayuda al alumno a …
Quarto (Allaire and Dervieux 2024).Este es un documento escrito en lenguaje markdown y compilado usando la tecnología de Quarto (Allaire and Dervieux 2024), gestionado todo ello como un proyecto de Quarto en RStudio.
Si crees que no conoces markdown, estás equivocado. Lo estás usando sin darte cuenta desde hace años en múltiples sitios, pero hay uno que seguro usas y nunca lo habías pensado: WhatsApp. Prueba en un mensaje a escribir **hola** y verás el efecto. Negrita!!! o también *hola*, Cursiva!!!
El lenguaje markdown combina texto con script que ejecutan procesos. Estos script se localizan dentro de unidades de código de ejecución que se llaman chunk y que si el autor lo desea, se publican con un fondo gris para que el usuario los reconozca como tales. Un chunk se inicia con ```{r} al principio de la línea y se finaliza con ``` al principio de la línea también. Las líneas que quedan en medio de ambos marcadores (denominados token), forman el script de R. Los token (símbolos) de inicio y final del script, no se publican.
Esto que parece algo sin importancia, para los investigadores modernos es un lujo, porque podremos escribir y combinar textos, cuadros, gráficos y muchas cosas más en el mismo documento. No es el objetivo del curso aprender R, Rstudio, Quarto o Markdown, pero seguro que cuando llegue diciembre, te darás cuenta de que lo has aprendido sobre la marcha. Tu objetivo es analizar datos, y estas serán tus herramientas.
Sin más preámbulos, vamos allá. Comenzamos nuestro viaje. Vamos a descubrir esas herramientas de trabajo.
Publicación realizada utilizando Quarto 1.9.38.
A diferencia de lo que suele ser habitual, y debido a las herramientas con las cuáles trabajamos, no vamos a disponer de las habituales diapositivas, sino que dispondremos de este sitio web donde se podrá ir alimentando toda la teoría y donde el alumno dispondrá de todos los materiales para poder trabajar.
Dirección de Proyectos de Análisis de Datos en TESI, doctor y profesor asociado en la Universitat de València (desde 1995), y en la Universidad Católica de Valencia (desde 2012).
Investigador y “blogger” en este sitio web InvestigaOnline.com.
Desde mis inicios en TESI, he tenido la gran suerte de poder ejercitar y desarrollar todo aquello que pensamos era necesario para que los investigadores de mercado pudieran trabajar eficazmente. Además he tenido la inmensa fortuna de conocer a lo más granado de la IM en nuestro país, a aquellos que han hecho de esta industria mi pasión con sus consejos, sugerencias y advertencias. He desarrollado en TESI labores de marketing, de analista y de formación hasta que me introduje en el desarrollo de software como el nexo de unión entre la producción y el cliente final. Y de ahí han ido surgiendo Barbwin, Integra con sus módulos CatiNet, CawiNet y MobiNet, y ahora SegmentaNet, plataforma de análisis de datos y reporte gráfico online. En la actualidad, vuelta al análisis de datos y a la búsqueda de soluciones de visualización en analítica de datos.
Pero mi inquietud por la formación no desapareció nunca, y desde 1995 estoy como profesor asociado en la Universitat de València, fundamentalmente ejerciendo la docencia en el ámbito de la Investigación de Mercados y de la Distribución Comercial. Ahora también en la Universidad Católica de Valencia, comenzando un nuevo proyecto de “seducir” a los alumnos con este mundo de la investigación de mercados.
Y cuando todo lo demás me lo permite, me dedico a alimentar este blog, donde dejo mis opiniones, con la intención de ayudar a todo aquel que quiera saber sobre el mundo de la investigación de mercados y de forma más específica sobre la investigación online.
Este es el primer curso en el que migramos de la utilización de una aplicación que tradicionalmente se ha usado para el análisis de datos, el SPSS, pero que en la actualidad cada vez más está siendo sustituida por otras herramientas más específicas y de código abierto (open source) que de forma gratuita permiten el uso y cálculo de las más sofisticadas técnicas de proceso estadístico y que además, está siendo requisito en muchas contrataciones en el ámbito del proceso de datos. Y lo que es más importante en vuestra etapa de formación, usaréis las herramientas más buscadas en los perfiles de analista actuales.
La asignatura se estructura en base a:
En esta primera sesión se acomete el trabajo básico de preparación del entorno de trabajo adecuado a nuestra necesidad de cálculo y escritura de informes:
Para comenzar la andadura en R son necesarias dos piezas fundamentales. R puede entenderse como el motor de un coche (realiza el trabajo duro: los cálculos y el análisis), mientras que RStudio es el panel de control o interfaz que permite la conducción el coche de forma cómoda.
El lenguaje R es gratuito y de código abierto. Esta es una de las razones por las que las empresas están apostando por él.
.pkg correspondiente a la versión de procesador (en un Mac con chip Apple Silicon M1/M2/M3, la versión arm64; en un Mac con procesador Intel, la versión x86_64).RStudio es el entorno de desarrollo que facilita enormemente el trabajo diario. Es un proyecto empresarial, pero gratuito, lo que complementa muy bien a R y a otros lenguajes de programación como Python, Julia, Observable …
Dar el salto a RStudio por primera vez puede parecer como sentarse en la cabina de un avión, sobre todo viniendo de la vista de datos tabular a la que acostumbran EXCEL / SPSS. Sin embargo, su diseño responde a una lógica clara y está pensado para facilitar el trabajo diario.
Al abrir RStudio y crear un nuevo script (mediante File > New File > R Script), la pantalla se divide en cuatro cuadrantes principales.
A continuación se describe cada uno de ellos:
Editor de Código (Source)
Es la mesa de trabajo principal: el lugar donde se escriben, editan y guardan los scripts (los archivos .R o los documentos .qmd de Quarto utilizados en esta asignatura).
Consola (Console)
Es el “motor” interactivo de R: el lugar donde el código se ejecuta y cobra vida realmente.
Entorno (Environment / History)
Es la “memoria RAM” visual de la sesión de trabajo. En SPSS los datos se mostraban en una sábana frontal; en R, los datos se almacenan en el entorno.
El resto … (Files / Plots / Packages / Help)
Este cuadrante es multiusos y resulta clave para la navegación y la visualización. Incluye varias pestañas de uso constante:
.sav, .csv).ggplot2 o expss), con la posibilidad de activarlas o actualizarlas desde aquí.?nombre_de_la_funcion en la consola para que la documentación oficial se abra en esta pestaña.Para evitar problemas futuros con la codificación de caracteres (especialmente con las tildes y la letra ñ), conviene configurar RStudio de la siguiente manera:
Para comprobar que todo se ha instalado correctamente, basta con abrir RStudio y localizar la Consola (la ventana de la izquierda o inferior izquierda), donde debería aparecer un texto de bienvenida con la versión de R.
Copiar y pegar la siguiente línea en la consola y pulsar Enter:
Si el resultado que aparece es [1] 4, el entorno de trabajo está listo para comenzar.
Es completamente normal encontrarse, al principio, con funciones cuyos parámetros resulten desconocidos o generen dudas. R dispone de un “botón de auxilio” integrado: al escribir un signo de interrogación ? pegado al nombre de cualquier función en la consola y pulsar Enter, se abre automáticamente la pestaña Help en el cuadrante inferior derecho de RStudio, con la documentación oficial, ejemplos de uso y detalles de los argumentos.
Por ejemplo, puede ejecutarse esta línea en la consola para comprobar cómo funciona el sistema de asistencia:
Antes de comenzar …
¿Qué es R?
R es un entorno y lenguaje de programación con un enfoque al análisis estadístico. R nació como una reimplementación de software libre del lenguaje S, adicionado con soporte para ámbito estático. Se trata de uno de los pseudolenguajes de programación más utilizados en investigación científica, siendo además muy popular en los campos de aprendizaje automático (machine learning), minería de datos, investigación biomédica, bioinformática y matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con funcionalidades de cálculo y de realización de gráficos.
¿Qué es RStudio?
RStudio es un entorno de desarrollo integrado (IDE) para el lenguaje de programación R, dedicado a la computación estadística y gráficos. Incluye una consola, editor de sintaxis que apoya la ejecución de código, así como herramientas para el trazado, la depuración y la gestión del espacio de trabajo. RStudio está disponible para Windows, Mac y Linux o para navegadores conectados a RStudio Server o RStudio Server Pro (Debian / Ubuntu, RedHat / CentOS, y SUSE Linux). RStudio tiene la misión de proporcionar el entorno informático estadístico R. Permite un análisis y desarrollo para que cualquiera pueda analizar los datos con R.
¿Qué es un script de R base (.R)?
Los scripts son documentos de texto con la extensión de archivo .R, por ejemplo mi_script.R. Estos archivos son iguales a cualquier documento de texto, pero R los puede leer y ejecutar el código que contienen.
¿Qué es Markdown?
Markdown es un lenguaje de marcado ligero creado por John Gruber que trata de conseguir la máxima legibilidad y facilidad de publicación tanto en su forma de entrada como de salida, inspirándose en muchas convenciones existentes para marcar mensajes de correo electrónico usando texto plano. Markdown convierte el texto marcado en documentos XHTML utilizando html2text creado por Aaron Swartz. Para conocer los rudimentos del lenguaje puede consultarse el siguiente enlace.
¿Qué es un documento Quarto (.qmd) con scripting?
Quarto es una herramienta usada por RStudio que permite una fácil creación de documentos, presentaciones dinámicas e informes de R. Markdown es un formato de sintaxis simple en documento de texto para crear documentos en HTML, PDF, y Word.
¿Qué es un archivo HTML self-contained?
Los ficheros HTML self-contained son ficheros autónomos que residen en un solo archivo HTML. No puede incluir ningún otro archivo y deben funcionar sin una conexión de red. Un usuario debería poder guardar el archivo, abrirlo localmente y tener todo listo para trabajar.
¿Qué es un vector?
Los vectores en R son objetos de una única dimensión que puede contener datos numéricos, cadena de caracteres o datos lógicos, entre otros. Esencialmente son uno de los elementos básicos en la estructura de los datos en R. Se crean con la estructura c().
¿Qué es una matriz?
Una matriz en R es un conjunto de elementos del mismo tipo (numérico, carácter, lógico, etc.) organizado en filas y columnas. Las matrices en R se construyen con la función matrix(). Aunque con un ejemplo siempre es mucho más fácil comprender cómo funcionan las matrices.
¿Qué es un dataframe / dataset?
Un dataframe es lo que se conoce como un fichero de datos (dataset). Son estructuras para trabajar con datos de diferentes tipos (cadena, lógicos, aritméticos). Utiliza una estructura de datos tabular (como una matriz) pero que permite manipular distintos tipos de datos, de modo que una columna puede contener caracteres, otra números y otra variables lógicas. Son importantes para hacer tablas, cuadros, gráficas, análisis y modelos que tienen muchas variables estadísticas. Se crean con la estructura data.frame(). Mientras que el término datafrane hace referencia al nombre de la estructura en R, el concepto dataset hace referen cia al conjunto de datos, archivo, fichero, etc.
Dejando a un lado la abstracción informática, estos elementos pueden conectarse con la investigación de mercados tradicional. Un vector en R es el equivalente exacto a una columna entera de respuestas de un cuestionario (por ejemplo, las respuestas de todos los entrevistados a la pregunta de “edad”).
Por su parte, un dataframe no es más donde todas esas columnas (variables) conviven alineadas fila por fila, representando cada fila a un individuo o consumidor diferente.
¿Qué es un paquete / librería?
Un paquete (package) es una colección de funciones, datos y código R que se almacenan en una carpeta conforme a una estructura bien definida, fácilmente accesible para R. En la web de R se puede consultar la lista de paquetes disponibles. Un paquete contiene funciones que las usamos para hacer nuestros cálculos.
¿Qué es un objeto?
La información que se manipula en R se estructura en forma de objetos. Para trabajar con R resulta importante conocer los principales tipos de objetos y sus propiedades básicas. En general, cada tipo de objeto viene definido por una serie de atributos. Las funciones genéricas (como por ejemplo summary o plot) reconocen estos atributos y llevan a cabo distintos tipos de acciones en función del tipo de objeto.
¿Qué es un chunk?
Los trozos de código R que se insertan en archivos markdown se denominan chunk y permiten hacer análisis estadísticos y mostrar los resultados en el documento final. Los chunks tienen diversas opciones que permiten una mayor flexibilidad en cómo se muestra el código y los resultados en el documento final.
[1] "_aquí iría el código_"
¿Qué es inline code?
A diferencia de los chunks, el inline code se inserta en el texto del archivo; de este modo se inserta aquí la fecha: 2026-08-06.
Los paquetes necesarios han sido cargados con la instrucción anterior. Si alguno no estuviera instalado, el contenido del fichero global.R (no mostrado aquí) se encarga de instalarlo automáticamente mediante el paquete pacman, o bien de forma manual con install.packages(). El paquete fontawesome requiere una forma especial de instalación, por lo que se cita al final de forma específica.
# BOOT SCRIPT AND ENVIRONMENT PREPARATION
# 1. Define the list of packages required for our project
required_packages <- c(
"car", "psych", "Hmisc", "ca", "FactoMineR", "factoextra", "readr", "readxl",
"tidyverse", "kableExtra", "sparkline", "fontawesome", "outliers", "nortest",
"vcd", "corrplot", "gplots", "DT", "lmtest", "sjstats", "igraph", "smacof",
"maditr", "expss", "NbClust", "effectsize", "GGally", "gtsummary", "mclust",
"ggrepel", "lm.beta", "ppcor", "htmltools"
)
# 2. Avoid blocking interactive questions during installation
options(install.packages.compile.from.source = "never")
# 3. Check which of those packages are NOT installed on the computer
installed_packages <- rownames(installed.packages())
missing_packages <- required_packages[!(required_packages %in% installed_packages)]
# 4. If any are missing, download and install them automatically
if (length(missing_packages) > 0) {
message(
"Downloading and installing required packages: ",
paste(missing_packages, collapse = ", ")
)
# Use type = "binary" for greater security and speed on Windows/Mac
install.packages(missing_packages, repos = "https://cloud.r-project.org", type = "binary")
}
# 5. Load all packages into the session silently
suppressPackageStartupMessages({
suppressWarnings({
for (pkg in required_packages) {
library(pkg, character.only = TRUE)
}
})
})
message("✅ Environment ready! All packages are installed and loaded.")Los archivos están en formato SPSS (SAV) porque es un formato tradicional en los ficheros de investigación. Dado que esta asignatura se impartió con SPSS hasta el curso anterior, todos los ficheros de trabajo se mantienen en ese formato. Aunque podrían transformarse, se ha optado por mantener la dualidad, ya que en la práctica profesional del análisis de mercados es habitual encontrarse con archivos .sav. A lo largo de la asignatura se mostrará también cómo cargar ficheros en otros formatos habituales, como XLSX, CSV, TSV o el formato estándar de R, RDS.
Aunque se puede trabajar en consola, es más habitual trabajar con ficheros de instrucciones o scripts.
Se proponen a continuación estas líneas para escribir en la consola, una a una; al completar cada línea, se pulsa la tecla INTRO (también llamada ENTER). El resultado de la operación aparece directamente en la consola.
Por ejemplo:
mean(2,3,4,5) y pulsar INTRO.max(2,3,4,5) y pulsar INTRO.¿Qué está pasando? R no va bien 🤦🏻♂️ fallos en la media y el máximo, ¿qué pasa aquí…? Igual la sintaxis no es la correcta.
Probar esto:
mean(c(2,3,4,5)) y pulsar INTRO.max(c(2,3,4,5)) y pulsar INTRO.Vaya, se recuperó 😁
¿Qué ha pasado? R en ocasiones necesita una serie de valores, y no un solo valor. Para identificar una serie de valores se utiliza la función c(), que separa por comas los valores a trabajar. Se continúa…
Un primer ejemplo más completo para iniciarse en R consiste en crear el siguiente script, donde:
El script se escribe ahora no en la consola, sino en un archivo nuevo: file > new file > R script
Se abre un lienzo en blanco.
Las siguientes líneas pueden copiarse con el icono copy situado en la esquina superior derecha, y pegarse en ese lienzo en blanco.
# Create two vectors
x <- c(1, 2, 3, 1, 3, 1, 3, 3, 3)
y <- c(2, 1, 3, 4, 1, 2, 4, 1, 1)
# Create a dataframe
# where vector x will be called V1 and
# vector y will be called V2
df1 <- data.frame(V1 = x, V2 = y)
# Display the dataframe
cat("Dataframe: \n")
print(df1)
# Inspect its structure
cat("\n Dataframe structure: \n")
str(df1)
# Calculate means: of the vector and of the column
# corresponding to vector x in the dataframe to see
# that the result is the same
cat("\n Vector mean: ")
mean(x)
cat("\n Mean of column V1 in the dataframe: ")
mean(df1$V1)Dataframe:
V1 V2
1 1 2
2 2 1
3 3 3
4 1 4
5 3 1
6 1 2
7 3 4
8 3 1
9 3 1
Dataframe structure:
'data.frame': 9 obs. of 2 variables:
$ V1: num 1 2 3 1 3 1 3 3 3
$ V2: num 2 1 3 4 1 2 4 1 1
Vector mean: [1] 2.222222
Mean of column V1 in the dataframe: [1] 2.222222
El botón Run, situado en la parte superior derecha, permite ejecutar las líneas del fichero una a una; seleccionándolas todas, la opción Run all encadena la ejecución de todas ellas, una tras otra.
A partir de ahora, los sucesivos scripts incluirán menos explicación paso a paso: bastará con copiar, pegar y analizar qué instrucciones se están ejecutando.
Este segundo caso permite analizar la influencia de los valores perdidos (missing values) y su efecto en el cálculo de estimaciones estadísticas. En concreto:
NA)# --- Add a missing value (NA) to each vector ---
x <- c(x, NA)
y <- c(y, NA)
df1 <- data.frame(V1 = x, V2 = y)
# --- Mean calculation comparison ---
# By default, R cannot calculate a mean if any value is missing (NA):
# the result of any operation involving NA is NA, "contamination" by default
cat("Media de V1 con missing values: \n")
mean(df1$V1) # Will return NA
cat("\n--- *** ---\n")
# 'na.rm = TRUE' tells R to remove (ignore) NA values before calculating
cat("Media de V1 ignorando los missing values (na.rm = TRUE): \n")
mean(df1$V1, na.rm = TRUE) # Correct calculationMedia de V1 con missing values:
[1] NA
--- *** ---
Media de V1 ignorando los missing values (na.rm = TRUE):
[1] 2.222222
Funciones de inspección (para conocer los datos)
Estas funciones evitan tener que abrir el dataframe a ciegas.
head(df1): Muestra las primeras 6 filas. Es el estándar para comprobar si los datos se han cargado bien.tail(df1): Muestra las últimas 6 filas.str(df1): (Estructura) Es, probablemente, la función más importante. Indica si una columna es numérica, texto (character) o categórica (factor).glimpse(df1): (Del paquete tidyverse/dplyr) Es una versión más moderna y limpia de str(). Se recomienda encarecidamente para quienes empiezan, porque resulta mucho más fácil de leer.summary(df1): Genera un resumen estadístico básico (media, mediana, mínimos y máximos) de cada columna. Es el sustituto rápido de los cuadros de estadísticos de SPSS.Funciones de dimensiones y nombres
ncol(df1): Devuelve el número de columnas (útil cuando se combina con nrow() para saber el tamaño total).dim(df1): Devuelve un vector con dos valores, nº filas / nº columnas.names(df1): Es un alias de colnames(df1). Es muy común encontrarlo en la literatura de R.Funciones de sistema/entorno
ls(): Lista todos los objetos cargados en la memoria actual del entorno; permite comprobar si hay basura acumulada.rm(objeto): Para eliminar un objeto (limpiar la memoria).getwd(): (get working directory) Fundamental. Indica en qué carpeta está trabajando R. Sin esa referencia no es posible importar ni guardar archivos correctamente. Más adelante se mostrará cómo crear un proyecto para abstraerse de la ruta absoluta.# --- Exploratory functions ---
# System info
Sys.time() # Current time
Sys.Date() # Current date
getwd() # Check your working directory
ls() # List all objects currently in memory
# Dataframe dimensions
nrow(df1) # Number of rows
ncol(df1) # Number of columns
dim(df1) # Dimensions (rows, columns)
# Dataframe content
colnames(df1) # Variable names
summary(df1) # Basic statistics for all variables
head(df1, 3) # First 3 rows
tail(df1, 3) # Last 3 rows[1] "2026-08-06 15:09:50 CEST"
[1] "2026-08-06"
[1] "C:/Users/rober/Documents/R/rgs.tmim.sesiones"
[1] "citar" "df1" "x" "y"
[1] 10
[1] 2
[1] 10 2
[1] "V1" "V2"
V1 V2
Min. :1.000 Min. :1.000
1st Qu.:1.000 1st Qu.:1.000
Median :3.000 Median :2.000
Mean :2.222 Mean :2.111
3rd Qu.:3.000 3rd Qu.:3.000
Max. :3.000 Max. :4.000
NAs :1 NAs :1
V1 V2
1 1 2
2 2 1
3 3 3
V1 V2
8 3 1
9 3 1
10 NA NA
A continuación se realiza un nuevo experimento. A diferencia de los archivos .R (que son puras instrucciones), el formato R Markdown (.Rmd) es el estándar para crear informes reproducibles. Este tipo de archivos combina texto explicativo (en formato Markdown) con trozos de código (chunks) que se ejecutan al generar el documento.
Conviene explorar las plantillas que RStudio ofrece:
Consejo: conviene “tejer” (Knit) el documento resultante para ver cómo el código y el texto se convierten en un informe profesional.
Aunque RStudio cuenta con menús visuales para importar datos, en el análisis profesional se prefiere cargar los datos mediante scripts, lo que garantiza que el proceso sea trazable y reproducible. Se utiliza readr para archivos de texto y expss para archivos .sav de SPSS.
Carga desde CSV
# Practice dataset hosted externally (Google Drive), used only for this exercise
# In later sessions we will load files from our local 'data/' project folder instead
# suppressMessages() hides the column-type detection message that read_csv prints by default
data <- read_csv("https://drive.google.com/uc?export=download&id=1OStFMmg5fzIpfTZnzX9Ql8sefN7se5SW")
data
head(data, 2)
tail(data, 2)# A tibble: 6 × 11
x y z low high value name color from to weight
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 0 1.6 -34 -6 9.2 1 lemon #d35400 lemon olive 1
2 1 11 -23 6.7 15.3 10 nut #2980b9 lemon guava 1
3 2 20.4 6.8 2.8 38 19 olive #2ecc71 lemon fig 1
4 3 22.1 32.3 19.4 24.8 21 guava #f1c40f nut olive 1
5 4 15.4 27.7 12.1 18.7 14 fig #2c3e50 olive pear 2
6 5 7.4 3.2 -11.8 26.6 6 pear #7f8c8d guava pear 2
# A tibble: 2 × 11
x y z low high value name color from to weight
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 0 1.6 -34 -6 9.2 1 lemon #d35400 lemon olive 1
2 1 11 -23 6.7 15.3 10 nut #2980b9 lemon guava 1
# A tibble: 2 × 11
x y z low high value name color from to weight
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr> <chr> <dbl>
1 4 15.4 27.7 12.1 18.7 14 fig #2c3e50 olive pear 2
2 5 7.4 3.2 -11.8 26.6 6 pear #7f8c8d guava pear 2
Carga desde ficheros SAV
# Same idea, but reading an SPSS (.sav) file directly from a URL
# read_spss() comes from the 'expss' package and preserves variable/value labels
data <- read_spss("https://drive.google.com/uc?export=download&id=11q4pg2iWwWdV9mk5P44ejoAcj5CJEfJM")
# Preview the first and last 5 rows
head(data, 5)
tail(data, 5) ESTU CUES CCAA PROV MUN TAMUNI CAPITAL DISTR SECCION ENTREV OLA P1 P2 P3 P401
1 3192 1 16 1 59 5 1 0 0 0 3 9 3 6 1
2 3192 2 16 1 59 5 1 0 0 0 3 2 2 7 1
3 3192 3 16 1 59 5 1 0 0 0 3 2 2 8 1
4 3192 4 16 1 59 5 1 0 0 0 3 9 2 8 1
5 3192 5 16 1 59 5 1 0 0 0 3 3 2 7 1
P402 P403 P404 P501 P502 P503 P504 P6 P6A01 P6A02 P6B P6C P6D P7 P7A P801
1 1 1 1 7 7 8 8 1 2 0 1 2 3 3 1 1
2 1 1 1 7 7 7 7 1 1 0 0 2 3 1 NA 1
3 1 1 1 8 8 8 8 1 2 0 2 2 2 3 1 1
4 1 1 1 9 9 9 1 1 1 0 0 1 3 2 NA 1
5 1 1 1 9 5 8 8 1 2 0 1 2 3 4 1 1
P802 P803 P8A01 P8A02 P8A03 P8B01 P8B02 P8B03 P901 P902 P903 P904 P905 P906
1 2 1 2 0 1 96 96 8 7 7 7 7 6 6
2 1 1 2 2 1 96 96 7 7 7 7 7 7 7
3 1 1 1 2 1 10 96 10 8 8 8 8 6 8
4 2 1 1 0 2 9 96 96 10 98 10 98 5 7
5 1 1 2 2 2 96 96 96 8 8 9 9 6 8
P907 P908 P1001 P1002 P1003 P11 P11A01 P11A02 P11B P11C P11D P12 P12A01
1 6 7 3 2 3 2 96 96 0 0 0 2 96
2 7 1 3 2 3 2 96 96 0 0 0 1 2
3 8 2 2 3 3 2 96 96 0 0 0 1 1
4 7 3 2 3 2 2 96 96 0 0 0 1 1
5 8 4 2 3 2 2 96 96 0 0 0 1 1
P12A02 P12B P12C P12D01 P12D02 P12D P1301 P1302 P1303 P1304 P1305 P14 P14A01
1 96 0 0 NA NA NA 6 7 7 6 3 2 96
2 0 2 3 97 97 9997 7 7 7 7 1 2 96
3 0 2 3 25 0 25 7 7 7 7 2 2 96
4 0 1 3 0 1 30 9 9 10 10 3 2 96
5 0 2 3 0 4 120 5 6 8 8 4 2 96
P14A02 P14B P14C P1501 P1502 P1503 P1504 P1505 P1506 P16 P17 P18 P18A P18B
1 96 0 0 7 7 5 5 6 2 3 2 1 8 1
2 96 0 0 7 7 9 7 7 1 4 8 2 0 0
3 96 0 0 7 7 7 7 7 2 2 3 2 0 0
4 96 0 0 8 10 4 8 9 3 2 8 1 10 2
5 96 0 0 5 10 7 5 98 4 8 2 1 10 2
P18C01 P18C02 P18C03 P18C04 P18C05 P18C06 P18C07 P18C08 P19 P20 P21 P21A01
1 NA NA NA 1 NA NA NA NA 2 2 2 0
2 0 0 0 0 0 0 0 0 2 2 2 0
3 0 0 0 0 0 0 0 0 2 2 2 0
4 0 0 0 0 0 0 0 0 3 2 2 0
5 0 0 0 0 0 0 0 0 2 2 2 0
P21A02 P21A03 P21A04 P21B P22 P23 P24 P2501 P2502 P2503 P2601 P2602 P2603
1 0 0 0 0 3 1 2 10 10 8 1 2 2
2 0 0 0 0 1 1 1 10 6 4 2 9 9
3 0 0 0 0 1 8 2 10 10 10 1 2 2
4 0 0 0 0 3 2 2 10 10 10 1 2 2
5 0 0 0 0 1 1 2 10 8 10 2 2 2
P2604 P27 P28 P29 P30 P30A P30AR P31 P32 P33 P34 P35 P35A P36 P37 P38 P39 P40
1 1 2 3 99 1 99 99 2 51 1 1 3 5 2 1 1 2 1
2 2 1 3 2 1 3 3 1 37 1 1 3 13 1 2 1 1 1
3 1 1 2 4 1 99 99 2 60 1 2 3 7 2 2 4 3 2
4 1 1 1 2 1 98 98 1 53 1 1 3 11 1 1 4 1 1
5 1 2 3 1 1 3 3 2 69 3 2 3 4 2 2 4 1 2
P41 P42 P42A P43 P44 P45 P46 P46A P46B P46C P46D P47 P47A P47B P48 P4901
1 561 2 1 87 99 99 1 1 0 0 0 1 16 0 1 NA
2 215 4 0 86 7 6 1 1 0 0 0 1 16 0 3 NA
3 351 1 3 35 10 7 1 1 0 0 0 1 16 0 1 NA
4 223 1 1 85 9 7 1 1 0 0 0 1 16 0 1 NA
5 921 1 3 81 5 5 1 1 0 0 0 1 14 0 1 NA
P4902 P4903 P4904 P5001 P5002 P5003 P5004 P5005 P5101 P5102 P5103 P5104 P5105
1 NA NA NA - - - - - - - - - -
2 NA NA NA - - - - - - - - - -
3 NA NA NA - - - - - - - - - -
4 NA NA NA - - - - - - - - - -
5 NA NA NA - - - - - - - - - -
P52 P53 P54 P55 I1 I2 I3 I4 I5 I6 I7 I8 I9 E101 E102 E103 E2 E3 E4 C1 C1A C2
1 2 2 2 2 7 NA 30 2 2 NA 12 NA 1 20 10 17 5 17 3 1 0 2
2 2 2 2 2 1 NA 11 NA 2 2 2 NA NA 20 10 17 5 17 1 1 0 1
3 2 2 1 1 2 NA 10 NA NA 1 NA NA NA 20 10 17 5 30 2 1 0 1
4 2 2 2 1 3 NA 31 NA 2 2 10 1 NA 20 10 17 5 18 2 1 0 1
5 2 2 2 2 4 NA 13 NA NA 1 9 NA NA 20 10 17 5 19 2 1 0 1
C2A C2B C3 C4 RECUERDO ESTUDIOS OCUMAR11 RAMA09 CONDICION11 ESTATUS PESO
1 1 0 1 0 99 5 5 4 7 2 0.925
2 0 0 1 0 3 6 2 4 1 1 0.925
3 0 0 1 0 99 5 3 2 8 2 0.925
4 0 0 1 0 98 6 2 4 2 1 0.925
5 0 0 1 0 3 3 9 4 8 5 0.925
ESTU CUES CCAA PROV MUN TAMUNI CAPITAL DISTR SECCION ENTREV OLA P1 P2 P3
2553 3192 2596 19 52 1 4 1 0 0 0 3 3 2 6
2554 3192 2597 19 52 1 4 1 0 0 0 3 2 2 7
2555 3192 2598 19 52 1 4 1 0 0 0 3 2 4 3
2556 3192 2599 19 52 1 4 1 0 0 0 3 2 3 5
2557 3192 2600 19 52 1 4 1 0 0 0 3 7 2 7
P401 P402 P403 P404 P501 P502 P503 P504 P6 P6A01 P6A02 P6B P6C P6D P7 P7A
2553 1 1 1 1 8 7 6 7 1 10 0 2 1 2 4 7
2554 3 2 1 2 6 9 5 6 2 96 96 0 0 0 0 NA
2555 2 2 2 2 5 3 7 7 1 0 2 0 0 0 0 NA
2556 2 2 2 2 4 6 2 3 2 96 96 0 0 0 0 NA
2557 2 2 2 2 3 4 3 6 1 0 2 0 0 0 0 NA
P801 P802 P803 P8A01 P8A02 P8A03 P8B01 P8B02 P8B03 P901 P902 P903 P904
2553 1 2 2 1 0 0 4 96 96 7 7 8 8
2554 0 0 0 0 0 0 96 96 96 7 7 7 7
2555 0 0 0 0 0 0 96 96 96 5 5 5 5
2556 0 0 0 0 0 0 96 96 96 5 5 5 5
2557 0 0 0 0 0 0 96 96 96 98 98 98 98
P905 P906 P907 P908 P1001 P1002 P1003 P11 P11A01 P11A02 P11B P11C P11D P12
2553 8 8 8 5 1 3 1 2 96 96 0 0 0 2
2554 1 7 7 1 2 8 2 2 96 96 0 0 0 2
2555 2 5 5 1 2 3 2 1 1 0 1 0 0 2
2556 2 5 5 6 3 3 3 2 96 96 0 0 0 2
2557 2 98 98 1 2 3 2 2 96 96 0 0 0 2
P12A01 P12A02 P12B P12C P12D01 P12D02 P12D P1301 P1302 P1303 P1304 P1305
2553 96 96 0 0 NA NA NA 7 8 8 8 4
2554 96 96 0 0 NA NA NA 7 10 7 10 1
2555 96 96 0 0 NA NA NA 5 6 5 6 1
2556 96 96 0 0 NA NA NA 5 7 5 5 4
2557 96 96 0 0 NA NA NA 7 7 7 7 1
P14 P14A01 P14A02 P14B P14C P1501 P1502 P1503 P1504 P1505 P1506 P16 P17
2553 2 96 96 0 0 7 7 7 6 7 4 3 8
2554 2 96 96 0 0 7 8 1 5 8 1 3 8
2555 2 96 96 0 0 4 6 1 1 3 1 3 8
2556 2 96 96 0 0 6 7 1 1 3 4 3 8
2557 2 96 96 0 0 5 7 6 4 7 1 3 1
P18 P18A P18B P18C01 P18C02 P18C03 P18C04 P18C05 P18C06 P18C07 P18C08 P19
2553 1 4 1 NA NA NA NA NA 1 NA NA 8
2554 2 0 0 0 0 0 0 0 0 0 0 8
2555 2 0 0 0 0 0 0 0 0 0 0 1
2556 2 0 0 0 0 0 0 0 0 0 0 2
2557 2 0 0 0 0 0 0 0 0 0 0 2
P20 P21 P21A01 P21A02 P21A03 P21A04 P21B P22 P23 P24 P2501 P2502 P2503
2553 2 2 0 0 0 0 0 3 1 3 10 8 8
2554 3 2 0 0 0 0 0 3 8 1 10 1 98
2555 2 2 0 0 0 0 0 1 8 3 10 1 1
2556 3 2 0 0 0 0 0 1 1 3 10 1 1
2557 2 2 0 0 0 0 0 3 2 2 10 5 98
P2601 P2602 P2603 P2604 P27 P28 P29 P30 P30A P30AR P31 P32 P33 P34 P35
2553 2 2 2 8 1 1 5 5 0 0 1 32 2 2 3
2554 2 2 2 2 1 3 7 1 1 1 1 19 2 2 3
2555 2 2 2 2 1 3 7 1 1 1 2 38 1 1 3
2556 1 1 1 1 2 4 5 5 0 0 2 20 2 2 3
2557 2 2 2 2 1 1 8 1 1 1 1 44 1 1 3
P35A P36 P37 P38 P39 P40 P41 P42 P42A P43 P44 P45 P46 P46A P46B P46C P46D
2553 12 3 1 4 2 4 271 2 3 62 98 1 1 1 0 0 0
2554 6 2 2 4 2 6 592 1 1 84 98 1 1 1 0 0 0
2555 9 2 2 4 2 1 224 1 1 85 99 99 1 1 0 0 0
2556 6 1 2 4 2 6 740 1 3 45 98 1 1 1 0 0 0
2557 5 1 2 4 1 1 2 1 1 84 99 7 1 1 0 0 0
P47 P47A P47B P48 P4901 P4902 P4903 P4904 P5001 P5002 P5003 P5004 P5005
2553 1 19 0 1 1 NA NA NA - - - - -
2554 1 19 0 3 1 NA NA NA - - - - -
2555 1 5 0 1 1 NA NA NA - - - - -
2556 1 19 0 1 NA NA NA 1 - - - - -
2557 1 19 0 1 NA NA NA NA - - - - -
P5101 P5102 P5103 P5104 P5105 P52 P53 P54 P55 I1 I2 I3 I4 I5 I6 I7 I8 I9
2553 - - - - - 2 3 2 2 5 NA NA NA NA NA 1 NA NA
2554 - - - - - 2 1 2 1 6 NA 5 2 1 1 14 NA NA
2555 - - - - - 2 1 1 1 7 NA 1 NA NA NA 3 NA NA
2556 - - - - - 2 1 2 1 3 NA 1 NA 1 NA 2 NA 1
2557 - - - - - 2 1 1 1 8 NA NA NA NA NA 1 NA NA
E101 E102 E103 E2 E3 E4 C1 C1A C2 C2A C2B C3 C4 RECUERDO ESTUDIOS OCUMAR11
2553 22 10 17 7 17 2 1 0 1 0 0 1 0 97 6 2
2554 22 10 17 7 19 2 1 0 1 0 0 1 0 1 4 5
2555 22 10 17 7 17 2 1 0 1 0 0 1 0 1 6 2
2556 22 10 17 7 17 1 1 0 1 0 0 1 0 97 4 7
2557 22 10 17 7 17 2 2 1 1 0 0 1 0 1 5 10
RAMA09 CONDICION11 ESTATUS PESO
2553 4 9 1 0.049
2554 4 10 2 0.049
2555 4 2 1 0.049
2556 4 10 4 0.049
2557 4 12 2 0.049
Existen dos formas de obtener frecuencias. La primera utiliza la sintaxis clásica de R; la segunda, más potente, se integra con el flujo de expss y muestra una función de este paquete pensada para la explotación de archivos de datos en investigación de mercados (tipo SPSS).
Hombre Mujer
1256 1301
| Sexo de la persona entrevistada | Count | Valid percent | Percent | Responses, % | Cumulative responses, % |
|---|---|---|---|---|---|
| Hombre | 1256 | 49.1 | 49.1 | 49.1 | 49.1 |
| Mujer | 1301 | 50.9 | 50.9 | 50.9 | 100.0 |
| #Total | 2557 | 100 | 100 | 100 | |
| <NA> | 0 | 0.0 |
Se utiliza el operador %>% (pipe), que puede imaginarse como una cinta transportadora: el conjunto de datos se pasa a la función de celdas, luego a la de estadísticos y, finalmente, se pivota.
La legibilidad de las tablas puede mejorarse añadiendo totales y etiquetas personalizadas.
# Frequency table with total row positioned above
data %>%
tab_cells(P31) %>%
tab_stat_cases(total_row_position = "above", label = "Total cases") %>%
tab_pivot()
# Frequency table with column percentages
data %>%
tab_cells(P31) %>%
tab_stat_cpct(total_row_position = "above", label = "Percentage (%)") %>%
tab_pivot()| #Total | ||
|---|---|---|
| Sexo de la persona entrevistada | ||
| #Total cases | Total cases | 2557 |
| Hombre | Total cases | 1256 |
| Mujer | Total cases | 1301 |
| #Total | ||
|---|---|---|
| Sexo de la persona entrevistada | ||
| #Total cases | Percentage (%) | 2557 |
| Hombre | Percentage (%) | 49.1 |
| Mujer | Percentage (%) | 50.9 |
A menudo resulta útil ver tanto los casos absolutos como los porcentajes en una misma tabla, para facilitar la interpretación.
| #Total | ||
|---|---|---|
| Cases | Column % | |
| Sexo de la persona entrevistada | ||
| #Total cases | 2557 | 2557 |
| Hombre | 1256 | 49.1 |
| Mujer | 1301 | 50.9 |
Se exploran a continuación las distintas formas de calcular porcentajes (columna, fila y tabla):
| #Total | |
|---|---|
| Sexo de la persona entrevistada | |
| Hombre | 1256.0 |
| Mujer | 1301.0 |
| #Total cases | 2557 |
| Hombre | 49.1 |
| Mujer | 50.9 |
| #Total cases | 2557 |
| Hombre | 100.0 |
| Mujer | 100.0 |
| #Total cases | 2557 |
| Hombre | 49.1 |
| Mujer | 50.9 |
| #Total cases | 2557 |
Una parte vital del análisis de encuestas es la gestión de etiquetas. La instrucción var_lab() permite documentar qué significa la variable, y val_lab() permite asignar etiquetas a los valores numéricos (igual que en la vista de variables de SPSS).
Se cierra así esta primera sección, en la que se ha pasado de ejecutar comandos aislados en la consola a construir el primer script. Se ha visto también que R es sensible a los valores perdidos (NA).
Esta primera inmersión en el ecosistema de R y RStudio puede resultar exigente. Es completamente normal que, en este punto, la sintaxis, los scripts o el uso del pipe (%>%) resulten algo extraños. Aprender R es como aprender un nuevo idioma: al principio cuesta memorizar el vocabulario y la gramática, pero con un poco de práctica las instrucciones empiezan a fluir con naturalidad.
Conviene tener presente el objetivo principal de este máster: el propósito no es formar programadores informáticos, sino analistas de mercado estratégicos. RStudio es simplemente el vehículo más potente y profesional que existe en la actualidad para transformar encuestas, hojas de cálculo y bases de datos en información de negocio. En esta sesión se ha encendido el motor, se ha configurado el panel de mandos y se ha dado una vuelta de reconocimiento tabulando los primeros porcentajes. En los siguientes pasos de este camino, empieza la conducción real.
Los aspectos puramente técnicos de la instalación quedan atrás para centrarse en el proceso de investigación, la inferencia y el análisis multivariante. El recorrido pasa de la observación descriptiva a la toma de decisiones basada en evidencia estadística:
El recorrido no ha hecho más que empezar. Conviene guardar los scripts, revisar los conceptos básicos y prepararse para descubrir todo lo que los datos tienen que contar.