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 : afficher 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 : afficher 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 : afficher 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)