|
1 | | -# Interactions |
2 | | - |
3 | | -Il y a deux façons de modéliser une interaction entre deux variables: |
4 | | - |
5 | | -- si une variable est quantitative et l'autre est qualitative, on |
6 | | - utilise l'argument `by` → `s(x, by=facteur)`, |
7 | | -- si les deux variables sont quantitatives, on inclut les deux termes |
8 | | - sous une même fonction non linéaire → `s(x1, x2)`. |
9 | | - |
10 | | -L'argument `by` permet de faire varier un terme non linéaire selon les |
11 | | -différents niveaux d'un facteur. Nous allons examiner ceci en utilisant |
12 | | -notre variable qualitative `x0` et examiner si la non-linérité de |
13 | | -`s(x2)` varie selon les différents niveaux de `x0`. Pour déterminer si |
14 | | -les courbes diffèrent significativement entre les niveaux du facteur, |
15 | | -nous allons utiliser une ANOVA sur l'interaction. |
16 | | - |
17 | | -```{r, echo = TRUE, eval = FALSE} |
18 | | -categorical_interact <- gam(y~x0+s(x1)+s(x2,by=x0),data=gam_data) |
19 | | -categorical_interact_summary <- summary(categorical_interact) |
20 | | -print(categorical_interact_summary$s.table) |
21 | | -plot(categorical_interact,page=1) |
22 | | -# ou nous pouvons utiliser la fonction vis.gam où theta représente la rotation du plan x-y |
23 | | -vis.gam(categorical_interact,view=c("x2","x0"),theta=40,n.grid=500,border=NA) |
24 | | -anova(two_smooth_model, categorical_interact,test="Chisq") |
25 | | -``` |
26 | | - |
27 | | -{width="350"} |
28 | | - |
29 | | -Nous pouvons constater à partir du graphique que les formes des termes |
30 | | -non linéaires sont comparables entre les quatre niveaux de `x0`. |
31 | | -L'ANOVA le confirme également (déviance = 98,6, *p* = 0,2347). |
32 | | - |
33 | | -Ensuite, nous allons examiner l'interaction non linéaire entre deux |
34 | | -termes quantitatifs, `x1` et `x2`. Cette fois-ci, l'argument `by` est |
35 | | -supprimé. |
36 | | - |
37 | | -```{r, echo = TRUE, eval = FALSE} |
38 | | -smooth_interact <- gam(y~x0+s(x1,x2),data=gam_data) |
39 | | -smooth_interact_summary <- summary(smooth_interact) |
40 | | -print(smooth_interact_summary$s.table) |
41 | | -plot(smooth_interact,page=1,scheme=3) |
42 | | -# plot(smooth_interact,page=1,scheme=1) donne un graphique comparable à vis.gam() |
43 | | -vis.gam(smooth_interact,view=c("x1","x2"),theta=40,n.grid=500,border=NA) |
44 | | -anova(two_smooth_model,smooth_interact,test="Chisq") |
45 | | -``` |
46 | | - |
47 | | -{width="350"} |
48 | | - |
49 | | -L'interaction entre `s(x1)` et `s(x2)` est significative et le |
50 | | -graphique en deux dimensions illustre très bien cette interaction non |
51 | | -linéaire. La relation entre y et x1 change en fonction de la valeur de |
52 | | -`x2`. Vous pouvez changez la valeur de l'argument `theta` pour tourner |
53 | | -l'axe du graphique. Si vous prévoyez exécuter un grand nombre de |
54 | | -graphiques, supprimez l'argument `n.grid = 500`, car ceci fait appel à |
55 | | -des calculs intensifs et ralentit R. |
| 1 | +# GAM avec des termes d'interaction |
| 2 | + |
| 3 | +Il y a deux façons de modéliser une interaction entre deux variables : |
| 4 | + |
| 5 | +- pour deux variables non-linéaire : `s(x1, x2)` |
| 6 | +- pour une variable non-linéaire et une variable linéaire (quantitative ou qualitative) : utiliser l'argument `by`, `s(x1, by = x2)` |
| 7 | + - Quand `x2` est qualitative, vous avez un terme non linéaire qui varie entre les différents niveaux de `x2` |
| 8 | + - Quand `x2` est quantitative, l'effet linéaire de `x2` varie avec `x1` |
| 9 | + - Quand `x2` est qualitative, le facteur doit être ajouté comme effet principal dans le modèle |
| 10 | + |
| 11 | +## Interaction entre variables non-linéaire et qualitatif |
| 12 | + |
| 13 | +Nous allons examiner l'effet de l'interaction en utilisant notre variable qualitative `Season` et examiner si la non-linéarité de `s(SampleDepth)` varie selon les différents niveaux de `Season`. |
| 14 | + |
| 15 | +```{r} |
| 16 | +factor_interact <- gam(Sources ~ Season + |
| 17 | + s(SampleDepth,by=Season) + |
| 18 | + s(RelativeDepth), |
| 19 | + data = isit, method = "REML") |
| 20 | +
|
| 21 | +summary(factor_interact)$s.table |
| 22 | +``` |
| 23 | + |
| 24 | +```{r, fig.height = 8} |
| 25 | +par(mfrow = c(2,2)) |
| 26 | +plot(factor_interact) |
| 27 | +``` |
| 28 | + |
| 29 | +:::explanation |
| 30 | +Les deux premiers graphiques montrent l'effet d'interaction entre notre variable lisse `SampleDepth` et chaque niveau de notre variable factorielle, `Season`. Voyez-vous une différence entre les deux courbes ? |
| 31 | +::: |
| 32 | + |
| 33 | +Les graphiques montrent quelques différences entre la forme des termes lisses entre les deux niveaux de `Season`. La différence la plus notable est le pic dans le deuxième panneau, qui nous indique qu'il y a un effet de `SampleDepth` entre 1000 et 2000 qui est important dans la saison 2, mais qui ne se produit pas dans la saison 1. Cela suggère que l'effet d'interaction pourrait être important à inclure dans notre modèle. |
| 34 | + |
| 35 | +Nous pouvons également représenter l'effet d'interaction en 3D sur un seul graphique, en utilisant `vis.gam()`. |
| 36 | + |
| 37 | +```{r} |
| 38 | +vis.gam(factor_interact, theta = 120, n.grid = 50, lwd = .4) |
| 39 | +``` |
| 40 | +> On peut changer le degré de rotation de notre plan x-y avec l'argument `theta`. |
| 41 | +
|
| 42 | +Pour vérifier notre hypothèse que cette interaction est importante, on peut faire une comparaison de modèles en utilisant l'AIC pour déterminer si le terme d'interaction améliore la performance de notre modèle. |
| 43 | + |
| 44 | +```{r} |
| 45 | +AIC(two_smooth_model, factor_interact) |
| 46 | +``` |
| 47 | + |
| 48 | +L'AIC de notre modèle avec une interaction factorielle entre le lisse `SampleDepth` et le `Season` a un score AIC plus bas, ce qui nous indique que ce modèle est plus performant que `two_smooth_model`. L'inclusion de cette interaction semble améliorer les performances de notre modèle. |
| 49 | + |
| 50 | + |
| 51 | +## Interaction entre variables non linéaires |
| 52 | + |
| 53 | +Finalement, nous regardons les interactions entre deux termes non linéaires, `SampleDepth` et `RelativeDepth`. |
| 54 | + |
| 55 | +```{r} |
| 56 | +smooth_interact <- gam(Sources ~ Season + s(SampleDepth, RelativeDepth), |
| 57 | + data = isit, method = "REML") |
| 58 | +summary(smooth_interact)$s.table |
| 59 | +``` |
| 60 | + |
| 61 | +Dans la section précédente, nous avons pu visualiser un effet d'interaction entre un terme non linéaire et un terme factoriel en dessinant une fonction lisse différente de `SampleDepth` pour chaque niveau de `Season`. |
| 62 | + |
| 63 | +Dans ce modèle, nous avons deux termes non linéaires, donc l'effet de `SampleDepth` varie de façon linéaire avec `RelativeDepth`, et vice-versa. Lorsque nous visualisons cette interaction, nous obtenons plutôt un gradient entre deux fonctions continues lissées : |
| 64 | + |
| 65 | +```{r} |
| 66 | +plot(smooth_interact, page = 1, scheme = 2) |
| 67 | +``` |
| 68 | + |
| 69 | +We can also plot this interaction on a 3D surface: |
| 70 | + |
| 71 | +```{r} |
| 72 | +vis.gam(smooth_interact, |
| 73 | + view = c("SampleDepth", "RelativeDepth"), |
| 74 | + theta = 50, n.grid = 50, lwd = .4) |
| 75 | +``` |
| 76 | +> Rappelez-vous, ce graphique peut être réorienté en changeant la valeur de l'argument `theta`. |
| 77 | +
|
| 78 | +:::explanation |
| 79 | +On peut changer la couleur du graphique 3D en utilisant l'argument `color`. Essayez de spécifier `color = "cm"` dans `vis.gam()` ci-dessus, et consultez `?vis.gam` pour plus d'options de couleurs. |
| 80 | +::: |
| 81 | + |
| 82 | +Les graphiques illustrent une interaction non linéaire, où `Sources` est plus faible à des valeurs élevées de `SampleDepth` et `RelativeDepth`, mais augmente avec `RelativeDepth` alors que `SampleDepth` est faible. |
| 83 | + |
| 84 | +Ainsi, il semble y avoir un effet d'interaction entre ces termes non linéaires. Est-ce que l'inclusion de l'interaction entre `s(SampleDepth)` et `s(RelativeDepth)` améliore notre modèle `two_smooth_model`? |
| 85 | + |
| 86 | +```{r} |
| 87 | +AIC(two_smooth_model, smooth_interact) |
| 88 | +``` |
| 89 | + |
| 90 | +Le modèle avec l'interaction entre `s(SampleDepth)` et `s(RelativeDepth)` a un AIC inférieur, ce qui signifie que l'inclusion de cette interaction améliore la performance de notre modèle, et notre capacité à comprendre les déterminants de la bioluminescence. |
0 commit comments