Effets d’interaction en régression avec R

Quand l’effet d’un prédicteur dépend d’un autre — ajoutez un terme d’interaction avec *, interprétez-le, et testez si la synergie est réelle face au modèle additif

Modélisez les effets d’interaction en régression linéaire avec R. Ajoutez un terme d’interaction avec l’opérateur *, interprétez le coefficient d’interaction (comment l’effet d’un prédicteur change avec un autre), et testez si le modèle avec interaction surpasse le modèle additif avec anova() et le R² ajusté. Le principe hiérarchique, illustré sur les données marketing.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Un effet d’interaction signifie que l’effet d’un prédicteur sur la réponse dépend de la valeur d’un autre — ils ne sont pas indépendants (en marketing, une synergie).
  • Ajoutez une interaction en R avec l’opérateur * : lm(y ~ x1 * x2) ajuste les effets principaux et le terme d’interaction x1:x2.
  • Le coefficient d’interaction indique de combien la pente d’un prédicteur change pour une hausse d’une unité de l’autre.
  • Le principe hiérarchique : si vous conservez une interaction, conservez aussi ses effets principaux — même si leurs propres p-values ne sont pas significatives.
  • Vérifiez si l’interaction en vaut la peine en comparant le modèle avec interaction au modèle additif avec anova() et le R² ajusté.

Introduction

Une régression multiple standard est additive : elle suppose que l’effet de chaque prédicteur est le même quels que soient les autres. Souvent, c’est faux. Dépenser en publicité facebook peut rendre la publicité youtube plus efficace — un effet d’interaction (ou de synergie).

Le scénario : le rendement de la publicité youtube sur les ventes dépend-il de ce qui est aussi dépensé en facebook ? Un terme d’interaction répond à cette question — et vous dit si modéliser la synergie améliore réellement l’ajustement.

Les données

Nous utilisons le jeu de données marketing du package datarium — des budgets publicitaires et les sales résultantes pour 200 campagnes :

data("marketing", package = "datarium")
head(marketing, 4)
  youtube facebook newspaper sales
1  276.12    45.36     83.04 26.52
2   53.40    47.16     54.12 12.48
3   20.64    55.08     83.16 11.16
4  181.80    49.56     70.20 22.20

Le modèle additif (sans interaction)

D’abord le modèle additif standard — youtube et facebook, chacun avec un effet fixe :

data("marketing", package = "datarium")

model_add <- lm(sales ~ youtube + facebook, data = marketing)
summary(model_add)

Call:
lm(formula = sales ~ youtube + facebook, data = marketing)

Residuals:
     Min       1Q   Median       3Q      Max 
-10.5572  -1.0502   0.2906   1.4049   3.3994 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.50532    0.35339   9.919   <2e-16 ***
youtube      0.04575    0.00139  32.909   <2e-16 ***
facebook     0.18799    0.00804  23.382   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 2.018 on 197 degrees of freedom
Multiple R-squared:  0.8972,    Adjusted R-squared:  0.8962 
F-statistic: 859.6 on 2 and 197 DF,  p-value: < 2.2e-16

Cela suppose que l’effet de youtube est le même à chaque budget facebook. R² ajusté ≈ 0.896.

Ajouter l’interaction

Utilisez l’opérateur *youtube * facebook se développe en youtube + facebook + youtube:facebook (les deux effets principaux plus l’interaction). (Écrivez youtube:facebook si vous voulez uniquement le terme d’interaction.)

data("marketing", package = "datarium")

model_int <- lm(sales ~ youtube * facebook, data = marketing)
summary(model_int)

Call:
lm(formula = sales ~ youtube * facebook, data = marketing)

Residuals:
    Min      1Q  Median      3Q     Max 
-7.6039 -0.4833  0.2197  0.7137  1.8295 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)    
(Intercept)      8.100e+00  2.974e-01  27.233   <2e-16 ***
youtube          1.910e-02  1.504e-03  12.699   <2e-16 ***
facebook         2.886e-02  8.905e-03   3.241   0.0014 ** 
youtube:facebook 9.054e-04  4.368e-05  20.727   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.132 on 196 degrees of freedom
Multiple R-squared:  0.9678,    Adjusted R-squared:  0.9673 
F-statistic:  1963 on 3 and 196 DF,  p-value: < 2.2e-16

Interpréter l’interaction

