Production Automatisée de
Graphiques, Statistiques et Documents
gilles.hunault "at" univ-angers.fr
-- partie 4 sur 5 : Sweave et Knitr = LaTeX + R
Table des matières cliquable
1. Rapport sur la qualité de la fonction runif()
Il est possible d'afficher toutes les solutions via ?solutions=1 et de toutes les masquer avec ?solutions=0.
1. Rapport sur la qualité de la fonction runif()
Sous R, la fonction runif() produit des nombres "au hasard", uniformément répartis dans l'intervalle [0,1].
Ecrire du code R pour tester cette équirépartition puis en faire un rapport PDF via Sweave.
Modifier ensuite le document pour produire du HTML, du Microsoft Word et du PDF avec Knitr.
Solution : masquer la solution
Voici, dans le fichier testrunif.r, un exemple de programme R qui effectue des tirages aléatoires avec la fonction runif() et qui comptabilise les résultats :
testRunif <- function(nbEssais=10,nbValeurs=50) { ## 1. génération des valeurs aléatoires # remplissage de la matrice des résultats matRes <- matrix(nrow=nbEssais,ncol=nbValeurs) row.names(matRes) <- paste("essai",sprintf("%03d",1:nbEssais),sep="") for (idl in (1:nbEssais)) { matRes[idl,] <- runif(nbEssais) } # fin pour idl cat("\nextrait des tirages aléatoires\n") print(matRes[(1:5),(1:3)]) ## 2. analyse des valeurs aléatoires # si la répartition est uniforme, on doit avoir # autant de valeurs avant 0.5 qu'àprès 0.5 repVal <- as.data.frame(matrix(nrow=nbEssais,ncol=4)) names(repVal) <- c("nbVal avant 0.5","nbVal Après 0.5","p-value","code sig.") for (idl in (1:nbEssais)) { repVal[idl,1] <- sum( matRes[idl,] < 0.5 ) # valeurs avant repVal[idl,2] <- sum( matRes[idl,] > 0.5 ) # valeurs après # la différence est-elle significative ? pvalue <- binom.test( as.numeric(repVal[idl,(1:2)]), p=1/2 )$p.value repVal[idl,3] <- sprintf("%13.7f",pvalue) repVal[idl,4] <- as.sigcode(pvalue) } # fin pour idl # affichage (extrait) cat("\nextrait des résultats\n") print(repVal[(1:5),]) # autre façon de le vérifier : tester si la médiane # est égale à 0.5 # autre façon de le vérifier : tester si les médianes # sont égales # on renvoie le nombre de fois où la différence est significative nbSig <- sum(repVal[,3]<0.05) return( nbSig) } # fin de fonction testRunifSi on l'utilise via l'appel testRunif(10,5000) voici un exemple de résultats possibles :
> sinksrc("testrunif.r") ; testRunif(10,5000) extrait des tirages aléatoires [,1] [,2] [,3] essai001 0.3027810 0.7627705 0.915491133 essai002 0.2840194 0.6900370 0.004622558 essai003 0.7353400 0.9422325 0.757039258 essai004 0.4044046 0.9865974 0.096549742 essai005 0.6145550 0.7071765 0.085479367 extrait des résultats nbVal avant 0.5 nbVal Après 0.5 p-value code sig. 1 2000 3000 0.0000000 *** 2 1500 3500 0.0000000 *** 3 1000 4000 0.0000000 *** 4 2000 3000 0.0000000 *** 5 2000 3000 0.0000000 *** [1] 9Pour réaliser un document Sweave qui exécute ce fichier, il suffit de respecter la syntaxe proposée dans la documentation officielle, soit le document suivant, nommé testrunif.rnw :
\documentclass[a4paper]{article} \usepackage[french]{babel} \usepackage{Sweave} \usepackage{verbatim} \renewcommand{\thesection}{\arabic{section}. } \begin{document} \title{Test de la fonction runif()} \maketitle \section{M\'{e}thode utilis\'{e}e} On g\'{e}n\`{e}re $nbEssais$ de chacun $nbValeurs$. Toutes les valeurs g\'{e}n\'{e}r\'{e}es sont rang\'{e}es dans une matrice de r\'{e}sultats, \`{a} raison d'un essai par ligne. Pour chaque essai, on comptabilise le nombre de valeurs avant et apr\`{e}s 0.5 et on effectue un test binomial pour voir si la diff\'{e}rence est significative au seuil $\alpha=5~\%$. En fin de fonction, on renvoie le nombre de fois o\`{u} la diff\'{e}rence est significative. \section{R\'{e}sultats des tests} Voici ce que donne l'appel \verb+testRunif(nbEssais=10,nbValeurs=5000)+ << resultats, echo=TRUE, fig=FALSE >>= source("testrunif.r",encoding="latin1") nbs <- testRunif(10,5000) @ \newpage {\small \section*{Annexe : code de la fonction testrunif()} \verbatiminput{testrunif.r} }% fin de small \end{document}Et on trouvera dans runif.pdf le fichier PDF résultat.
Pour celles et ceux qui lisent plus facilement le français que l'anglais, on pourra consulter les liens r4ciam, semin-R et tdr78.pdf.
Pour générer des documents au format Markdown/Knitr, la syntaxe est légèrement différente, soit le document suivant, nommé testrunif.rmd :
--- title: "testrunif" author: "(gH)" date: "15 mars 2016" output: pdf_document --- ## Méthode utilisée On génère $nbEssais$ de chacun $nbValeurs$. Toutes les valeurs générées sont rangées dans une matrice de résultats, à raison d'un essai par ligne. Pour chaque essai, on comptabilise le nombre de valeurs avant et après 0.5 et on effectue un test binomial pour voir si la différence est significative au seuil $\alpha=5~\%$. En fin de fonction, on renvoie le nombre de fois où la différence est significative. ## Résultats des tests ```{r} source("testrunif.r",encoding="latin1") nbs <- testRunif(10,5000) ``` \pagebreak ## Annexe : code de la fonction testrunif() ```{r,echo=FALSE} readLines("testrunif.r") ```Les fichiers produits avec les options output: html_document, output: word_document et output: pdf_document sont respectivement nommés k-runif.html, k-runif.docx et k-runif.pdf.
2. Production d'un document de veille technologique
On s'intéresse à la fréquence fournie par Google d'un certain nombre de mots-clés, par exemple les mots python et ruby. Pour cela, on souhaite archiver ces fréquences avec la date à laquelle on a obtenu ces fréquences dans une base de données au sens de Sqlite et produire un document PDF qui affiche chronologiquement ces fréquences afin d'en analyser l'évolution.
Ecrire du code R pour interroger Google et stocker les fréquences avec la date puis en faire un document PDF via Sweave.
Solution : masquer la solution
Solution volontairement non communiquée.
3. Manuel d'analyses statistiques pour LEAPdb et sHSPdb
On trouve, pour la base de données LEAPdb, à la rubrique Statistical analysis, soit le lien statAn, deux manuels exhaustifs d'analyses statistiques de plusieurs centaines de pages. De quels types d'analyses s'agit-il ? Ecrire du code R et PHP pour reproduire ces manuels.
Solution : masquer la solution
Solution volontairement restreinte à l'archive leamanual.zip.
Code-source de cette page ; fichiers inclus : pagsd_inc.php et pagsd.js.
Retour à la page principale de (gH)