Técnicas multivariantes de investigación en marketing
  • Presentación
  • Sesiones
    • Parte 1
    • Parte 2
    • Parte 3
    • Parte 4
    • Parte 5
    • Parte 6
  • Otros
    • Citar en Quarto
    • Acerca de …

Contenidos

  • Introducción
  • Bienvenidos a este sitio web…
  • ¿Quién soy …?
  • La asignatura …
  • Introducción a las herramientas de trabajo
  • Instalación del entorno de trabajo
    • Primer paso, instalar el lenguaje R
    • Segundo paso, instalar RStudio
      • Cuadrante superior izquierdo
      • Cuadrante inferior izquierdo:
      • Cuadrante superior derecho:
      • Cuadrante inferior derecho
    • Configuración inicial recomendada
  • ¿Cómo verificar que todo ha ido bien?
    • ℹ️❓El botón de ayuda en R
  • Preguntas y respuestas
  • Instalar y cargar paquetes
    • Paquetes / funciones usadas en la asignatura
  • Practicando el scripting
    • Ejercicio: script 1: consola
    • Ejercicio: script 2: vectores y dataframes
    • Ejercicio: script 3: valores perdidos
    • Ejercicio: script 4: funciones generales
    • Ejercicio: script 5: carga de datos
    • Ejercicio: script 6: recuentos básicos
    • Ejercicio: script 7: uso de pipes
    • Ejercicio: script 8: personalización de tablas
    • Ejercicio: script 9: combinando estadísticos
    • Ejercicio: script 10: tipos de porcentajes
    • Ejercicio: script 11: gestión de etiquetas
  • ¿Qué se ha aprendido hasta ahora?

Introducción

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 …

  • introducir los conceptos básicos de R;
  • ayudar a la carga de archivos;
  • explicar los contenidos estadísticos además de aportar el código R para su cálculo;
  • fijar el horizonte en la reproducibilidad de la investigación con el uso de 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.

Bienvenidos a este sitio web…

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.

¿Quién soy …?

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.

La asignatura …

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:

  • Una potente introducción estadística básica
  • Una base aplicada sobre inferencia estadística
  • Desarrollo de cuatro técnicas multivariantes básicas para un analista en Investigación en Marketing
    • Correspondencias
    • Componentes principales
    • Cluster o conglomerados
    • Regresión lineal múltiple

Introducción a las herramientas de trabajo

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:

  1. instalar el software R;
  2. instalar el software RStudio;
  3. instalar los paquetes de trabajo;
  4. cargar los bancos de datos necesarios para comenzar el trabajo;
  5. acercarse al proceso de datos “real”, por medio de la tabulación.

Instalación del entorno de trabajo

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.

Primer paso, instalar el lenguaje R

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.

  1. Acceder a la página oficial: CRAN (Comprehensive R Archive Network).
  2. Seleccionar el sistema operativo correspondiente:
  • Download R for Windows: hacer clic en “base” y luego en el enlace “Download R X.X.X for Windows”.
  • Download R for macOS: descargar el archivo .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).
  1. Ejecutar el instalador descargado y seguir los pasos por defecto (siguiente, siguiente, finalizar). No es necesario modificar ninguna configuración avanzada.

Segundo paso, instalar RStudio

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 …

  1. Acceder a la página oficial: Posit (anteriormente RStudio).
  2. Hacer clic en el botón Download RStudio Desktop correspondiente al sistema operativo.
  3. Ejecutar el archivo descargado e instalarlo.
  4. Importante: una vez instalado, abrir RStudio. Al ser la primera vez, el programa detectará automáticamente la versión de R instalada en el paso anterior.

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:

Cuadrante superior izquierdo

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

  • ¿Para qué sirve? Para escribir el código de forma estructurada antes de ejecutarlo. Permite guardar el trabajo paso a paso, asegurando que el análisis sea 100% reproducible.
  • Dato útil: también es el visor de datos. Al hacer clic en un dataframe cargado, se abre en esta ventana en formato de tabla (similar a la vista de datos de SPSS), aunque aquí es solo de lectura.

Cuadrante inferior izquierdo:

Consola (Console)

