Begin'R
Les statistiques avec R
Navigation
[Retour au sommaire]
# Plans factoriels fractionnaires : interprétation et plans complémentaires :Objectifs * Interpréter les résultats de l'ANOVA pour un plan d'expériences factoriel fractionnaire * Construire un plan complémentaire L'interprétation des résultats de l'ANOVA doit se faire avec précautions, particulièrement pour les plans d'expériences fractionnaires où le désaliasage reste manuel. Le désaliasage est ici considéré comme l'identification de l'effet significatif parmi les effets aliasés dans un contraste significatif. Les résultats renvoyés par l'ANOVA sont présentés avec un facteur ou une interaction principale nommée, il convient de désaliaser "à la main" les différents contrastes pour interpréter le plan d'expériences fractionnaire. La commande `design.info(nom_du_plan)$aliased` donnant l'ensemble des alias et contrastes du plan d'expériences est très utile pour le désaliasage. Le désaliasage peut s'affectuer en suivant les hypothèses standards : * Les interactions d'ordre élevé sont négligeables (en général ordre 2 et au-delà) ; * Lorsqu'un contraste est négligeable, chaque effet aliasé dans ce contraste est négligeable ; * Une interaction faisant intervenir des facteurs non significatifs est non significative. :Exemple : Interprétation du plan d'expériences {#aovfrac, toggle=collapse} :Rappel : Générer le plan d'expérience plan1 {#p1, toggle=collapse} Le plan d'expériences plan1 de type $2^{5-2}$ permettant d'étudier les facteurs temps (A), température (B), agitation (C), humidité (D) et concentration (E) défini par les alias D=ABC et E=BC, randomisé selon le seed 324, avec 3 points au centre est généré par la commande : ```r library(FrF2) ``` ```r plan1<-FrF2(nruns=8, nfactors=5, factor.names=c("temps", "temperature","agitation", "humidite", "concentration"), randomize=TRUE, seed=324, generators=list(c(1,2,3),c(2,3)), ncenter=3) ``` | Réponse plan 1 | |------------------| |[](donnees/repplan1.csv)| La réponse peut alors être ajoutée à l'aide de la commande : ```r plan1<-add.response(plan1, response="donnees/repplan1.csv", InDec=",") ``` Régression : ```r regplan1<-lm(y~temps*temperature*agitation*humidite*concentration, data=plan1) summary(regplan1) ``` ``` ## ## Call: ## lm.default(formula = y ~ temps * temperature * agitation * humidite * ## concentration, data = plan1) ## ## Residuals: ## 1 2 3 4 5 6 7 ## -7.876e-02 -6.245e-17 -6.592e-17 -6.939e-17 1.041e-16 -1.293e+00 -5.204e-17 ## 8 9 10 11 ## -5.204e-17 1.006e-16 -6.245e-17 1.371e+00 ## ## Coefficients: (23 not defined because of singularities) ## Estimate Std. Error t value ## (Intercept) 89.2000 0.7701 115.832 ## temps -0.7846 0.4716 -1.664 ## temperature -0.5868 0.4716 -1.244 ## agitation 9.9879 0.4716 21.180 ## humidite -8.3264 0.4716 -17.656 ## concentration -0.7897 0.4716 -1.675 ## temps:temperature 14.1799 0.4716 30.069 ## temps:agitation 0.5252 0.4716 1.114 ## temperature:agitation NA NA NA ## temps:humidite NA NA NA ## temperature:humidite NA NA NA ## agitation:humidite NA NA NA ## temps:concentration NA NA NA ## temperature:concentration NA NA NA ## agitation:concentration NA NA NA ## humidite:concentration NA NA NA ## temps:temperature:agitation NA NA NA ## temps:temperature:humidite NA NA NA ## temps:agitation:humidite NA NA NA ## temperature:agitation:humidite NA NA NA ## temps:temperature:concentration NA NA NA ## temps:agitation:concentration NA NA NA ## temperature:agitation:concentration -0.7091 0.9030 -0.785 ## temps:humidite:concentration NA NA NA ## temperature:humidite:concentration NA NA NA ## agitation:humidite:concentration NA NA NA ## temps:temperature:agitation:humidite NA NA NA ## temps:temperature:agitation:concentration NA NA NA ## temps:temperature:humidite:concentration NA NA NA ## temps:agitation:humidite:concentration NA NA NA ## temperature:agitation:humidite:concentration NA NA NA ## temps:temperature:agitation:humidite:concentration NA NA NA ## Pr(>|t|) ## (Intercept) 7.45e-05 *** ## temps 0.23805 ## temperature 0.33940 ## agitation 0.00222 ** ## humidite 0.00319 ** ## concentration 0.23600 ## temps:temperature 0.00110 ** ## temps:agitation 0.38127 ## temperature:agitation NA ## temps:humidite NA ## temperature:humidite NA ## agitation:humidite NA ## temps:concentration NA ## temperature:concentration NA ## agitation:concentration NA ## humidite:concentration NA ## temps:temperature:agitation NA ## temps:temperature:humidite NA ## temps:agitation:humidite NA ## temperature:agitation:humidite NA ## temps:temperature:concentration NA ## temps:agitation:concentration NA ## temperature:agitation:concentration 0.51456 ## temps:humidite:concentration NA ## temperature:humidite:concentration NA ## agitation:humidite:concentration NA ## temps:temperature:agitation:humidite NA ## temps:temperature:agitation:concentration NA ## temps:temperature:humidite:concentration NA ## temps:agitation:humidite:concentration NA ## temperature:agitation:humidite:concentration NA ## temps:temperature:agitation:humidite:concentration NA ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 1.334 on 2 degrees of freedom ## Multiple R-squared: 0.9988, Adjusted R-squared: 0.994 ## F-statistic: 209.2 on 8 and 2 DF, p-value: 0.004766 ``` Dans le cas d'un plan avec points au centre, les hypothèses de l'ANOVA ne peuvent pas être vérifiées. Ici, les contrastes associés aux facteurs agitation et humidité et à l'interaction temps-température sont significatifs au seuil de 95%. Les différents effets aliasés dans chaque contraste sont les suivants : ```r design.info(plan1)$aliased ``` ``` ## $legend ## [1] "A=temps" "B=temperature" "C=agitation" "D=humidite" ## [5] "E=concentration" ## ## $main ## [1] "A=DE" "B=CE" "C=BE" "D=AE" "E=AD=BC" ## ## $fi2 ## [1] "AB=CD" "AC=BD" ``` Ainsi, le facteur A est aliasé avec l'interaction DE, le facteur B avec l'interaction CE etc... |Contraste|Remarque|Significatif (95%)|Effets non significatifs| Cause de non-significativité|Effets significatifs| |-----|-----|-----|-----|-----|-----| |A+DE|temps+humidite:concentration|non| temps et humidite:concentration|contraste non significatif| | |B+CE|temperature+agitation:concentration|non| temperature et agitation:concentration|contraste non significatif| | |C+BE|agitation+temperature:concentration|oui|temperature:concentration|temperature et concentration non significatifs|agitation | |D+AE|humidite+temps:concentration|oui|temps:concentration|temps et concentration non significatifs|humidite| |E+AD+BC|concentration + temps:humidite + temperature:agitation|non|concentration, temps:humidite et temperature:agitation|contraste non significatif|| |AB+CD|temps:temperature+agitation:humidite| oui| temps:temperature| temps et temperature non significtifs|agitation:humidite| |AC+BD|temps:agitation+temperature:humidite|non|temps:agitation et temperature:humidite| contraste non significatif| | D'après les différentes hypothèses décrites précédemment, on en déduit que les facteurs agitation (C), humidité (D) ainsi que l'interaction agitation-humidité (CD) ont un effet significatif sur la réponse y. ## Plans d'expériences complémentaires S'il reste des ambiguité après déasliasage (on ne peut pas identifier comme non-significatifs tous les effets sauf un pour chaque contraste significatif), le plan d'expériences fractionnaire doit être complété par un plan d'expériences complémentaire. La commande `fold.design()` du package FrF2 permet de générer le (ou les) plan(s) complémentaire(s) nécessaire(s) pour désaliaser les facteurs et interactions. Par défaut, cette commande déasliase tous les facteurs ce qui donne un plan de résolution IV minimum (les facteurs ne sont plus aliasés à des interactions d'ordre 1). Cette commande admet les arguments suivants : | **Rôle** | **Argument** | **Remarques** | |-------------|-----------|------------| |Nom de l'objet contenant le plan d'expériences|design| [ici](#design)| |numéro de facteur dont on souhaite changer l'alias|columns| [ici](#columns) | :Exemple : Générer un plan complémentaire {#design, toggle=popup} :Générer et interpréter le plan {#genplan4, toggle=collapse} Le plan 2 de type $2^{5-2}$ étudiant les facteurs C, L, R, V et U non randomisé, répété deux fois et ayant pour alias initiaux V=CLR et U=CL est généré grâce à la commande : ```r plan2<-FrF2(nruns=8, nfactors=5,factor.names=c("C","L", "R","V","U"), generators=list(c(1,2,3), c(1,2)),randomize=FALSE, replications=2) ``` | Réponse plan 2 | |------------------| |[](donnees/25-2.csv)| La réponse peut alors être ajoutée à l'aide de la commande : ```r plan2<-add.response(plan2, response="donnees/25-2.csv", InDec=",") ``` Les différents effets aliasés dans chaque contraste sont les suivants : ```r design.info(plan2)$aliased ``` ``` ## $legend ## [1] "A=C" "B=L" "C=R" "D=V" "E=U" ## ## $main ## [1] "A=BE" "B=AE" "C=DE" "D=CE" "E=AB=CD" ## ## $fi2 ## [1] "AC=BD" "AD=BC" ``` Interprétation du plan : |Contraste|Significatif (95%)|Effets non significatifs| Cause de non-significativité|Effets significatifs| Indétermination| |-----|-----|-----|-----|-----|-----| |C+LU|oui| | | |C et LU | |L+CU|oui| | | |L et CU | |R+VU|non|R et VU|contraste non significtif| | | |V+RU|oui|RU|R non significatif|V| | |CL+RV+U|oui|RV|R non significatif| |U et CL| |CR+LV|non|LR et CV|contraste non significatif| | | |LR+CV| oui| LR| R non significatif|CV| | Il reste des indétermination qui concernent C, L et U et leurs interaction CU, LU et CL. :Créer le plan complémentaire {#genplan2, toggle=collapse} Le plan complémentaire peut être créé à partir de la commande : ```r plan2b<-fold.design(plan2) design.info(plan2b)$aliased ``` ``` ## $legend ## [1] "A=C" "B=L" "C=R" "D=fold" "E=V" "F=U" ## ## $main ## character(0) ## ## $fi2 ## [1] "AB=CE=-DF" "AC=BE" "AD=-BF" "AE=BC" "AF=-BD" "CD=-EF" ## [7] "CF=-DE" ``` ```r plan2b ``` ``` ## run.no run.no.std.rp C L R fold V U y ## 1 1 1.1 -1 -1 -1 original -1 1 17.9 ## 2 2 2.1 1 -1 -1 original 1 -1 19.5 ## 3 3 3.1 -1 1 -1 original 1 -1 12.8 ## 4 4 4.1 1 1 -1 original -1 1 22.1 ## 5 5 5.1 -1 -1 1 original 1 1 16.5 ## 6 6 6.1 1 -1 1 original -1 -1 20.0 ## 7 7 7.1 -1 1 1 original -1 -1 14.1 ## 8 8 8.1 1 1 1 original 1 1 21.2 ## 9 9 1.2 -1 -1 -1 original -1 1 18.1 ## 10 10 2.2 1 -1 -1 original 1 -1 19.7 ## 11 11 3.2 -1 1 -1 original 1 -1 13.0 ## 12 12 4.2 1 1 -1 original -1 1 22.3 ## 13 13 5.2 -1 -1 1 original 1 1 16.7 ## 14 14 6.2 1 -1 1 original -1 -1 20.2 ## 15 15 7.2 -1 1 1 original -1 -1 14.3 ## 16 16 8.2 1 1 1 original 1 1 21.4 ## 17 17 16.1 1 1 1 mirror 1 -1 NA ## 18 18 15.1 -1 1 1 mirror -1 1 NA ## 19 19 14.1 1 -1 1 mirror -1 1 NA ## 20 20 13.1 -1 -1 1 mirror 1 -1 NA ## 21 21 12.1 1 1 -1 mirror -1 -1 NA ## 22 22 11.1 -1 1 -1 mirror 1 1 NA ## 23 23 10.1 1 -1 -1 mirror 1 1 NA ## 24 24 9.1 -1 -1 -1 mirror -1 -1 NA ## 25 25 16.2 1 1 1 mirror 1 -1 NA ## 26 26 15.2 -1 1 1 mirror -1 1 NA ## 27 27 14.2 1 -1 1 mirror -1 1 NA ## 28 28 13.2 -1 -1 1 mirror 1 -1 NA ## 29 29 12.2 1 1 -1 mirror -1 -1 NA ## 30 30 11.2 -1 1 -1 mirror 1 1 NA ## 31 31 10.2 1 -1 -1 mirror 1 1 NA ## 32 32 9.2 -1 -1 -1 mirror -1 -1 NA ## class=design, type= FrF2.generators.folded ## NOTE: columns run.no and run.no.std.rp are annotation, ## not part of the data frame ``` Le plan complémentaire a été ajouté aux essais du plan initial. Dans le plan ainsi créé, les facteurs ne sont plus aliasés aux interaction d'ordre 1 (la ligne $main de design.info renvoie la valeur `character(0)`). Une variable supplémentaire `Fold` a été automatiquement créée. Cette variable prend la valeur _original_ dans la partie initiale du plan et _mirror_ dans la partie correspondant au plan complémentaire. Les interactions de cette variable `Fold` apparaissent dans les informations fournies dans `design.info` (ici les interaction avec D) mais elles sont habituellement négligées. :Exemple : Générer un plan complémentaire {#columns, toggle=popup} Soit un plan factoriel fractionnaire $2^{6-3}$ défini par les alias initiales D=ABC, E=BC et F=AC non randomisé et sans points au centre. Ce plan est généré par la commande suivante : ```r plan6<-FrF2(nruns=8, nfactors=6, generators=list(c(1,2,3), c(2,3), c(1,3)),randomize=FALSE) plan6 ``` ``` ## A B C D E F ## 1 -1 -1 -1 -1 1 1 ## 2 1 -1 -1 1 1 -1 ## 3 -1 1 -1 1 -1 1 ## 4 1 1 -1 -1 -1 -1 ## 5 -1 -1 1 1 -1 -1 ## 6 1 -1 1 -1 -1 1 ## 7 -1 1 1 -1 1 -1 ## 8 1 1 1 1 1 1 ## class=design, type= FrF2.generators ``` Les alias associés à ce plan sont : ```r design.info(plan6)$aliased ``` ``` ## $legend ## [1] "A=A" "B=B" "C=C" "D=D" "E=E" "F=F" ## ## $main ## [1] "A=CF=DE" "B=CE=DF" "C=AF=BE" "D=AE=BF" "E=AD=BC" "F=AC=BD" ## ## $fi2 ## [1] "AB=CD=EF" ``` ```r plan6 ``` ``` ## A B C D E F ## 1 -1 -1 -1 -1 1 1 ## 2 1 -1 -1 1 1 -1 ## 3 -1 1 -1 1 -1 1 ## 4 1 1 -1 -1 -1 -1 ## 5 -1 -1 1 1 -1 -1 ## 6 1 -1 1 -1 -1 1 ## 7 -1 1 1 -1 1 -1 ## 8 1 1 1 1 1 1 ## class=design, type= FrF2.generators ``` L'interprétation du plan initial est donnée ci-dessous : |Contraste|significatif (95%)|effets non significatifs|cause de non-significativité|effets significatifs|ambiguités| |------|------|------|------|------|------| |A+CF+DE|oui|DE|D et E non significatifs| |A+CF| |B+CE+DF|oui|CE, DF| D et E non significatifs|B|-| |C+AF+BE|oui|BE|E non significatif| |C+AF| |D+AE+BF|non|D, AE, BF|contraste non significatif|-|-| |E+AD+BC|non|E, AD, BC|contraste non significatif|-|-| |F+AC+BD|oui|BD|D non significatif| |F+AC| |AB+CD+EF|oui|CD, EF| D et E non significatifs|AB|-| Puisqu'il reste des ambiguités lors de l'interprétation de ce plan, il faut faire un plan d'expériences complémentaire. Le plan permettant de lever les ambiguités est le plan défini par l'alias F=-AC. Ce plan complémentaire est généré avec la commande suivante : ```r plan6b<-fold.design(plan6, columns=6) plan6b ``` ``` ## A B C fold D E F ## 1 -1 -1 -1 original -1 1 1 ## 2 1 -1 -1 original 1 1 -1 ## 3 -1 1 -1 original 1 -1 1 ## 4 1 1 -1 original -1 -1 -1 ## 5 -1 -1 1 original 1 -1 -1 ## 6 1 -1 1 original -1 -1 1 ## 7 -1 1 1 original -1 1 -1 ## 8 1 1 1 original 1 1 1 ## 9 -1 -1 -1 mirror -1 1 -1 ## 10 1 -1 -1 mirror 1 1 1 ## 11 -1 1 -1 mirror 1 -1 -1 ## 12 1 1 -1 mirror -1 -1 1 ## 13 -1 -1 1 mirror 1 -1 1 ## 14 1 -1 1 mirror -1 -1 -1 ## 15 -1 1 1 mirror -1 1 1 ## 16 1 1 1 mirror 1 1 -1 ## class=design, type= FrF2.generators.folded ``` Le plan initial et le plan complémentaire sont distingués par l'ajout à la matrice des essais d'une variable "fold" supplémentaire. Cette variable qualitative prend la valeur _initial_ pour le plan initial et _mirror_ pour le plan complémentaire. :Compléments : Pourquoi choisir le plan défini par F=-AC ? {#plancomp1, toggle=collapse} Pour choisir le "bon" plan complémentaire qui permettra de lever les indéterminations mises en évidence, il faut regarder le tableau permettant de définir les alias. Dans le cas du plan6, ce tableau est : |**A**|B|**C**|AB|**AC**|BC|ABC|I| |---|---|---|---|---|---|---|---| |BCD|ACD|ABD|CD|BD|AD|D|ABCD| |ABCE|CE|BE|ACE|ABE|E|AE|BCE| |**CF**|ABCF|**AF**|BCF|**F**|ABF|BF|ACF| |DE|ABDE|ACDE|BDE|CDE|ABCDE|BCDE|ADE| |ABDF|DF|BCDF|ADF|ABCDF|CDF|ACDF|BDF| |BEF|AEF|ABCEF|EF|BCEF|ACEF|CEF|ABEF| |ACDEF|BCDEF|DEF|ABCDEF|ADEF|BDEF|ABDEF|CDEF| Les termes des contrastes posant problème sont tous soit sur la première ligne du tableau, soit sur la quatrième. Il convient donc de modifier le générateur d'alias de la quatrième ligne (I=ACF) pour lever les indeterminations. Il faut donc faire le plan complémentaire défini par F=-AC. La commande `fold.design()` est encore en cours de développement et ne marche pas avec tous les plans d'expériences (par exemple cela ne fonctionne pas avec les plans fractionnaires contenant des points au centre). :Compléments : Que faire quand `fold.design()` ne marche pas ? {#cpltr, toggle=collapse} Si vous êtes confrontés à ce problème, il faut construire "à la main" le plan complémentaire adapté et/ou utiliser des astuces pour construire le plan d'expériences complémentaire. :Exemple : Construire un plan {#construc, toggle=collapse} Si le plan6 de la partie précédente (exemple associé à columns; plan factoriel fractionnaire $2^{6-3}$ défini par les alias initiales D=ABC, E=BC et F=AC non randomisé) avait été construit avec des points au centre, comment construire le plan complémentaire défini par F=-AC ? :Générer le plan d'expériences {#g1, toggle=collapse} ```r plan6t<-FrF2(nruns=8, nfactors=6, generators=list(c(1,2,3), c(2,3), c(1,3)),randomize=FALSE, ncenter=3) plan6t ``` ``` ## A B C D E F ## 1 -1 -1 -1 -1 1 1 ## 2 1 -1 -1 1 1 -1 ## 3 -1 1 -1 1 -1 1 ## 4 1 1 -1 -1 -1 -1 ## 5 -1 -1 1 1 -1 -1 ## 6 1 -1 1 -1 -1 1 ## 7 -1 1 1 -1 1 -1 ## 8 1 1 1 1 1 1 ## 9 0 0 0 0 0 0 ## 10 0 0 0 0 0 0 ## 11 0 0 0 0 0 0 ## class=design, type= FrF2.generators.center ``` La commande `fold.design()`ne fonctionne pas ```r plan6t<-fold.design(plan6t, columns=6) ``` ``` ## Error in fold.design(plan6t, columns = 6): currently, designs with center points cannot be treated with fold.design ``` :Créer le plan d'expériences complémentaire {#g2, toggle=collpase} étape 1 : Générer le plan d'expériences sans points au centre, faire le plan d'expériences complémentaire puis rajouter les points au centres sur un tableur (excel par exemple) puis importer à nouveau le fichier .csv. Ici, 6 points au centre sont ajoutés, 3 pour le plan d'expérience initial et 3 pour le plan d'expérience complémentaire. ```r plan6<-FrF2(nruns=8, nfactors=6, generators=list(c(1,2,3), c(2,3), c(1,3)),randomize=FALSE) plan6b<-fold.design(plan6, columns=6) ``` étape 2 Créer un tableau comportant 7 colonnes correspondant aux facteurs à étudier et regroupant les points du cube et les points au centre à ajouter (un .csv par exemple) |Tableau| |------------------| |[](donnees/planexpcplt1.csv)| ```r plan6q <- read.csv2("donnees/planexpcplt1.csv", dec = ",", sep = ";", header = TRUE, stringsAsFactors = TRUE) plan6q ``` ``` ## A B C fold D E F X ## 1 -1 -1 -1 original -1 1 1 NA ## 2 1 -1 -1 original 1 1 -1 NA ## 3 -1 1 -1 original 1 -1 1 NA ## 4 1 1 -1 original -1 -1 -1 NA ## 5 -1 -1 1 original 1 -1 -1 NA ## 6 1 -1 1 original -1 -1 1 NA ## 7 -1 1 1 original -1 1 -1 NA ## 8 1 1 1 original 1 1 1 NA ## 9 -1 -1 -1 mirror -1 1 -1 NA ## 10 1 -1 -1 mirror 1 1 1 NA ## 11 -1 1 -1 mirror 1 -1 -1 NA ## 12 1 1 -1 mirror -1 -1 1 NA ## 13 -1 -1 1 mirror 1 -1 1 NA ## 14 1 -1 1 mirror -1 -1 -1 NA ## 15 -1 1 1 mirror -1 1 1 NA ## 16 1 1 1 mirror 1 1 -1 NA ## 17 0 0 0 original 0 0 0 NA ## 18 0 0 0 original 0 0 0 NA ## 19 0 0 0 original 0 0 0 NA ## 20 0 0 0 mirror 0 0 0 NA ## 21 0 0 0 mirror 0 0 0 NA ## 22 0 0 0 mirror 0 0 0 NA ``` Tout cela est bien évidemment faisable (codable) directement sur R mais plus aisé à mettre en oeuvre sur un tableur. La seule limitation à cette méthode est que le plan d'expériences ainsi obtenu n'est plus de type class design mais un dataframe classique et par conséquent certaines commandes rendant le traitement des plans d'expériences plus facile, telles que `add.response()`, `MEPlot()`, `IAPlot()`, ne fonctionnent plus. :Suite Plans d'expériences {#plexp, toggle=collapse, title-display=hidden} [Générer un plan d'ordre 1](caps_11_1_generer_un_plan_ordre_1.html) [Générer un plan d'ordre 2](caps_11_2_generer_un_plan_ordre_2.html) [Ajouter les réponses](caps_11_3_plans_experiences_ajout_reponse.html) [Analyse qualitative : graphiques des effets](caps_11_4_plans_experiences_graphiques_effets.html) [Analyse quantitative : régression et ANOVA](caps_11_5_plans_experiences_regression_anova.html) [Plans factoriels fractionnaires : interprétation et plans complémentaires](caps_11_6_plans_experiences_interpretation_fractionnaire_complementaire.html) [Isoréponses](caps_11_7_plans_experiences_isoreponses.html) [Exercices bilan](caps_11_8_exercice_recap_plans_exp.html)