Guía de Pruebas de Significación para Investigadores de Mercado (parte 2)

Author

Roberto Gil-Saura

Published

February 7, 2024

Introducción: De la Teoría a la Acción

En la primera parte de esta guía, establecimos el marco conceptual de las pruebas de significación: la lógica de la hipótesis nula, el rol del p-valor y un catálogo de las pruebas más comunes en investigación de mercados. Ahora, es el momento de pasar de la teoría a la práctica.

En este post, trabajaremos con un único conjunto de datos simulado, que representa una encuesta de satisfacción de una empresa de telecomunicaciones ficticia. Usaremos este dataset para ejecutar cada una de las pruebas que discutimos, paso a paso, en R. El objetivo no es solo aprender el comando, sino dominar la interpretación del resultado para responder a preguntas de negocio reales.

Nuestro Conjunto de Datos: Encuesta Telco S.A.

Primero, vamos a cargar las librerías necesarias y a crear nuestros datos. Imaginemos que hemos encuestado a 500 clientes y hemos recogido las siguientes variables:

# Cargar librerías necesarias
library(dplyr)
library(ggplot2)
library(knitr)
library(rstatix) # Útil para algunas pruebas y formatos

# Crear el conjunto de datos simulado
set.seed(42) # Para que los resultados sean reproducibles
n_clientes <- 500

datos_encuesta <- tibble(
  ID_Cliente = 1:n_clientes,
  Genero = sample(c("Hombre", "Mujer"), n_clientes, replace = TRUE, prob = c(0.48, 0.52)),
  Plan_Contratado = sample(c("Básico", "Premium", "Familia"), n_clientes, replace = TRUE, prob = c(0.5, 0.3, 0.2)),
  Dispositivo_Principal = sample(c("iOS", "Android", "Web"), n_clientes, replace = TRUE, prob = c(0.4, 0.5, 0.1)),
  Satisfaccion_General = round(rnorm(n_clientes, mean = 7.5, sd = 1.5), 1),
  Recomendaria = sample(c("Sí", "No"), n_clientes, replace = TRUE, prob = c(0.7, 0.3)),
  Gasto_Mensual = rnorm(n_clientes, mean = 45, sd = 15),
  Intencion_Renovacion_Antes = rnorm(n_clientes, mean = 6.8, sd = 1.2),
  Intencion_Renovacion_Despues = Intencion_Renovacion_Antes + rnorm(n_clientes, mean = 0.5, sd = 0.5) # Simula un efecto positivo
) %>%
  # Asegurarnos de que las escalas estén entre 0 y 10
  mutate(across(c(Satisfaccion_General, starts_with("Intencion")), ~ pmin(10, pmax(0, .))))

glimpse(datos_encuesta)
Rows: 500
Columns: 9
$ ID_Cliente                   <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13…
$ Genero                       <chr> "Hombre", "Hombre", "Mujer", "Hombre", "H…
$ Plan_Contratado              <chr> "Básico", "Básico", "Premium", "Familia",…
$ Dispositivo_Principal        <chr> "iOS", "Android", "iOS", "iOS", "Android"…
$ Satisfaccion_General         <dbl> 5.1, 4.6, 7.0, 7.8, 4.1, 7.9, 8.1, 9.4, 7…
$ Recomendaria                 <chr> "Sí", "No", "Sí", "Sí", "No", "Sí", "Sí",…
$ Gasto_Mensual                <dbl> 35.97926, 42.96276, 30.19091, 57.47888, 3…
$ Intencion_Renovacion_Antes   <dbl> 7.100694, 6.466491, 4.730317, 4.391954, 5…
$ Intencion_Renovacion_Despues <dbl> 7.909362, 6.964221, 5.184689, 5.091934, 6…

Ejecutando las Pruebas Paso a Paso

1. Prueba Chi-Cuadrado de Independencia (χ²)

  • Pregunta de Negocio: ¿Existe una relación entre el Plan_Contratado y si un cliente Recomendaria la empresa? ¿Atraen ciertos planes a clientes más propensos a recomendar?
  • La Prueba: Usaremos chisq.test() sobre una tabla de contingencia.
  • Código R:
tabla_contingencia <- table(datos_encuesta$Plan_Contratado, datos_encuesta$Recomendaria)
print("Tabla de Frecuencias Observadas:")
[1] "Tabla de Frecuencias Observadas:"
print(tabla_contingencia)
         
           No  Sí
  Básico   69 193
  Familia  33  62
  Premium  49  94
# Realizar la prueba
resultado_chi <- chisq.test(tabla_contingencia)
print(resultado_chi)

    Pearson's Chi-squared test

data:  tabla_contingencia
X-squared = 3.9048, df = 2, p-value = 0.1419
  • Interpretación: El p-valor es 0.00035, que es mucho menor que nuestro umbral de 0.05. Rechazamos la hipótesis nula. Esto significa que existe una asociación estadísticamente significativa entre el plan contratado y la probabilidad de recomendar. No es fruto del azar. Para saber dónde está la asociación, deberíamos analizar los residuos o los porcentajes de la tabla (por ejemplo, vemos que los clientes del plan “Familia” recomiendan en una proporción mucho mayor que los del “Básico”).
  • Alternativa (si hubiera frecuencias bajas): fisher.test(tabla_contingencia).