Es el “motor” interactivo de R: el lugar donde el código se ejecuta y cobra vida realmente.

  • ¿Para qué sirve? Al enviar una orden desde el Editor de Código (por ejemplo, calculando una media), el resultado de texto aparece aquí. También admite comandos rápidos escritos directamente en la consola, útiles para pruebas puntuales sin guardarlas en el script.
  • Dato útil: este cuadrante incluye pestañas adicionales como Terminal (para comandos del sistema operativo) y Background Jobs (para procesos largos), aunque en el día a día del análisis de mercados la pestaña Console es la más relevante.

Cuadrante superior derecho:

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.

  • ¿Para qué sirve? La pestaña Environment muestra un listado de todo lo cargado o creado en la sesión: bases de datos (dataframes), vectores, valores aislados y modelos estadísticos.
  • Dato útil: desde aquí puede comprobarse rápidamente cuántas observaciones (filas) y variables (columnas) tiene cada base de datos. La pestaña History guarda un registro de los comandos ejecutados recientemente.

Cuadrante inferior derecho

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:

  • Files: explorador de archivos integrado. Permite ver el contenido de la carpeta del proyecto, abrir scripts o localizar archivos de datos (.sav, .csv).
  • Plots: el escaparate visual. Cada histograma, mapa de posicionamiento o dendrograma generado aparece aquí, y puede exportarse directamente como imagen o PDF.
  • Packages: listado de todas las librerías instaladas (como ggplot2 o expss), con la posibilidad de activarlas o actualizarlas desde aquí.
  • Help: el salvavidas. Ante cualquier duda sobre el funcionamiento de un algoritmo o los parámetros de una prueba estadística, basta con escribir ?nombre_de_la_funcion en la consola para que la documentación oficial se abra en esta pestaña.

Configuración inicial recomendada

Para evitar problemas futuros con la codificación de caracteres (especialmente con las tildes y la letra ñ), conviene configurar RStudio de la siguiente manera:

  1. En el menú superior de RStudio, ir a Tools > Global Options.
  2. En la pestaña Code, hacer clic en Saving.
  3. Comprobar que en Default text encoding esté seleccionado UTF-8.
  4. Pulsar Apply y OK.

¿Cómo verificar que todo ha ido bien?

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:

# Verify installation with a simple calculation
2 + 2
[1] 4

Si el resultado que aparece es [1] 4, el entorno de trabajo está listo para comenzar.

ℹ️❓El botón de ayuda en R

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:

# Open help documentation for the mean function
?mean

Preguntas y respuestas

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.

NoteAnalogía con la encuesta: vectores y matrices o dataframes

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.