Chaque coefficient — y compris youtube:facebook — est significatif, il y a donc une véritable interaction. L’équation ajustée est :

sales = 8.10 + 0.0191·youtube + 0.0289·facebook + 0.00091·(youtube × facebook)

Lisez-la en factorisant un prédicteur :

  • L’effet de youtube est (0.0191 + 0.00091 × facebook) par unité. Le rendement de youtube augmente donc avec le budget facebook — à facebook = 0, une hausse youtube de 1 k$ ajoute ~19 unités de ventes par 1000$ ; à facebook = 30 elle ajoute ~19 + 0.9 × 30 ≈ 46.
  • Symétriquement, l’effet de facebook est (0.0289 + 0.00091 × youtube) par unité.

C’est la synergie : les deux canaux s’amplifient mutuellement.

Avertissement

Le principe hiérarchique. Si vous conservez un terme d’interaction, conservez aussi ses effets principaux dans le modèle — même si la p-value propre d’un effet principal n’est pas significative. Une interaction sans ses effets principaux est presque toujours mal spécifiée et difficile à interpréter.

L’interaction en vaut-elle la peine ?

Comparez le modèle avec interaction au modèle additif. Le modèle avec interaction devrait avoir un R² ajusté plus élevé, et un F-test anova() vous dit si l’amélioration est significative :

data("marketing", package = "datarium")
model_add <- lm(sales ~ youtube + facebook, data = marketing)
model_int <- lm(sales ~ youtube * facebook, data = marketing)

c(additive = summary(model_add)$adj.r.squared,
  interaction = summary(model_int)$adj.r.squared)
   additive interaction 
  0.8961505   0.9672975 
anova(model_add, model_int)
Analysis of Variance Table

Model 1: sales ~ youtube + facebook
Model 2: sales ~ youtube * facebook
  Res.Df    RSS Df Sum of Sq      F    Pr(>F)    
1    197 801.96                                  
2    196 251.26  1     550.7 429.59 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Le R² ajusté passe de 0.90 à 0.97, et le F-test anova() est hautement significatif (p < 2e-16) — ajouter l’interaction améliore significativement le modèle. Pour ces données, le modèle avec interaction l’emporte.

Visualiser la synergie

Tracez youtube contre sales, coloré selon une scission de facebook — les droites ont des pentes différentes, ce qui est l’ interaction :

library(ggpubr)

data("marketing", package = "datarium")
marketing$fb_level <- ifelse(marketing$facebook > median(marketing$facebook),
                             "High facebook", "Low facebook")

ggscatter(marketing, x = "youtube", y = "sales",
          color = "fb_level", palette = "jco",
          add = "reg.line", legend = "right",
          xlab = "YouTube budget (k$)", ylab = "Sales") +
  ggpubr::stat_cor(aes(color = fb_level))

Scatter plot of sales versus youtube budget with separate regression lines for low and high facebook budget; the high-facebook line is steeper, showing the interaction.

La droite High facebook est plus pentue — youtube rapporte davantage quand les dépenses facebook sont élevées. Des droites non parallèles sont la signature visuelle d’une interaction.

Rapport

Une régression linéaire multiple a testé l’interaction entre la publicité youtube et facebook sur les ventes. L’ interaction était significative (b = 0.0009, p < 0.001), et le modèle avec interaction expliquait nettement plus de variance que le modèle additif (R² ajusté = 0.97 vs 0.90 ; F(1, 196) = 430, p < 0.001). L’ effet de youtube sur les ventes augmentait avec le budget facebook — une synergie entre les deux canaux.

Avec une interaction, \(y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \beta_3 (x_1 x_2)\). Factorisez \(x_1\) : \(y = \beta_0 + (\beta_1 + \beta_3 x_2)\,x_1 + \beta_2 x_2\) — ainsi la pente de \(x_1\) n’est plus constante mais vaut \((\beta_1 + \beta_3 x_2)\), une droite en \(x_2\). \(\beta_3\) est le taux auquel la pente de \(x_1\) change par unité de \(x_2\) (et, symétriquement, la pente de \(x_2\) par unité de \(x_1\)). \(\beta_3 = 0\) ramène au modèle additif.

Essayez en direct

Newspaper interagit-il avec youtube comme le fait facebook ? Ajustez sales ~ youtube * newspaper et examinez le terme d’interaction. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « ajoute un terme d’interaction à ma régression et dis-moi s’il améliore significativement le modèle » — elle répond avec du code que vous pouvez exécuter sur vos propres données et interprète l’interaction. The runtime is the judge. Ask Prova →