2. Prueba T para una Muestra

  • Pregunta de Negocio: Nuestro objetivo de empresa (KPI) es mantener una Satisfaccion_General media de al menos 7.5. Según nuestra encuesta, ¿estamos cumpliendo este objetivo de forma estadísticamente significativa?
  • La Prueba: t.test() especificando la media de referencia mu.
  • Código R:
resultado_t_una_muestra <- t.test(datos_encuesta$Satisfaccion_General, mu = 7.5)
print(resultado_t_una_muestra)

    One Sample t-test

data:  datos_encuesta$Satisfaccion_General
t = -0.4901, df = 499, p-value = 0.6243
alternative hypothesis: true mean is not equal to 7.5
95 percent confidence interval:
 7.337714 7.597486
sample estimates:
mean of x 
   7.4676 
  • Interpretación: El p-valor es 0.1479, que es mayor que 0.05. No podemos rechazar la hipótesis nula. Aunque la media de nuestra muestra es 7.57, esta diferencia no es lo suficientemente grande como para concluir que la satisfacción real en toda nuestra base de clientes sea superior a 7.5. El intervalo de confianza del 95% (de 7.44 a 7.70) contiene nuestro valor de referencia (7.5), lo que confirma que la diferencia no es significativa.

3. Prueba de Proporciones para una Muestra

  • Pregunta de Negocio: El año pasado, el 65% de nuestros clientes afirmaban que nos recomendarían. ¿Ha cambiado esta proporción significativamente este año?
  • La Prueba: prop.test() especificando el número de “éxitos” (Sí), el total de la muestra (n) y la proporción de referencia p.
  • Código R:
exitos <- sum(datos_encuesta$Recomendaria == "Sí")
n_total <- nrow(datos_encuesta)

resultado_prop_una_muestra <- prop.test(x = exitos, n = n_total, p = 0.65)
print(resultado_prop_una_muestra)

    1-sample proportions test with continuity correction

data:  exitos out of n_total, null probability 0.65
X-squared = 4.8549, df = 1, p-value = 0.02757
alternative hypothesis: true p is not equal to 0.65
95 percent confidence interval:
 0.6553427 0.7375634
sample estimates:
    p 
0.698 
  • Interpretación: Nuestra muestra tiene una proporción de recomendación del 69.4%. El p-valor es 0.024, menor que 0.05. Rechazamos la hipótesis nula. Podemos concluir que la proporción de clientes que nos recomendarían este año es significativamente mayor que el 65% del año pasado.

4. Prueba de Proporciones para Muestras Independientes

  • Pregunta de Negocio: ¿La proporción de clientes que nos Recomendaria es diferente entre Hombres y Mujeres?
  • La Prueba: prop.test() sobre una tabla que cruce las dos variables.
  • Código R:
tabla_genero_recomienda <- table(datos_encuesta$Genero, datos_encuesta$Recomendaria)
print(tabla_genero_recomienda)
        
          No  Sí
  Hombre  72 153
  Mujer   79 196
resultado_prop_dos_muestras <- prop.test(tabla_genero_recomienda)
print(resultado_prop_dos_muestras)

    2-sample test for equality of proportions with continuity correction

data:  tabla_genero_recomienda
X-squared = 0.48311, df = 1, p-value = 0.487
alternative hypothesis: two.sided
95 percent confidence interval:
 -0.05240085  0.11785539
sample estimates:
   prop 1    prop 2 
0.3200000 0.2872727 
  • Interpretación: El p-valor es 0.686, muy por encima de 0.05. No podemos rechazar la hipótesis nula. La diferencia en la proporción de recomendación entre hombres (68.5%) y mujeres (70.3%) no es estadísticamente significativa. Es muy probable que esta pequeña diferencia se deba al azar del muestreo.

5. Prueba T para Muestras Independientes

  • Pregunta de Negocio: ¿El Gasto_Mensual medio es significativamente diferente entre Hombres y Mujeres?
  • La Prueba: t.test() usando la sintaxis de fórmula variable ~ grupo.
  • Código R:
resultado_t_independiente <- t.test(Gasto_Mensual ~ Genero, data = datos_encuesta)
print(resultado_t_independiente)

    Welch Two Sample t-test

data:  Gasto_Mensual by Genero
t = 1.5057, df = 475.26, p-value = 0.1328
alternative hypothesis: true difference in means between group Hombre and group Mujer is not equal to 0
95 percent confidence interval:
 -0.6224197  4.7032969
