1. Paramètres du test et calcul de l’échantillon

On définit les taux de conversion actuels et cibles, puis on calcule la taille d’échantillon nécessaire par groupe.

# Paramètres
p_control   <- 0.10    # Taux actuel
mde_relatif <- 0.20    # On veut être capable de détecter au moins +20% de hausse
p_variant   <- p_control * (1 + mde_relatif) # 0.12

alpha     <- 0.05   # Seuil de significativité (5%)
power     <- 0.80   # Puissance statistique (80%)
# Calcul du nombre de visiteurs requis par groupe
res_taille <- power.prop.test(
  p1 = p_control,
  p2 = p_variant,
  sig.level = alpha,
  power = power,
  alternative = "two.sided"
)

n <- ceiling(res_taille$n)

cat("Nombre de visiteurs nécessaires par groupe :", n, "\n")
## Nombre de visiteurs nécessaires par groupe : 3841
cat("Taille totale de l'échantillon :", n * 2, "\n")
## Taille totale de l'échantillon : 7682

2. Simulation directe des totaux agrégés

Sans générer de lignes individuellement, on calcule directement le nombre de conversions théoriques attendues pour chaque groupe.

# Nombre de succès (conversions) attendus
succes_control <- round(n * p_control)
succes_variant <- round(n * p_variant)

# Affichage des totaux agrégés
cat("Conversions Control :", succes_control, "sur", n, "\n")
## Conversions Control : 384 sur 3841
cat("Conversions Variant :", succes_variant, "sur", n, "\n")
## Conversions Variant : 461 sur 3841

3. Test statistique rapide

On passe directement les totaux agrégés à la fonction prop.test().

# Test z de comparaison de proportions sur les agrégats
test_res <- prop.test(
  x = c(succes_control, succes_variant),
  n = c(n, n),
  correct = FALSE
)

# Résultat détaillé
print(test_res)
## 
##  2-sample test for equality of proportions without continuity correction
## 
## data:  c(succes_control, succes_variant) out of c(n, n)
## X-squared = 7.8838, df = 1, p-value = 0.004988
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  -0.034033226 -0.006060499
## sample estimates:
##     prop 1     prop 2 
## 0.09997397 0.12002083
# Décision rapide
if (test_res$p.value < alpha) {
  cat("✅ Résultat significatif (p-value =", round(test_res$p.value, 4), ")\n")
} else {
  cat("❌ Résultat non significatif (p-value =", round(test_res$p.value, 4), ")\n")
}
## ✅ Résultat significatif (p-value = 0.005 )