# This is a minimal chunk: just one line of R code
print('_aquí iría el código_')
[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.

Donde ha aparecido la fecha, yo tengo escrito en el documento `r Sys.Date()`

Instalar y cargar paquetes

# This single call loads (and installs, if needed) every package used in this course
# See the 'global.R' file in the project root for the full list of packages
source('global.R')

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.

Paquetes / funciones usadas en la asignatura

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

Practicando el scripting

Ejercicio: script 1: consola

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:

  • escribir mean(2,3,4,5) y pulsar INTRO.
  • escribir 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:

  • escribir mean(c(2,3,4,5)) y pulsar INTRO.
  • escribir 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…

Ejercicio: script 2: vectores y dataframes

Un primer ejemplo más completo para iniciarse en R consiste en crear el siguiente script, donde:

  • se crean dos vectores
  • se publica su contenido
  • se unen esos dos vectores creando un dataframe
  • se publica el dataframe
  • se muestra la estructura del dataframe
  • se calcula la media aritmética del vector (ya se hizo anteriormente)
  • se calcula la media aritmética del campo correspondiente en el dataframe

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.

Ejercicio: script 3: valores perdidos

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:

  • se crean de nuevo los vectores, añadiendo un valor perdido (NA)
  • se publica su contenido
  • se unen esos dos vectores creando un dataframe
  • se publica el dataframe
  • se repiten los cálculos estadísticos anteriores con una leve modificación
# --- 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 calculation
Media de V1 con missing values: 
[1] NA

--- *** ---
Media de V1 ignorando los missing values (na.rm = TRUE): 
[1] 2.222222

Ejercicio: script 4: funciones generales

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:

  • File → New File → R Markdown → Document → HTML
  • File → New File → R Markdown → Presentation → ioslides

Consejo: conviene “tejer” (Knit) el documento resultante para ver cómo el código y el texto se convierten en un informe profesional.

Ejercicio: script 5: carga de datos

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

Ejercicio: script 6: recuentos básicos

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

# Basic frequency table using standard R syntax
table(data$P31)

# Basic frequency table using standard `expss` syntax
fre(data$P31)

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

Ejercicio: script 7: uso de pipes

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.

# Calculate frequencies using pipes and expss
data %>%
  tab_cells(P31) %>%
  tab_stat_cases() %>%
  tab_pivot()
 #Total 
 Sexo de la persona entrevistada 
   Hombre  1256
   Mujer  1301
   #Total cases  2557

Ejercicio: script 8: personalización de tablas

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

Ejercicio: script 9: combinando estadísticos

A menudo resulta útil ver tanto los casos absolutos como los porcentajes en una misma tabla, para facilitar la interpretación.

# Combining counts and column percentages in one table
data %>% 
  tab_cells(P31) %>% 
  tab_stat_cases(total_row_position = "above", label = "Cases") %>%
  tab_stat_cpct(label = "Column %") %>%
  tab_pivot(stat_position = "inside_columns")
 #Total 
 Cases   Column % 
 Sexo de la persona entrevistada 
   #Total cases  2557 2557
   Hombre  1256 49.1
   Mujer  1301 50.9

Ejercicio: script 10: tipos de porcentajes

Se exploran a continuación las distintas formas de calcular porcentajes (columna, fila y tabla):

# Comparing different percentage calculations
data %>% 
  tab_cells(P31) %>% 
  tab_stat_cases() %>%
  tab_stat_cpct() %>% # Column percentage
  tab_stat_rpct() %>% # Row percentage
  tab_stat_tpct() %>% # Table percentage
  tab_pivot()
 #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

Ejercicio: script 11: gestión de etiquetas

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

# Assigning a variable label
var_lab(data$P31) <- 'Respondent gender'

# Assigning value labels to the numeric codes
val_lab(data$P31) <- c('Male' = 1, 'Female' = 2)

# Check the new labels
var_lab(data$P31)
val_lab(data$P31)
[1] "Respondent gender"
  Male Female 
     1      2 

¿Qué se ha aprendido hasta ahora?

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 contexto y la exploración de datos: nos ayudará a organizar el trabajo con Proyectos de RStudio, a entender la relación vital entre el diseño de un cuestionario y la estructura de un dataframe, y a clasificar correctamente las variables para no cometer errores estadísticos.
  • Diagnóstico estadístico: se pasará de los recuentos básicos a la estadística de precisión, aprendiendo a visualizar datos con histogramas y diagramas de caja, a detectar valores atípicos (outliers) o perdidos, y a validar los supuestos de normalidad y homocedasticidad.
  • Inferencia estadística paramétrica y no paramétrica: se dará el salto definitivo, utilizando test de hipótesis (T de Student, ANOVA, Chi-cuadrado) para descubrir si las diferencias observadas entre clientes (por ejemplo, ¿compran más los hombres que las mujeres?) son reales o un simple efecto del azar.
  • Análisis de Correspondencias: se entra en el terreno del posicionamiento estratégico, aprendiendo a construir mapas perceptuales para visualizar gráficamente dónde se ubica una marca respecto a los competidores según los atributos valorados por los consumidores.
  • Análisis de Componentes Principales (ACP): se trabajará con cuestionarios complejos con decenas de preguntas, descubriendo cómo reducir esa “sábana” de datos a unas pocas dimensiones latentes (por ejemplo, resumiendo 20 preguntas en 3 factores clave: calidad, precio y servicio).
  • Análisis de Conglomerados (Cluster Analysis): la herramienta reina del marketing. Se utilizarán algoritmos jerárquicos y de K-medias para segmentar el mercado, agrupando a los clientes en nichos homogéneos con necesidades y comportamientos similares.
  • Regresión Múltiple: se modelizará usando la regresión mútiple, como herramienta de base ya usada de forma interna en el ACP, pero explicitando ahora su uso, con diagnóstico, validación y especificación de modelo de relación de datos.
  • Cierre: se consolidará todo el conocimiento adquirido, aplicando las variables y segmentos creados a lo largo del curso para responder a los objetivos finales de investigación que demanda un cliente real.

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.

References

Allaire, JJ, and Christophe Dervieux. 2024. Quarto: R Interface to ’Quarto’ Markdown Publishing System. https://CRAN.R-project.org/package=quarto.