Listing du fichier perf2.php
00001 <?php
00002 # # (gH) -_- perf2.php ; TimeStamp (unix) : 17 Septembre 2014 vers 16:26
00003
00004 error_reporting(E_ALL | E_NOTICE | E_STRICT) ;
00005
00006 include_once("std7.php") ;
00007 include_once("perf_inc.php") ;
00008 include_once("../../statuno7.php") ;
00009
00010 $R = s_span("R","gbleuf") ;
00011
00012 $numSerie = 2 ;
00013 debutPageExoScr1($numSerie) ;
00014
00015 ## -------------------------------------------------------------------------------------------
00016
00017 sdl(3) ; echo cmt(' pour afficher toutes les solutions : intror1.php?solutions=1') ; sdl(3) ;
00018
00019 ## -------------------------------------------------------------------------------------------
00020
00021 p("texte") ;
00022 echo "" ;
00023 finp() ;
00024 debutSection() ;
00025
00026 $tableauDesRubriques = array() ;
00027 $idr = 0 ;
00028 #$idr++; $tableauDesRubriques[$idr] = "Rappels sur la notion de test, d'intervalle de confiance, de p-value" ;
00029 $idr++; $tableauDesRubriques[$idr] = "Fonctions usuelles de R pour les tests" ;
00030 $idr++; $tableauDesRubriques[$idr] = "Comparaisons de pourcentages" ;
00031 $idr++; $tableauDesRubriques[$idr] = "Comparaison d'une moyenne à une référence " ;
00032 $idr++; $tableauDesRubriques[$idr] = "Comparaisons de moyennes et ANOVA, paramétrique ou non paramétrique" ;
00033 #$idr++; $tableauDesRubriques[$idr] = "Couplage entre calculs et graphiques en statistiques inférentielles " ;
00034 $tdmCRLM = new tdm($tableauDesRubriques) ;
00035 $tdmCRLM->titre() ;
00036 $tdmCRLM->menu("oui","oui","nou") ;
00037
00038 pvide() ;
00039
00040 p() ;
00041 echo "Il est possible d'afficher toutes les solutions via ".href("perf2.php?solutions=1","?solutions=1","bouton_fin jaune_pastel nou")." " ;
00042 echo " et de toutes les masquer avec via ".href("perf2.php?solutions=0","?solutions=0","bouton_fin orange_pastel nou").". " ;
00043 finp() ;
00044
00045 finSection() ;
00046
00047 debutSection() ;
00048 $numExo = 0 ;
00049
00050 /*
00051 ## -------------------------------------------------------------------------------------------
00052
00053 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Rappels sur la notion de test, d'intervalle de confiance, de p-value
00054
00055 ## -------------------------------------------------------------------------------------------
00056
00057 blockquote() ;
00058
00059 blockquote() ;
00060
00061 p("texte") ;
00062 echo "Quel est le vocabulaire statistique usuel pour les tests en français et en anglais ?" ;
00063 finp() ;
00064
00065 finblockquote() ;
00066
00067 solution($numExo,$numSerie) ;
00068
00069 p("texte") ;
00070 echo "" ;
00071 finp() ;
00072
00073 finsolution() ;
00074
00075 finblockquote() ;
00076 */
00077
00078 ## -------------------------------------------------------------------------------------------
00079
00080 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Fonctions usuelles de R pour les tests
00081
00082
00083 ## -------------------------------------------------------------------------------------------
00084
00085 blockquote() ;
00086
00087 blockquote() ;
00088
00089 p("texte") ;
00090 echo "Rappeler quels sont les \"grands tests classiques\", paramétriques ou non. " ;
00091 echo "Quelles sont les fonctions usuelles de $R associées ?" ;
00092 finp() ;
00093
00094 p("texte") ;
00095 echo " Comment récupère-t-on la ".em("p-value")." ?" ;
00096 echo " Et la valeur de la statistique de test ?" ;
00097 echo " Et son intervalle de confiance ?" ;
00098 finp() ;
00099
00100 p("texte") ;
00101 echo b("Application :") ;
00102 echo " Donner l'intervalle de confiance de " ;
00103 echo " la variable ".b("Length")." pour les données ".href("http://www.info.univ-angers.fr/~gh/Datasets/lea.dar","lea.dar").". " ;
00104 finp() ;
00105
00106 finblockquote() ;
00107
00108 solution($numExo,$numSerie) ;
00109
00110 p("texte") ;
00111 echo "Pour comparer deux QT, on utilise un ".em(href("../testscompar.htm","test d'hypothèse"))." paramétrique ou non paramétrique " ;
00112 echo " suivant la normalité de la distribution des échantillons :" ;
00113 echo " pour des données normales non appariées, on utilise le ".em("test t de Student ")." qui est équivalent à une ".em("ANOVA à un facteur")." ; " ;
00114 echo " pour des données normales appariées, on utilise le ".em("test t de Student adapté aux données appariées")." ; " ;
00115 echo " pour des données non normales non appariées, on utilise le ".em("test de Mann-Whitney")." ; " ;
00116 echo " pour des données non normales appariées, on utilise le ".em("test de Wilcox")."." ;
00117 finp() ;
00118
00119 p("texte") ;
00120 echo " Voici le tableau résumé de ces divers cas pour comparer deux QT : " ;
00121 finp() ;
00122
00123 div("centre") ;
00124 blockquote () ;
00125 table(1,10,"collapse tajaunec") ;
00126 tr() ;
00127 th() ; nbsp() ; finth() ;
00128 th() ; echo b("Données non appariées") ; finth() ;
00129 th() ; echo b("Données appariées") ; finth() ;
00130 fintr() ;
00131 tr() ;
00132 td() ; echo b("Données normales ") ; fintd() ;
00133 td() ; echo "test t de Student (ou anova) " ; fintd() ;
00134 td() ; echo "test t de Student adapté" ; fintd() ;
00135 fintr() ;
00136 tr() ;
00137 td() ; echo b("Données non normales ") ; fintd() ;
00138 td() ; echo "test de Mann-Whitney" ; fintd() ;
00139 td() ; echo "test de Wilcox" ; fintd() ;
00140 fintr() ;
00141 fintable() ;
00142 finblockquote() ;
00143 findiv() ;
00144
00145 p("texte") ;
00146 echo "Pour comparer plus de deux QT, on utilise comme ".em(href("http://spiral.univ-lyon1.fr/mathsv/cours/stats/chap7/c7p2/c7p2.html","tests d'hypothèse"))." paramétriques " ;
00147 echo " des anova, ancova, manova et autre mancova (donc pour des données normales) ; dans le cas non paramétrique, " ;
00148 echo " on utilise le ".em("test de Kruskal-Wallis")." pour des données non normales non appariées " ;
00149 echo " et le ".em("test de Friedman")." pour des données non normales appariées." ;
00150 finp() ;
00151
00152 p("texte") ;
00153 echo " Voici le tableau résumé de ces divers cas pour comparer plus de deux QT : " ;
00154 finp() ;
00155
00156 div("centre") ;
00157 blockquote () ;
00158 table(1,10,"collapse tajaunec") ;
00159 tr() ;
00160 th() ; nbsp() ; finth() ;
00161 th() ; echo b("Données non appariées") ; finth() ;
00162 th() ; echo b("Données appariées") ; finth() ;
00163 fintr() ;
00164 tr() ;
00165 td() ; echo b("Données normales ") ; fintd() ;
00166 td() ; echo "anova, ancova etc." ; fintd() ;
00167 td() ; echo "anova, ancova etc." ; fintd() ;
00168 fintr() ;
00169 tr() ;
00170 td() ; echo b("Données non normales ") ; fintd() ;
00171 td() ; echo "test de Kruskal-Wallis " ; fintd() ;
00172 td() ; echo "test de Friedman" ; fintd() ;
00173 fintr() ;
00174 fintable() ;
00175 finblockquote () ;
00176 findiv() ;
00177
00178 p("texte") ;
00179 echo "En termes de graphiques, il est d'usage de tracer des boites à moustaches simultanées des QT, avec " ;
00180 echo " éventuellements des encoches (qui illustrent le test d'égalité des médianes)." ;
00181 finp() ;
00182
00183 p("texte") ;
00184 echo "Il faut noter que, pour plus de deux QT, lorsque les tests d'hypothèses montrent des différences significatives " ;
00185 echo " entre les QT, on doit effectuer des tests ".em("post hoc")." pour déterminer quelles QT sont significativement différentes." ;
00186 echo " De plus, ces comparaisons s'effectuent plutôt sur des groupes à l'intérieur d'une même QT que sur des " ;
00187 echo " QT différentes." ;
00188 finp() ;
00189
00190 p("texte") ;
00191 echo "Pour étudier conjointement deux QL, on effectue un tri croisé puis un test d'indépendance du khi-deux sur ce tri croisé " ;
00192 echo " si les effectifs présents le permettent." ;
00193 echo " En termes de graphiques, il est d'usage de tracer les histogrammes des effectifs des deux tris à plats " ;
00194 echo " et du tri croisé dans les deux sens afin de détecter d'éventuelles dépendances (changements de profils)." ;
00195 finp() ;
00196
00197 p("texte") ;
00198 echo "Voici un tableau résumé avec les principaux tests et les fonctions R associées :" ;
00199 finp() ;
00200
00201 blockquote() ;
00202 table(1,"9","collapse") ;
00203
00204 tr() ;
00205 td("L","tajaunec") ; echo " t.test() " ; fintd() ;
00206 td("L","tagris") ;
00207 echo href("http://finzi.psych.upenn.edu/R/library/stats/html/t.test.html","test de Student") ;
00208 fintd() ;
00209 td("L","tajaunec") ;
00210 echo " ".href("http://en.wikipedia.org/wiki/Student%27s_t-test","wiki correspondant") ;
00211 fintd() ;
00212 fintr() ;
00213
00214 tr() ;
00215 td("L","tajaunec") ; echo " wilcox.test() " ; fintd() ;
00216 td("L","tagris") ;
00217 echo href("http://finzi.psych.upenn.edu/R/library/stats/html/wilcox.test.html","test de Mann-Whitney") ;
00218 fintd() ;
00219 td("L","tajaunec") ;
00220 echo " ".href("http://en.wikipedia.org/wiki/Mann-Whitney_U_test","wiki correspondant") ;
00221 fintd() ;
00222 fintr() ;
00223
00224 tr() ;
00225 td("L","tajaunec") ; echo " wilcox.test() " ; fintd() ;
00226 td("L","tagris") ;
00227 echo href("http://finzi.psych.upenn.edu/R/library/stats/html/wilcox.test.html","test de Wilcox") ;
00228 fintd() ;
00229 td("L","tajaunec") ;
00230 echo " ".href("http://en.wikipedia.org/wiki/Wilcoxon_signed-rank_test","wiki correspondant") ;
00231 fintd() ;
00232 fintr() ;
00233
00234 tr() ;
00235 td("L","tajaunec") ; echo " kruskal.test() " ; fintd() ;
00236 td("L","tagris") ;
00237 echo href("http://finzi.psych.upenn.edu/R/library/stats/html/kruskal.test.html","test de Kruskal-Wallis") ;
00238 fintd() ;
00239 td("L","tajaunec") ;
00240 echo " ".href("http://en.wikipedia.org/wiki/Kruskal-Wallis_one-way_analysis_of_variance","wiki correspondant") ;
00241 fintd() ;
00242 fintr() ;
00243
00244 tr() ;
00245 td("L","tajaunec") ; echo " friedman.test() " ; fintd() ;
00246 td("L","tagris") ;
00247 echo href("http://finzi.psych.upenn.edu/R/library/stats/html/friedman.test.html","test de Friedman") ;
00248 fintd() ;
00249 td("L","tajaunec") ;
00250 echo " ".href("http://en.wikipedia.org/wiki/Friedman_test","wiki correspondant") ;
00251 fintd() ;
00252 fintr() ;
00253
00254 tr() ;
00255 td("L","tajaunec") ; echo " chisq.test() " ; fintd() ;
00256 td("L","tagris") ;
00257 echo href("http://finzi.psych.upenn.edu/R/library/stats/html/chisq.test.html","test du chi-deux") ;
00258 fintd() ;
00259 td("L","tajaunec") ;
00260 echo " ".href("http://en.wikipedia.org/wiki//Chi-squared_test","wiki correspondant") ;
00261 fintd() ;
00262 fintr() ;
00263
00264 fintable() ;
00265 finblockquote() ;
00266
00267 p("texte") ;
00268 echo "Les tests non paramétriques s'utilisent lorsque les conditions de normalité, d'égalité des variances " ;
00269 echo href("http://fr.wikipedia.org/wiki/Homosc%C3%A9dasticit%C3%A9","homoscédasticité")." etc. ne sont pas respectées. " ;
00270 echo "Leur utilisation est semblable à celles des test paramétriques. Ainsi ".b("wilcox.test(x,y)")." se substitue à ".b("t.test(x,y)") ;
00271 echo " et ".b("friedman.test(y ~ x)")." est semblable à ".b("anova(lm(y ~ x))")."." ;
00272 finp() ;
00273
00274 p("texte") ;
00275 echo "Lorsqu'on connait la fonction de R qui réalise le test demandé, il faut regarder le nom des composantes de la liste " ;
00276 echo " obtenue par application de cette fonction. Les noms sont obtenus via la fonction ".hrrr("names").". On peut alors extraire " ;
00277 echo " avec le symbole dollar la composante désirée :" ;
00278 finp() ;
00279
00280 entree_R("ic_length.r") ;
00281 sortie_R("ic_length.res") ;
00282
00283 finsolution() ;
00284
00285 finblockquote() ;
00286
00287 ## -------------------------------------------------------------------------------------------
00288
00289 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Comparaisons de pourcentages
00290
00291 ## -------------------------------------------------------------------------------------------
00292
00293 blockquote() ;
00294
00295 blockquote() ;
00296
00297 p("texte") ;
00298 echo "La parité Femme/Homme est-elle respectée dans les données " ;
00299 echo " ".href("http://www.info.univ-angers.fr/~gh/Datasets/elf.dar","elf.dar")." ? " ;
00300 echo " On trouvera des informations sur ces données à l'URL ".href("http://www.info.univ-angers.fr/pub/gh/Datasets/elf.htm","elf.htm").". " ;
00301 finp() ;
00302
00303 p("texte") ;
00304 echo "Peut-on considérer que les différents règnes sont représentés équitablement dans les données " ;
00305 echo " ".href("http://www.info.univ-angers.fr/~gh/Datasets/lea.dar","lea.dar")." ?" ;
00306 echo " Oon trouvera des informations sur ces données à l'URL ".href("http://www.info.univ-angers.fr/pub/gh/Datasets/lea.htm","lea.htm").". " ;
00307 finp() ;
00308
00309 finblockquote() ;
00310
00311 solution($numExo,$numSerie) ;
00312
00313 p("texte") ;
00314 echo "L'équirépartition peut se faire via un test de chi-deux sous hypothèse d'indépendance des deux modalités " ;
00315 echo " Homme/Femme de la variable qualitative SEXE. " ;
00316 echo " Intuitivement, la répartition en à peu près deux tiers de femmes, un tiers d'hommes laisse à penser qu'il n'y a pas " ;
00317 echo " égalité des proportions. " ;
00318 echo b("Attention :")." cette intuition peut être trompeuse puisque le test utilise le nombre total d'individus. " ;
00319 echo " Voir par exemple la fin de la page ".href("../pourquoi.htm","pourquoi").". " ;
00320 finp() ;
00321
00322 p("texte") ;
00323 echo " Voici comment avoir rapidement le détail des calculs pour le vérifier avec notre fonction " ;
00324 echo href("http://www.info.univ-angers.fr/~gh/wstat/statghfns.php?lafns=chi2Adeq","chi2Adeq()") ;
00325 echo " ou avec les fonctions classiques de R nommées " ;
00326 echo hrrr("prop.test") ;
00327 echo " et " ;
00328 echo hrrr("binom.test") ;
00329 echo ". " ;
00330 finp() ;
00331
00332 entree_R("elfhomfem.r") ;
00333 sortie_R("elfhomfem.res") ;
00334 graphe_R("elfhomfem.png") ;
00335 graphe_R("elfhomfem2.png") ;
00336
00337 p("texte") ;
00338 echo "Pour les règnes dans " ;
00339 echo " ".href("http://www.info.univ-angers.fr/~gh/Datasets/lea.dar","lea.dar")." " ;
00340 echo " le plus simple est de passer par notre fonction " ;
00341 echo href("http://www.info.univ-angers.fr/~gh/wstat/statghfns.php?lafns=decritQLf","decritQLf()") ;
00342 echo " avec son paramètre de test d'équirépartition mis à vrai (TRUE) :" ;
00343 finp() ;
00344
00345 entree_R("reign3.r") ;
00346 sortie_R("reign3.res") ;
00347 graphe_R("reign3.png") ;
00348
00349 p("texte") ;
00350 echo "On en déduit (évidemment !) qu'il n'y a pas équirépartition, le règle très majoritaire étant celui des plantes " ;
00351 echo "(".em("Viridiplantae").")." ;
00352 finp() ;
00353
00354 finsolution() ;
00355
00356 finblockquote() ;
00357
00358 ## -------------------------------------------------------------------------------------------
00359
00360 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Comparaison d'une moyenne à une référence Comparaisons de moyennes et ANOVA
00361
00362 ## -------------------------------------------------------------------------------------------
00363
00364 blockquote() ;
00365
00366 blockquote() ;
00367
00368 p("texte") ;
00369 echo "Après avoir analysé la variable ".b("Length")." des données ".href("http://www.info.univ-angers.fr/~gh/Datasets/lea.dar","lea.dar")." " ;
00370 echo " (on trouvera des informations sur ces données à l'URL ".href("http://www.info.univ-angers.fr/pub/gh/Datasets/lea.htm","lea.htm")."), " ;
00371 echo " peut-on affirmer qu'en moyenne une protéine LEA comporte 361 résidus d'acides aminés ?" ;
00372 echo " Au passage, d'où provient cette valeur 361 ?" ;
00373 finp() ;
00374
00375 finblockquote() ;
00376
00377 solution($numExo,$numSerie) ;
00378
00379 p("texte") ;
00380 echo "Avant de réaliser ce test de conformité de moyenne à une valeur théorique, cela ne fait pas de mal d'analyser la " ;
00381 echo " variable ".b("Length")." :" ;
00382 finp() ;
00383
00384 entree_R("length.r") ;
00385 sortie_R("length.res") ;
00386 graphe_R("length.png") ;
00387
00388 p("texte") ;
00389 echo "La p-value du test de conformité très inférieure à 0,05 indique qu'on doit rejeter l'hypothèse selon laquelle " ;
00390 echo " en moyenne une protéine LEA comporte 361 résidus d'acides aminés. " ;
00391 finp() ;
00392
00393 p("texte") ;
00394 echo " La valeur 361 (qui est en fait une valeur de médiane et non pas de moyenne, ce qui est sans doute plus \"adapté\") " ;
00395 echo " provient de l'" ;
00396 echo href("http://www.pubmedcentral.nih.gov/articlerender.fcgi?artid=1150220","article très intéressant")." de Brocchieri et Karlin " ;
00397 echo " (Nucleic Acids Research, 2005) -- dont une copie " ;
00398 echo " locale est ".href("gki615.pdf","ici")." -- dans lequel on peut lire :" ;
00399 echo em(" The median length of the proteins annotated among Eukaryotes (361 amino acids) is much higher ") ;
00400 echo em(" than in Bacteria (267 amino acids).") ;
00401 finp() ;
00402
00403 finsolution() ;
00404
00405 finblockquote() ;
00406
00407 ## -------------------------------------------------------------------------------------------
00408
00409 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Comparaisons de moyennes et ANOVA, tests paramétriques et non paramétriques
00410
00411 ## -------------------------------------------------------------------------------------------
00412
00413 blockquote() ;
00414
00415 blockquote() ;
00416
00417 p("texte") ;
00418 echo "On voudrait comparer les distributions d'ages pour les femmes et les hommes dans les données " ;
00419 echo " ".href("http://www.info.univ-angers.fr/~gh/Datasets/elf.dar","elf.dar")." " ;
00420 echo " (on trouvera des informations sur ces données à l'URL ".href("http://www.info.univ-angers.fr/pub/gh/Datasets/elf.htm","elf.htm")."). " ;
00421 echo " Quels tests envisager ? Comment choisir ici entre tests paramétriques et non paramétriques ?" ;
00422 finp() ;
00423
00424 finblockquote() ;
00425
00426 solution($numExo,$numSerie) ;
00427
00428 p("texte") ;
00429 echo "Il y a bien sûr plusieurs " ;
00430 echo " façons de constituer le vecteur des ages des hommes et celui des femmes " ;
00431 echo " ou les sous-ensembles correspondants :" ;
00432 finp() ;
00433
00434 entree_R("ages1.r") ;
00435 sortie_R("ages1.res") ;
00436
00437 p("texte") ;
00438 echo "Mais en fait, grâce à la notation ".b("~")." (tilde) qui se lit " ;
00439 echo " «en fonction de», il n'y a pas besoin de décomposer quoi que ce soit :" ;
00440 finp() ;
00441
00442 entree_R("ages2.r") ;
00443 sortie_R("ages2.res") ;
00444
00445 p("texte") ;
00446 echo " Il serait certainement plus raisonnable de commencer " ;
00447 echo " par analyser la variable AGE globalement et par sous-groupe avant de décider quoi que ce soit :" ;
00448 finp() ;
00449
00450 entree_R("ages3.r") ;
00451 sortie_R("ages3.res") ;
00452
00453 graphe_R("elfage.png") ;
00454 graphe_R("elfAgeFemmes.png") ;
00455 graphe_R("elfAgeHommes.png") ;
00456
00457 p("texte") ;
00458 echo "Le peu de données dans le groupe des hommes et la non normalité apparente des données " ;
00459 echo " mène à la conclusion qu'il n'est pas conseillé d'utiliser une analyse paramétrique. On utilise " ;
00460 echo " donc un test de Wilcox et on trace des boites à moustaches." ;
00461 finp() ;
00462
00463 entree_R("ages4.r") ;
00464 sortie_R("ages4.res") ;
00465
00466 graphe_R("elfages.png") ;
00467
00468 p("texte") ;
00469 echo "La conclusion est qu'il n'y a pas de différence significative détectée au seuil de 5 % " ;
00470 echo " entre les hommes et les femmes pour la variable AGE dans ce petit échantillon d'une centaine de " ;
00471 echo " personnes dont deux tiers de femmes et un tiers d'hommes." ;
00472 finp() ;
00473
00474 finsolution() ;
00475
00476 finblockquote() ;
00477
00478 /*
00479 ## -------------------------------------------------------------------------------------------
00480
00481 $tdmCRLM->afficheRubrique("oui") ; $numExo++ ; # Couplage entre calculs et graphiques en statistiques inférentielles
00482
00483
00484 ## -------------------------------------------------------------------------------------------
00485
00486 blockquote() ;
00487
00488 blockquote() ;
00489
00490 p("texte") ;
00491 echo "Que trouve-t-on dans les packages ".b("stats")." et ".b("graphics") ;
00492 echo " comme fonctions qui permettent de calculer et de tracer conjointement des séries de données ?" ;
00493 finp() ;
00494
00495 p("texte") ;
00496 echo "Détailler ce qui est calculé et tracé dans les différentes analyses proposées à la page " ;
00497 echo href("http://forge.info.univ-angers.fr/~gh/Leadb/index.php?action=12&mode=0","LEAPdb Statistical analysis").". " ;
00498 finp() ;
00499
00500 finblockquote() ;
00501
00502 solution($numExo,$numSerie) ;
00503
00504 p("texte") ;
00505 echo "Commençons par analyser la variable" ;
00506 finp() ;
00507
00508 finsolution() ;
00509
00510 finblockquote() ;
00511
00512 */
00513 ## -------------------------------------------------------------------------------------------
00514
00515 finPageExercices($numSerie) ; # contient finSection() et finPage() ; la fonction est dans perf_inc.php
00516
00517 ?>
Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.
Retour à la page principale de (gH)