Problèmes courants

Vous avez supprimé un effet principal non significatif mais conservé l’interaction. Cela viole le principe hiérarchique — conservez les deux effets principaux dès que l’interaction est dans le modèle, sinon les coefficients deviennent ininterprétables.

Vous avez interprété le coefficient d’effet principal comme l’effet global du prédicteur. Avec une interaction, le coefficient de youtube est son effet uniquement quand facebook = 0 — pas son effet en moyenne. L’effet réel est (b_youtube + b_interaction × facebook), qui varie.

Vous avez ajouté toutes les interactions possibles. Les interactions se multiplient vite et surajustent. Ajoutez-les là où vous avez une raison d’en attendre une (ou un signal graphique clair), puis confirmez avec anova() — ne pêchez pas au hasard.

Questions fréquentes

Utilisez l’opérateur * dans la formule : lm(y ~ x1 * x2) ajuste à la fois les deux effets principaux et l’ interaction x1:x2. Utilisez les deux-points (x1:x2) pour le terme d’interaction seul, mais vous voudrez presque toujours * pour que les effets principaux suivent (le principe hiérarchique).

C’est de combien la pente d’un prédicteur change pour une hausse d’une unité de l’autre. Pour youtube:facebook = 0.0009, chaque unité supplémentaire de facebook relève l’effet par unité de youtube de 0.0009 (et vice versa). L’effet complet de youtube est b_youtube + b_interaction × facebook.

Si un modèle inclut un terme d’interaction, il devrait aussi inclure les effets principaux des variables de cette interaction — même quand ces effets principaux ne sont pas individuellement significatifs. Les retirer rend l’ interaction mal spécifiée et le modèle difficile à interpréter.

Comparez le modèle avec interaction au modèle additif avec anova(model_add, model_int) (un F-test significatif signifie que l’interaction améliore l’ajustement) et vérifiez que le R² ajusté augmente. Si le terme d’interaction est non significatif et que le R² ajusté ne s’améliore pas, préférez le modèle additif plus simple.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule live, ajustez sales ~ youtube * newspaper. L’interaction youtube–newspaper est-elle significative comme l’est celle youtube–facebook ?
  2. Conceptuel. Dans le modèle avec interaction, le coefficient de youtube est 0.019, plus petit que son 0.046 dans le modèle additif. Cela signifie-t-il que youtube est devenu moins important ? Pourquoi ou pourquoi pas ?

Remplissez le blanc avec newspaper, puis comparez sa p-value d’interaction avec celle de facebook. Pour la question 2, rappelez-vous ce que signifie le coefficient d’effet principal quand une interaction est présente (facebook = 0).

L’interaction youtube–newspaper est bien plus faible/non significative comparée à youtube–facebook — newspaper n’amplifie pas youtube comme le fait facebook. Pour la question 2 : non, youtube n’est pas devenu moins important. Avec l’interaction dans le modèle, le coefficient de youtube (0.019) est son effet uniquement quand facebook = 0 ; l’ effet réel est 0.019 + 0.0009 × facebook, qui à un budget facebook typique dépasse le 0.046 additif. Le nombre a changé de signification, pas d’importance.

AstuceQuel modèle, quand ?
  • Les prédicteurs agissent indépendammentrégression linéaire multiple.
  • L’effet d’un prédicteur dépend d’un autreeffets d’interaction (cette leçon).
  • L’effet d’un facteur dépend d’un autre facteur → interaction facteur * facteur (même syntaxe *) ; voir aussi l’ANOVA à deux facteurs.

Conclusion

Vous savez maintenant modéliser les effets d’interaction en régression avec R : ajoutez un terme avec *, interprétez le coefficient d’interaction comme une pente-qui-change, respectez le principe hiérarchique, et testez si la synergie est réelle en comparant le modèle avec interaction au modèle additif avec anova() et le R² ajusté. Quand les prédicteurs s’amplifient mutuellement, une interaction capture ce qu’un modèle additif manque.

Leçons connexes

Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Régression en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Effets d’interaction en régression avec R},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/regression/interaction-effects-in-regression-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Effets d’interaction en régression avec R.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/regression/interaction-effects-in-regression-in-r.