Valid XHTML     Valid CSS2    

Résumés progressifs des 11 séances pour l'unité libre (2007)

tous les dbf

Analyses statistiques et informatique

 

Séance 1

Les statistiques descriptives servent à synthétiser les valeurs numériques censées réprésenter "la" réalité. Pour l'unité libre, on s'intéresse seulement aux variables QT (unités sommables) et aux QL (codes arbitraires). Les fichiers de données doivent présenter ces variables en colonnes homogènes. Les données doivent être suffisamment documentées via un fichier descriptif pour qu'on puisse comprendre que représentent les unités et les codes.

Séance 2

L'analyse d'une QL se nomme tri à plat. L'analyse de deux QL se nomme tri croisé. Dans ces analyses, on fournit les tableaux de comptage et de fréquences, les histogrammes associés et on rédige un texte pour rendre compte de chaque analyse. Les manipulations sont faites d'abord avec Excel puis avec le logiciel R.

Séance 3

Le logiciel R, gratuit et programmable, s'utilise en mode interactif ou "batch". R dispose de fonctions générales, des fonctions statistiques et de fonctions graphiques. Les programmes du fichier statgh.r permettent d'automatiser les calculs et de les afficher "à la française"... Nous avons vu les fonctions length, table, sum, rbinom, round ainsi que min, max, mean, cat, print. L'indexation se fait avec des crochets en une ou deux dimensions.

Séance 4

L'analyse d'une QT se fait au travers de résumés comme la moyenne, l'écart-type, le coefficient de variation, les quantiles... Pour deux variables QT, on étudie la dépendance linéaire exprimée via le coefficient de corrélation linéaire. Pour ces analyses, la représentation en tige feuille, en courbe des données triées puis en boite à moustaches permet de visualiser les données. La rédaction associée essaie de décrire la tendance centrale et la variation des valeurs autour de la moyenne. Les manipulations sont faites d'abord avec Excel puis avec le logiciel R. Il manque à Excel certains calculs et graphiques de bases pour les QT.

Séance 5

Il existe plusieurs variances (la variance de l'échantillon, la variance de la population) et plusieurs façons de calculer la variance (moyenne du carré des écarts à la moyenne, différence entre moyenne des carrés et carré de la moyenne). Le calcul et la programmation de ces différentes notions sous R et sous Excel avec des données d'ordre de grandeur très différents peut aboutir à des résultats faux, principalement sous Excel.

Séance 6

L'analyse de la dépendance entre deux variables quantitatives X et Y définies pour les mêmes individus se nomme régression. Comme on s'intéresse principalement au modèle linéaire qui est le plus simple, on calcule ρ (rho) qui caractérise cette liaison : ce coefficient de corrélation linéaire est compris entre -1 et 1. S'il est proche de 1 en valeur absolue, il y a bien liaison linéaire et le calcul de a et b (toujours possible) pour le modèle Y = aX + b prend alors tout son sens. Pour n variables QT, tous les rho sont regroupés dans la matrice de corrélation qui est en fait la matrice de tous les coefficients de corrélation linéaire. La définition mathématique de rho ne correspond pas forcément à "la" réalité car corrélation et causalité sont des notions différentes. De plus, la transitivité faible (variables externes corrélées aux variables présentes dans l'analyse) peut rendre difficile l'interprétation des résultats.

Séance 7

La maitrise des calculs et des graphiques en R passe par l'approfondissement de la notion de fonction, de paramètre, de liste et de filtrage. En R, les fonctions peuvent avoir des paramètres par défaut, comme par exemple read.table et plot. On accède aux noms des éléments de liste avec names(x) où est la variable concernée. C'est le cas avec les résultats de la fonction lm et anova. Pour produire des sous-ensembles de données, il suffit souvent de filtrer les lignes ou les colonnes de données par des filtres logiques.

Séance 8