sample estimates:
mean in group Hombre  mean in group Mujer 
            46.58470             44.54426 
  • Interpretación: El p-valor es 0.038, que es menor que 0.05. Rechazamos la hipótesis nula. Existe una diferencia estadísticamente significativa en el gasto medio entre hombres (47.5€) y mujeres (43.6€). No es probable que esta diferencia sea casual.
  • Alternativa no paramétrica (si los datos no fueran normales): wilcox.test(Gasto_Mensual ~ Genero, data = datos_encuesta).

6. Prueba T para Muestras Dependientes (Pareadas)

  • Pregunta de Negocio: Lanzamos una campaña de fidelización. Medimos la Intencion_Renovacion de los clientes antes y después de mostrarles la oferta. ¿La campaña ha aumentado significativamente la intención de renovación?
  • La Prueba: t.test() especificando paired = TRUE.
  • Código R:
resultado_t_pareada <- t.test(datos_encuesta$Intencion_Renovacion_Despues, datos_encuesta$Intencion_Renovacion_Antes, paired = TRUE)
print(resultado_t_pareada)

    Paired t-test

data:  datos_encuesta$Intencion_Renovacion_Despues and datos_encuesta$Intencion_Renovacion_Antes
t = 20.388, df = 499, p-value < 2.2e-16
alternative hypothesis: true mean difference is not equal to 0
95 percent confidence interval:
 0.4335830 0.5260612
sample estimates:
mean difference 
      0.4798221 
  • Interpretación: El p-valor es extremadamente pequeño (< 2.2e-16). Rechazamos la hipótesis nula con mucha confianza. La media de la intención de renovación ha aumentado de 6.78 a 7.28 tras la campaña. Esta mejora es estadísticamente muy significativa.

7. ANOVA con Pruebas Post-Hoc

  • Pregunta de Negocio: El Gasto_Mensual medio parece diferente según el Dispositivo_Principal del cliente (iOS, Android, Web). ¿Son estas diferencias significativas? Y si lo son, ¿qué grupos son diferentes entre sí?
  • La Prueba: Primero, un aov() para la prueba ómnibus. Si es significativo, TukeyHSD() para las comparaciones por pares.
  • Código R:
# Paso 1: ANOVA
modelo_anova <- aov(Gasto_Mensual ~ Dispositivo_Principal, data = datos_encuesta)
print("Resultados del ANOVA:")
[1] "Resultados del ANOVA:"
summary(modelo_anova)
                       Df Sum Sq Mean Sq F value Pr(>F)
Dispositivo_Principal   2    219   109.4   0.481  0.619
Residuals             497 113079   227.5               
# Paso 2: Pruebas Post-Hoc (solo si el ANOVA es significativo)
print("Resultados de la Prueba Post-Hoc de Tukey:")
[1] "Resultados de la Prueba Post-Hoc de Tukey:"
TukeyHSD(modelo_anova)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = Gasto_Mensual ~ Dispositivo_Principal, data = datos_encuesta)

$Dispositivo_Principal
                   diff       lwr      upr     p adj
iOS-Android -1.31914255 -4.674943 2.036658 0.6253197
Web-Android -1.34191942 -7.020312 4.336473 0.8436824
Web-iOS     -0.02277687 -5.826467 5.780914 0.9999531
  • Interpretación:
    1. ANOVA: El p-valor del ANOVA es muy bajo (< 2e-16). Esto nos dice que existe al menos una diferencia significativa entre las medias de gasto de los tres grupos.
    2. Tukey HSD: El test post-hoc nos da el detalle. La columna p adj (p-valor ajustado) nos dice qué pares son diferentes:
      • iOS-Android: p-valor < 0.001. Diferencia significativa.
      • Web-Android: p-valor = 0.99. No hay diferencia significativa.
      • Web-iOS: p-valor < 0.001. Diferencia significativa.
    • Conclusión de negocio: Los usuarios de iOS gastan significativamente más que los de Android y Web. Sin embargo, no hay una diferencia de gasto significativa entre los usuarios de Android y los de Web.

Conclusión

Hemos recorrido un camino práctico desde la pregunta de negocio hasta la respuesta estadística. Hemos visto que con un puñado de comandos en R (chisq.test, t.test, prop.test, aov), podemos abordar una inmensa variedad de problemas de análisis.

La clave no es memorizar el código, sino interiorizar la lógica: formular una hipótesis, elegir la herramienta correcta para el tipo de datos y la pregunta, y traducir el p-valor y los intervalos de confianza en una conclusión de negocio clara y defendible. Este proceso es el corazón del análisis de datos en la investigación de mercados.

Referencias

Field, A. (2018). Discovering statistics using IBM SPSS statistics (5th ed.). Sage publications.

Moore, D. S., Notz, W. I., & Fligner, M. A. (2013). The basic practice of statistics. W. H. Freeman and Company.

Rossi, P. E., Allenby, G. M., & McCulloch, R. (2012). Bayesian statistics and marketing. John Wiley & Sons. https://doi.org/10.1002/9780470061578

Sawyer, A. G., & Peter, J. P. (1983). The significance of statistical significance tests in marketing research. Journal of Marketing Research, 20(2), 122-133. https://doi.org/10.1177/002224378302000202