Valid XHTML     Valid CSS2    

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()

  2. Production d'un document de veille technologique

  3. Manuel d'analyses statistiques pour LEAPdb et sHSPdb

 

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 :  

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 testRunif
     

Si 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] 9
     

Pour 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 :  

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 :  

Solution volontairement restreinte à l'archive leamanual.zip.

 

Code-source de cette page ;  fichiers inclus : pagsd_inc.php et pagsd.js.

 

 

retour gH    Retour à la page principale de   (gH)