Même pour des fonctions comme allQT il est possible d'automatiser encore les traitements afin de gagner du temps surl'essentiel : la réflexion et le commentaire. On essaiera de produire le plus vite possible les calculs QT univariés et bivariés pour vins.dbf, ronfleqt.dbf, chu825qt.dbf et logement.dbf : on reprendra ensuite les calculs QL en univarié et bivarié pour ronfleql.dbf puis pour les questions Q7 à Q12 de pbio. Les modèles classiques de pièce, d'urne, de loterie... correspondent à des lois classiques comme la loi de bernoulli, la loi binomiale, la loi de poisson. La théorie des probabilités offre un cadre théorique, des formules et des démonstrations pour ces lois qui modèlisent divers types de "hasard". Excel comme R connait la plupart de ces lois.

Séance 9

Pour comparer des proportions, des moyennes, le cadre général est celui des tests d'hypothèses. On commence par définir une hypothèse nulle, on calcule ensuite la statistique d'écart associée et l'on compare à une valeur maximale autorisée liée à un risque de première espèce ou on utilise une "p-value" ("probabilité critique") pour déterminer si on rejette ou non l'hypothèse nulle. Excel est très incomplet pour ce genre de test alors que R est très complet.

 

Manipulations Excel et expressions R à connaitre


Excel

   Fichier   / Ouvrir (format Dbase)
   Fichier   / Enregistrer sous (format Dbase)
   Edition   / Copier  [ valeur, formule, style... ]
   Edition   / Coller
   Edition   / Collage spécial | Transposé
   Affichage / Zoom
   Insertion / Fonction | statistiques
   Insertion / Caractères spéciaux
   Insertion / Graphiques | Nuage de points
               Ajouter une Courbe de tendance
               | Options -> Afficher l'équation...
   Edition   / Supprimer  [colonne]
   Edition   / Supprimer  [ligne]
   Format    / Mise en Forme Automatique
   Format    / Cellule | Nombre | Nombre de décimales
   Outils    / Options | Général | Style de référence L1C1
   Données   / Trier
   Données   / Filtrer | Filtre automatique
   Données   / Rapport de tableau croisé dynamique | Disposition
               | Nombre de | Somme | Options [ afficher % du total ]
   Données   / Convertir | Fichier délimité | espaces multiples
   Onglet : insérer, supprimer, déplacer, renommer

   =somme(C2:C100)
   =moyenne(C2:C100)
   =ecartypep(C2:C100)
   =ecartype(C2:C100)
   =mediane(C2:100)
   =centile( C2:100 ; 0.5)
   =coefficient.correlation(D2:D19;E2:E19)
   =coefficient.determination(D2:D19;E2:E19)
   =loi.normale.standard.inverse(1-Alpha/2)

   Utilisation du modèle ASGQT.XLT

