Plans d'expériences avec R
Les plans d'expérience permettent de déterminer les meilleurs paramétrages à réaliser pour en un minimum d'expérience.
Exemple : comment déterminer la meilleure recette d'un gâteau sans avoir à tester toutes les proportions possibles de farine/sucre/sel/levure/fruits...
L'essentiel de cette page !
La fonction pde() permet de réaliser très rapidement une analyse sur des expériences où 2 paramètres ont varié.
Cette fonction a été réalisée en partenariat avec Marwa Brahim et Julien Bousquet.
Cette fonction est à copier-coller telle quelle puis à utiliser.
Des versions futures devraient permettre de travailler avec un nombre "infini" de paramètres.
ATTENTION !
Avez-vous vérifié que vous avez au MINIMUM 6 combinaisons uniques (x,y) et que chaque variable x ou y dispose bien de MINIMUM 3 modalités ?
Etape 1 - Installer fonction pde() - VERSION 03 - 2020.01 (avec débogage) avec la librairie {KefiR}
install.packages("remotes") ; require(remotes)
remotes::install_github("Antoine-Masse/KefiR",force=TRUE)
# Répondre à la question (ou CRAN (2) ou None (3)).
# Relancer en répondant(1) si rien ne marche
# Charger la librairie {KefiR} sa fonction pde()
library("KefiR")
Étape 2 -Tracer
Les paramètres de la fonction pde()
x, y, z (les 2 paramètres et les notes hédoniques correspondantes)
xlim, ylim et zlim pour limiter manuellement l'affichage
dim : résolution de la nappe (valeur élevée = nappe lisse mais lente à tracer)
xlab, ylab, zlab et main : titres des axes et titre principal
col : une liste de couleurs pour créer un gradient de couleurs
alpha : transparence de la nappe (0.1 transparente, 1 opaque)
pch : type de points (seulement en mode 2)
col.pt et cex.pt : couleurs et taille de points (seulement en mode 1)
mode : si 1 : exécution d'un graphique 3D html - si 2 : exécution de 2 graphiques 3D fixe et 3D interactif dans R
Étape 2.1 - Tracez le graphique en mode 1 et déterminer le couple (x,y) qui donnera la meilleure note z potentiellement
Remarque importante : x et y (x1 et y1) doivent être décorrélés ! sinon BUG !
On peut vérifier que tout va bien avec :
cor(x1,y1)$p.value # doit être supérieur à 0,05 idéalement.
# Exemple
x1 <- c(0,2,3,4,5,6) ; # sucre
y1 <- c(0,2,1,0,4,4) ; # sel
hedo <- c(0,3,3,2,0,0) ; # note hédonique obtenue en goûtant le produit
pde(x1,y1,hedo,xlab="Sucre",ylab="Sel",zlab="Note hédonique",main="Optimisation d'une recette",dim=30,mode=1)
# main : titre
# xlab, ylab, zlabs : titre des axes
# col : une liste de couleurs qui donne le gradient de couleur (par défaut du bleu vers le rouge)
# dim : la finesse de la nappe : valeur élevée = nappe lissée (par défaut 45)
Autre exemple :
a <- c(0,20,35,45,60,0,10,32,28,0,25)
b <- c(0,2,1,0,8,4,3,3,0,2,4)
c <- c(0,3,3,0,0,-1,3,5,0,0,0)
pde(a,b,c, col=c("blue","red"))
Étape 2.2 - Tracez le graphique en mode 2
# Exemple
x1 <- c(0,2,3,4,4,0,1,3,2,0,2) ; # sucre
y1 <- c(0,2,1,0,4,4,3,3,0,2,4) ; # sel
hedo <- c(0,3,3,0,0,0,3,5,0,0,0) ; # note hédonique obtenue en goûtant le produit
pde(x1,y1,hedo,xlab="Sucre",mode=2,pch=c(10:16),alpha=0.5,
ylab="Sel",zlab="Note hédonique",main="Optimisation d'une recette",dim=50)
Remarques et problèmes :
Si il y a un message d'erreur lorsque vous exécutez la commande pde, il va t'afficher tout un charabia dont une/deux lignes qui ressemble(nt) à cela :
Error in shell.exec(url) :
access to 'C:\Users\masse\AppData\Local\Temp\RtmpicjHOk\viewhtml112035ce193e/index.html' denied
Il suffit de copier l'adresse C:\Users\etc\index.html et de la coller dans la barre d'adresse d'internet explorer et ça marchera tout seul !
Débuggage :
Le mode 3 de la fonction permet de ne pas afficher le graphique et de juste contrôler la régression, cela plus rapidement.
Attention !
Le paramètre pch n'est pas disponible pour les graphiques 3D réalisés avec la librairie de R. On peut ajouter des paramétrages plus complexes type symbol="diamond" ou symbol = "circle" (à implémenter soi-même dans la comme add_trace.
Ajouter des segments en mode 1 !
On peut ajouter des segments en ajoutant la commande
add_segments(x = xy.max$x, xend = xy.max$x, y = xy.max$y, yend = xy.max$y, z = max, zend = 0) bien configurée précédée à la ligne d'avant de %>%