Logiciel R (refcard)

   quit
   x <- 1
   x+2
   print(x)
   cat(" valeur = ", x , "\n")
   y <- 0:10
   y*y
   y**4
   length(y)
   sum(y)
   mean(y)
   var(y)
   sd(y)
   cv <- function(x) { sd(x)/mean(x) }
   cv(y)
   help.start()
   rbinom(10,5,0.5)
   sim <- function(n) { rbinom(n,5,0.5) }
   sim(100)
   table( sim(500) )
   summary( y )
   fivenum( y )
   str( y )
   ls()


   source("k:/stat_ad/statgh.r")
   elfdata <- read.dbf("d:/elf.dbf")$dbf
   attach(elfdata)
   head(elfdata)
   tail(elfdata,n=5)
   str( elfdata )
   ag <- AGE
   decritQT(" AGE ", ag, "ans ")
   decritQT(" AGE ", ag, "ans ", TRUE)
   decritQT(" AGE ", ag, "ans ", TRUE ," d:/elf_age.png")
   sx <- SEXE
   table(sx)
   table(sx)/sum(sx)
   round( table(sx)/sum(sx) )
   decritQL(" SEXE ",sx, "homme femme")
   decritQL(" SEXE ",sx, "homme femme",TRUE)
   detach(elfdata)

   agehom      <- ag[ sx==0 ]
   agehomjeune <- ag[ sx==0 & ag < 30 ]

   head(ag)
   head(ag,n=10)
   tail(ag)
   mean(ag)
   sort(ag)
   order(ag)
   stem(ag)
   plot(ag)
   plot(ag,main="Tracé de l'AGE (dossier ELF) ")
   plot(ag,pch=19,col="blue")
   boxplot(ag)
   boxplot(ag ~ sx)
   png("elf_sexe.png",width=800,height=600)
     coul <- c("blue","red")
     csex <- coul[1+sx]
     plot(1:length(ag),sort(ag),xlab="individu",ylab="age",
        col=csex,bg=csex,pch=21)
     text(-10,0.90,pos=4,"couleurs pour sx ")
     text(-05,0.85,pos=4,"homme=bleu femme=rouge")
   dev.off()
   nomficg <- paste("graph",i,".png",sep="")

   vinsdata <- read.dbf("d:/vins.dbf")$dbf
   attach(vinsdata)
   vinsdata <-    vinsdata[ , -1 ]
   cbind( mean(vinsdata), sd(vinsdata) )

   plot(RFA)
   par(new=TRUE)
   points(CANADA)
   cor(x,y)
   lm(y~x)
   anova( lm(y~x) )
   summary(vins)
   cor( vins )
   pairs( vins )
   data()
   data(iris)
   demo("graphics")

   plot(ag)
   plot(ag,type="p")
   plot(ag,type="p",pch=19)
   plot(sort(ag),type="p",col="blue",pch=19,bg="orange",
        main="Age (dossier ELF)",ylim=c(0,100))
   source("~/Bin/statgh.r")
   elf <- read.dar("elf.dar")
   attach(elf)
   sx <- SEXE
   ag <- AGE
   sy <- sx
   sy[sx==0] <- "H"
   sy[sx==1] <- "F"
   co <- sy
   co[sx==0] <- "blue"
   co[sx==1] <- "red"
   idr <- order(ag)
   plot(1:99,ag[idr],pch=sy[idr],col=co)
   plot(1:99,ag[idr],type="p",col="blue",pch=19,
        bg="orange", main="Age (dossier ELF)",ylim=c(0,100))
   plot(1:99,ag[idr],type="p",col="blue",pch=sy,
        bg="orange", main="Age (dossier ELF)",ylim=c(0,100))
   par(mfrow=c(2,1))
   plot(...) numéro 1
   plot(...) numéro 2
   par(mfrow=c(1,1))
   plot(...)
   par(mfrow=c(2,2))
   plot(...) numéro 1
   plot(...) numéro 2
   plot(...) numéro 3
   plot(...) numéro 4
   boxplot(ag,col="yellow",main="Boite à moustaches d'AGE pour ELF")
   ma <- mean(ag)
   sa <- sd(ag)
   abline(h=median(ag),col="green",lwd=2)
   abline(h=ma,col="red",lwd=2)
   abline(h=ma-sa,col="blue",lwd=1.5)
   abline(h=ma+sa,col="blue",lwd=1.5)
   bam <- function(x,titre) {
       boxplot(x,main=titre,col="yellow")
       mx <- mean(x)
       ex <- sd(x)
       abline(h=median(x),col="green",lwd=2)
       abline(h=mx,col="red",lwd=2)
       abline(h=mx-ex,col="blue",lwd=1)
       abline(h=mx+ex,col="blue",lwd=1)
   } # fin de fonction
   bam(ag,titre="Boite à moustaches d'AGEpour ELF")
   agh <- ag[sy=="H"]
   bam(agh,titre="Boite à moustaches d'AGE Homme pour ELF")
   agf <- ag[sy=="F"]
   bam(agf,titre="Boite à moustaches d'AGE Femme pour ELF")
   boxplot(ag~sx,main="Hommes/Femmes pour AGE dans ELF",col="yellow")
   rect(0,0,3,100,col=rgb(red=180/256,green=210/256,blue=190/256))
   par(new=TRUE)
   boxplot(ag~sx,main="Hommes/Femmes pour AGE dans ELF",
           col="yellow",xaxt="n")
   axis(1,at=c(1,2),labels=c("Homme","Femme"))
   box()
   par(mfrow=c(2,1))
   vins <- read.dbf("vins.dbf")$dbf
   head(vins)
   attach(vins)
   vins <- vins[,-1]
   boxplot(vins,col="yellow")
   boxplot(vins,col="yellow",ylim=c(0,30000))
   par(mfrow=c(1,1))
   hist(sx)
   hist(sx,freq=TRUE)
   hist(sx,freq=TRUE,col="blue")
   hist(sx,freq=TRUE,col="blue",xaxt="n",ylim=c(0,100))
   axis(1,at=c(0.05,0.95),labels=c("Homme","Femme"))
   box()
   barplot(table(sx),ylim=c(0,100),col="blue")
   barplot(100*table(sx)/length(sx),ylim=c(0,100),col="blue")
   traceQL("SEXE, dossier ELF",sx,"Homme Femme")
   uk <- UK
   rf <- RFA
   rl <- lm(uk~rf)  # régression linéaire
   cm <- anova(rl)  # comparaison de moyennes
   names(rl)
   names(cm)
   ir <- order(rf)
   plot(rf[ir],uk[ir],pch=19,col="blue")
   abline(rl,col="red",lwd=2)
   plot(resid(rl))
   abline(h=0,col="green",lwd=2)


   cor(rf,uk)
   rfo <- rf[ir]
   uko <- uk[ir]
   nld <- length(rfo)-2
   rfo <- rfo[1:nld]
   uko <- uko[1:nld]
   rlo <- lm(uko~rfo)
   plot(rfo,uko,pch=19,col="blue")
   abline(rlo,col="red",lwd=2)
   res <- rl$residuals
   plot(res,pch=15,col="black") plot(res,pch=15,col="black")
   plot(uk,vaj,pch=15,col="black")
   abline(0,1,col="red",lwd=2)
   plot(rl)
   detach(elf)
   options(width=450)
   ronf <- read.dar("ronfle.dar")
   attach(ronf)
   head(ronf)
   ageronf <- AGE
   length(agelf)
   length(ageronf)
   ages <- c(agelf,ageronf)
   rep(1,10)
   dos <- c( rep(1,length(agelf)),rep(2,length(ageronf)) )
   rect(0,0,3,100,col=rgb(red=180/256,green=210/256,blue=190/256))
   par(new=TRUE)
   boxplot(age~dos,col="yellow",xaxt="n",main="Age ELF vs RONFLE")
   axis(1,at=c(1,2),labels=c("ELF","RONFLE"))
   lines(c(0.6,1.4),rep(mean(agelf),2),col="red",lwd=2)
   lines(c(0.6,1.4),rep(median(agelf),2),col="blue",lwd=2)
   lines(c(1.6,2.4),rep(mean(ageronf),2),col="red",lwd=2)
   lines(c(1.6,2.4),rep(median(ageronf),2),col="blue",lwd=2)
   cbind( length(agelf),mean(agelf),sd(agelf) )
   cbind( length(ageronf),mean(ageronf),sd(ageronf) )
   compMoyData("AGE Elf vs Ronfle",agelf,ageronf)
   rbind( cbind( length(agelf),mean(agelf),sd(ageronf) ),
          cbind( length(ageronf),mean(ageronf),sd(ageronf) ) ) -> mdr
   colnames(mdr) <- c("Taille","Moyenne","Ecart-type")
   row.names(mdr) <- c("Elf","Ronfle")
   mdr
   tapply(ag,sx,mean)
   elf <- read.dar("elf.dar")
   attach(elf)
   sx <- SEXE
   ag <- AGE
   sx <- as.factor(sx)
   levels(sx) <- c("homme","femme")
   boxplot(ag~sx)
   barplot(table(sx))

   vins   <- read.dbf("vins.dbf")$dbf
   vins   <- vins[,-1]
   nomcol <- colnames(vins)
   unites <- rep("hl",length(nomcol))
   allQT(vins,nomcol,unites)

   allqtdbf <- function(nomdbf,unites="???") {
     nomficdbf <- paste(nomdbf,".dbf",sep="")
     data   <- read.dbf(nomficdbf)$dbf
     data   <- data[,-1]
     nomcol <- colnames(data)
     if (length(unites)==1) {
        unites <- rep(unites,length(nomcol))
     } # fin de si
     allQT(data,nomcol,unites)
   } # fin fonction allqtdbf

   unites <- rep("hl",8)
   allqtdbf("vins",unites)
   allqtdbf("vins","hl")
   allqtdbf("vins")
   allqtdbf("chu825qt")
   allqtdbf("chu825qt",chaineEnListe("G/l UI/l mmo/l mug/l % mg/dl an"))

   ronfle  <- read.dbf("ronfleql.dbf")$dbf
   ronfcol <- 2:4
   ronfqlm <- matrix(nrow=3,ncol=3)

   ronfqlm[1,1] <- "SEXE"
   ronfqlm[1,2] <- c(" Sexe de la personne ?")
   ronfqlm[1,3] <- lstMod(c("homme","femme"))

   ronfqlm[2,1] <- "RONFLE"
   ronfqlm[2,2] <- c(" Ronfleur ou pas ?")
   ronfqlm[2,3] <- lstMod(c("non","oui"))

   ronfqlm[3,1] <- "TABAC"
   ronfqlm[3,2] <- c(" Fumeur ou pas ?")
   ronfqlm[3,3] <- lstMod(c("oui","non"))

   print(ronfqlm)
   allQL(ronfle,ronfqlm,ronfcol)

   ronfqlm[1,3] <- lstMod("homme femme")
   allQL(ronfle,ronfqlm,ronfcol)

   rbinom(100,5,0.2)
   dbinom(1,5,0.2)
   dbinom(0:5,5,0.2)
   qbinom(0.5,5,0.2)

   si <- rbinom(100,5,0.5)
   table(si)
   barlplot( table(si) )
   xi <- 0:5
   ni <- table(si)
   pi <- ni/sum(ni)
   sum(pi*xi)
   sum(pi*xi**2)
   sqrt(sum(pi*xi**2)-sum(xi*pi)**2)

   t.test(x,y)
   compMoyData(" age H vs F ",ageh,agef)
   prop.test(c(ia,ib),c(na,nb))
   compPourc(" Prop Hom/Fem ",10,80,30,70)
   rnorm(30)
   qnorm(0.975)
   qnorm(1-alpha/2)

   # fonctions sur chaines de caractères
   # avec le logiciel R

   modc    <- unlist(strsplit(tabmoda,"!"))
   debutit <- substr(titrelong,1,10)
   sprintf("%-10s",intit)
   formatC(odl[nnt,1],format="d",width=3,dig=0)
   paste(formatC(valc,format="f",width=3,dig=0)," %")
   paste(paste(chMod,"!"),collapse="")
   paste("Voici les 10 premières lignes de données (il y en a ",nbl," en tout)",sep="")
   longueurChaine <- nchar( laChaine )
   substr(x, start, stop)
   substring(text, first, last = 1000000)
   substr(x, start, stop) <- value
   substring(text, first, last = 1000000) <- value
   strtrim(x, width)
   deparse(args(lm))
   strwidth(s, units = "user", cex = NULL)
   strheight(s, units = "user", cex = NULL)
   all.lett <- c(letters, LETTERS)
   chartr(old, new, x)
   tolower(x)
   toupper(x)
   casefold(x, upper = FALSE)
   # inclassables ?
   options(width=180)
   library(foreign)
   lbw <- read.dbf("lbw.dbf") # attention, homonyme de read.dbf !
   sink("lbw.sor")
   lbw
   sink()
   library(gdata)
   dataCNV <- read.xls("s29.xls")

 

 

retour gH    Retour à la page principale de   (gH)