Traitements statistiques et Informatique. Utilisation du logiciel R

Transcription

Traitements statistiques et Informatique. Utilisation du logiciel R
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Traitements statistiques et Informatique.
Utilisation du logiciel R
Avertissement : Ce document est en cours d’élaboration. La présente version n’est
donc que la version alpha d’un travail qui demande à être complété par la suite…
Vous l’avez remarqué, le traitement des données statistiques est grandement facilité
avec Excel. Pourtant dans certains cas les tableurs ne sont pas les outils idéaux. Des
macros complémentaires sont proposés par Microsoft pour certains tests statistiques par
exemple, qui viennent compléter des fonctions statistiques intéressantes, mais le tableur
n’est pas l’outil idéal pour autant. C’est encore plus vrai pour les graphiques qui, s’ils
sont agréables à regarder pour le non-spécialiste, sont parfois très surprenants pour
quiconque examine avec attention les données à traiter. Par exemple Excel est capable
de représenter une série la série de données suivante :
35
6
9
15
26
30
32
30
25
20
15
10
5
0
1
2
3
4
5
6
En fait Excel « invente » une série d’abscisse qui n’a pas forcément de signification.
L’utilisation d’outils dédiés aux statistiques se comprend donc, et le succès de produits
tels SAS ou SPSS, ou Splus le démontre. Leur point commun : la performance et le prix.
Il faut savoir qu’il existe dans le domaine public un logiciel aux performances étonnantes,
et dont la syntaxe est proche de Splus. Ce logiciel gratuit est le logiciel R.
R est disponible entre autres aux adresses suivantes :
http://www.r-project.org/
http://mirror.internet.tp/cran/
http://cran.univ-lyon1.fr/
http://cran.cict.fr/
De nombreux sites proposent de la documentation sur ce programme, dont :
http://zoonek2.free.fr/UNIX/48_R/all.html (en anglais...)
http://www.pallier.org/ressources/tpr/tpR.html
http://pbil.univ-lyon1.fr/R/enseignement.html
http://www.mat.ulaval.ca/sites_de_cours/cours_stt/stt_19909/documentation_logiciel_r/
http://www-labsad.upmf-grenoble.fr/lafaye/html/manuelr.htm
http://zoonek2.free.fr/UNIX/48_R_2004/all.html (en français)
Des sites proposent un R-Web, c'est-à-dire la possibilité d’utiliser R vis l’interface d’un
navigateur, donc pouvoir le tester sans l’installer.
http://claree.univ-lille1.fr/Rweb/
http://pbil.univ-lyon1.fr/Rweb/
http://bayes.math.montana.edu/Rweb/Rweb.general.html
Page 1 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Son installation proche ne pose pas de problème. Au lancement on obtient :
R fonctionne donc en mode de commandes et permet de faire calculs, traitements, et
graphiques via un langage : le langage R.
Aide en ligne : > help.start() (au format html) quand le logiciel est bine installé…
Sa syntaxe, synthétique permet d’obtenir assez rapidement des choses intéressantes :
Opérations simples :
> 6+5
[1] 11
> 3*4
[1] 12
> 8/2
[1] 4
>
Affectation dans une variable, et manipulation de variables
> x<-15
> y<-24
> y-x
[1] 9
Traitement sur une série : la première la déclare dans une variable (nommée serie), la
seconde l’affiche, puis on effectue et on liste les traitements
> serie<-c(2,5,9,12,4,8,16,20,9,11,8,7)
> serie
[1] 2 5 9 12 4 8 16 20 9 11 8 7
> mean(serie)
[1] 9.25
> sd(serie)
[1] 5.029459
> max(serie)
[1] 20
> min(serie)
[1] 2
> var(serie)
[1] 25.29545
> summary(serie)
Page 2 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Min. 1st Qu.
2.00
6.50
Median
8.50
Mean 3rd Qu.
9.25
11.25
Max.
20.00
La dernière commande permet d’obtenir minimum, maximum, les trois quartiles (dont la
médiane), et la moyenne.
Vecteurs et matrices
R reconnaît deux types d’objets pouvant contenir des valeurs : les vecteurs et les
matrices.
Vecteurs :
Objet (variable de base). UN vecteur peut contenir du texte et/ou des valeurs
numériques. Une ou plusieurs valeurs. L’affectation de valeurs dans un vecteur de fait de
la manière suivante :nom_du_vecteur<-. Le signe <- affecte une valeur textuelle ou
numérique à un vecteur. Exemple :
> w<-5
> w
[1] 5
Confirmation :
> is.vector(w)
[1] TRUE
Même chose avec du texte
> t<-"coucou"
> t
[1] "coucou"
> is.vector(t)
[1] TRUE
Pour une série de valeurs consécutives :
liste<-1:10
> liste
[1] 1 2 3
4
5
6
7
8
9 10
Série de valeurs quelconques : On utilise la syntaxe suivante :
Nom_du_vecteur<-c(valeur1, valeur2, …), soit :
> vecteur<-c(5,2,9,10,14,3,8,16)
> vecteur
[1] 5 2 9 10 14 3 8 16
Vous aurez compris que saisir le nom de l’objet permet de faire afficher son contenu.
On peut aussi saisir au clavier valeur par valeur avec la fonction scan :
> vecteur2<-scan()
1: 6
2: 9
3: 2
4: 4
Page 3 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
5: 7
6:
Read 5 items
> vecteur2
[1] 6 9 2 4 7
Le premier retour chariot vide met fin à la saisie des valeurs du vecteur.
Insertion de lettres :letters
> letters
[1] "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q"
[18] "r" "s" "t" "u" "v" "w" "x" "y" "z"
Sélection d’échantillons :sample. . Exemple ci-dessous en sélectionnant 3 valeurs au
hasard parmi les 9 valeurs saisies : L’échantillonnage devient sympa…
> sample(c(5,8,6,9,3,23,56,1,7),3)
[1] 23 3 1
Même chose ici : choisir au hasard 1O nombres parmi les 500 premiers :
> sample((1:500),10)
[1] 281 123 14 375 279 77 357 161 184 325
Des vecteurs contenant des valeurs logiques sont fréquents ;
ouinon<-c(T,F,F,T,F,T,T)
> ouinon
[1] TRUE FALSE FALSE TRUE FALSE TRUE TRUE
Connaître le nombre et la liste des objets créés:ls()
> ls()
[1] "liste"
"Liste1"
"ouinon"
"t"
"tab"
"vecteur" "w"
Supprimer un objet :rm(nom_objet)
> rm(w)
> w
Error: Object "w" not found
Connaître le type de valeurs contenues dans un vecteur: mode(nom_objet)
> mode(t)
[1] "character"
> mode(vecteur)
[1] "numeric"
> mode(ouinon)
[1] "logical"
Les matrices (tableaux, data.frame)
L’exemple ci-dessous permet de comprendre que l’objet nommé tab n’est pas un vecteur,
mais un tableau dont les colonnes ont des propriétés ou des significations différentes.
> is.vector(tab)
Page 4 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
[1] FALSE
> tab
sexe poids taille
1
f
95
164
2
f
83
183
Un data.frame peut contenir plusieurs types de données( quantitatives, textuelles,
logiques) Par contre une matrice ne peut contenir qu’un seul type d’enregistrements.
> is.matrix(tab)
[1] FALSE
L’objet tab est donc un data.frame, et pas une matrice. La preuve.
[1] FALSE
> is.data.frame(tab)
[1] TRUE
La différence essentielle se fera sentir avec les traitements…
Création d’un data.frame :
Premier moyen : saisir un vecteur que l’on transforme en tableau :Ici le vecteur va
comporter 6 valeurs pour donner naissance à un tableau de 2 colonnes et 3 lignes, puis
un autre de 3 colonnes et 2 lignes.
> v0<-c(5,6,8,1,4,7)
> t1<-matrix(v0, nrow=3, ncol=2)
>t2<-matrix(v0, nrow=2, ncol=3)
> v0
[1] 5 6 8 1 4 7
> t1
[,1] [,2]
[1,]
5
1
[2,]
6
4
[3,]
8
7
> t2
[,1] [,2] [,3]
[1,]
5
8
4
[2,]
6
1
7
Autre moyen :
> tab0<-matrix(c(5,6,9,8,10,4,1,2), nrow=2)
> tab0
[,1] [,2] [,3] [,4]
[1,]
5
9
10
1
[2,]
6
8
4
2
> tab1<-matrix(c(5,6,9,8,10,4,1,2), ncol=2)
> tab1
[,1] [,2]
[1,]
5
10
[2,]
6
4
[3,]
9
1
[4,]
8
2
Autre exemple :
Page 5 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
> mat<-matrix(11:16,ncol=3)
> mat
[,1] [,2] [,3]
[1,]
11
13
15
[2,]
12
14
16
Par défaut les matrices sont remplies colonne par colonne. Pour les remplir ligne par ligne
ajouter l’argument byrow=T :
> tab2<-matrix(c(5,6,9,8,10,4,1,2), ncol=2, byrow=T)
> tab1
> tab2
[,1] [,2]
[,1] [,2]
[1,]
5
10
[1,]
5
6
[2,]
6
4
[2,]
9
8
[3,]
9
1
[3,]
10
4
[4,]
8
2
[4,]
1
2
> mat<-matrix(11:16,ncol=3, byrow=T)
> mat
[,1] [,2] [,3]
[1,]
11
12
13
[2,]
14
15
16
Renseignements sur une matrice :
Taille :
> dim(mat)
[1] 2 3
Nombre de lignes : > nrow(mat) (ici 2), de colonnes : > ncol(mat) (3)
Voir les noms des lignes et colonnes : > ncol(mat), > colnames(mat) (ici NULL car pas
encore de noms)
Nommer les lignes : > rownames(mat)<-c("H", "F")
Nommer les colonnes : > colnames(mat)<-c("Paris", "Bordeaux","Nice")
D’où la matrice :
> mat
Paris Bordeaux Nice
H
11
12
13
F
14
15
16
Extraire des éléments d’une matrice :
> tab1[1,2]
[1] 10
Deuxième colonne, puis première ligne :
> tab1[,2]
[1] 10 4 1 2
> tab1[1,]
[1] 5 10
Attention : la colonne est présentée en ligne…
Travail sur les vecteurs
Faire afficher que certaines valeurs : nom_vecteur[c(rangs)]
> vect<-10:15
Page 6 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
> vect
[1] 10 11 12 13 14 15
> vect<-10:15
> vect[3]
[1] 12
> vect[c(1,4,5)]
[1] 10 13 14
Soit le vecteur exemple suivant :
exemple<-c(5,6,2,8,4,7,1,5,3,9,12,4,14,5,6,3,19)
Nombre de valeurs :
> length(exemple)
[1] 17
Afficher que les valeurs de rang , 0, 10, 15.
> exemple[c(5,10,15)]
[1] 4 9 6
Afficher que les valeurs supérieures à 5 :
> exemple[exemple>5]
[1] 6 8 7 9 12 14
6 19
Valeurs comprises entre 5 et 10
> exemple[exemple>5 & exemple<10]
[1] 6 8 7 9 6
Valeurs inférieures à 5 ou supérieures à10.
> exemple[exemple<5|exemple>10]
[1] 2 4 1 3 12 4 14 3 19
Le ou est représenté par le caractère | (ALT GR 6)
Afficher que les valeurs uniques (une seule fois chaque valeur présente)
> unique(exemple)
[1] 5 6 2 8 4
7
1
3
9 12 14 19
5
5
Nombre de valeurs différentes :
> length(unique(exemple))
[1] 12
Tri croissant des valeurs
> sort(exemple)
[1] 1 2 3 3
4
4
5
6
6
7
Insertion de ce tri dans un nouveau vecteur :
> croissant<-sort(exemple)
Page 7 sur22
8
9 12 14 19
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
> croissant
[1] 1 2 3
> exemple
[1] 5 6 2
3
4
4
5
5
5
6
6
7
8
4
7
1
5
3
9 12
Les valeurs uniques triées :
> sort(unique(exemple))
[1] 1 2 3 4 5 6 7
8
9 12 14 19
8
4 14
9 12 14 19
5
6
3 19
Rang des valeurs du vecteur :
rank(exemple)
[1] 8.0 10.5
10.5
[16] 3.5 17.0
2.0 13.0
5.5 12.0
1.0
8.0
3.5 14.0 15.0
5.5 16.0
8.0
Idem avec les valeurs uniques :
rank(unique(exemple))
[1] 5 6 2 8 4 7
1
3
9 10 11 12
Tri de ces rangs :
> sort(rank(unique(exemple)))
[1] 1 2 3 4 5 6 7 8 9 10 11 12
Logique non ?
Calculs numériques :
Somme des valeurs:
sum(exemple)
[1] 113
Somme cumulée des valeurs :
> cumsum(exemple)
[1]
5 11 13 21
25
32
33
38
41
50
62
66
80
85
91
94 113
Produit des valeurs (uniques) :
> prod(unique(exemple))
[1] 1158312960
Produits cumulés des valeurs uniques :
> cumprod(unique(exemple))
[1]
5
30
[7]
13440
40320
60
362880
480
4354560
Moyenne des valeurs :
> mean(exemple)
[1] 6.647059
Page 8 sur22
1920
13440
60963840 1158312960
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Calculs vectorisés :
Double des valeurs uniques :
> unique(exemple)*2
[1] 10 12 4 16 8 14 2 6 18 24 28 38
Retirer 5 de chaque valeur et créer un vecteur (moinscinq) avec le résultat
> moinscinq<-exemple-5
> moinscinq
[1] 0 1 -3 3 -1 2 -4
0 -2
4
7 -1
9
0
1 -2 14
0
2
Différence entre les deux vecteurs :
> exemple-moinscinq
[1] 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
Ce résultat n’est guère surprenant…
Valeurs absolues du double des valeurs moins 10 :
> abs(2*exemple-10)
[1] 0 2 6 6 2
4
8
0
4
8 14
2 18
4 28
Logarithme népérien de chaque valeur unique :
> log(unique(exemple))
[1] 1.6094379 1.7917595 0.6931472 2.0794415 1.3862944 1.9459101 0.0000000
[8] 1.0986123 2.1972246 2.4849066 2.6390573 2.9444390
Racines carrées des valeurs uniques :
> sqrt(unique(exemple))
[1] 2.236068 2.449490 1.414214 2.828427 2.000000 2.645751 1.000000
1.732051
[9] 3.000000 3.464102 3.741657 4.358899
Minimum, maximum :
> min(exemple)
[1] 1
> max(exemple)
[1] 19
Moyenne, Variance :
> min(exemple)
[1] 1
> max(exemple)
[1] 19
Médiane, valeurs extrêmes :
> median(exemple)
[1] 5
> median(unique(exemple))
[1] 6.5
Page 9 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
> range(exemple)
[1] 1 19
Déciles :
> quantile(exemple, probs=seq(from=0, to=1, by=0.1))
0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
1.0 2.6 3.2 4.0 5.0 5.0 6.0 7.2 8.8 12.8 19.0
Quartiles :
> quantile(exemple, probs=seq(from=0, to=1, by=0.25))
0% 25% 50% 75% 100%
1
4
5
8
19
Donc médiane :
> quantile(exemple, probs=seq(from=0, to=1, by=0.5))
0% 50% 100%
1
5
19
Résumé des principaux indicateurs :
> summary(exemple)
Min. 1st Qu. Median
1.000
4.000
5.000
Mean 3rd Qu.
6.647
8.000
Max.
19.000
Facilités de saisie
REP : Répétitions.
Créer un vecteur de 5 valeurs identiques (3 par exemple)
> cinq<-rep(3,5)
> cinq
[1] 3 3 3 3 3
Avec des valeurs textuelles :
> text<-rep("Attention", 6)
> text
[1] "Attention" "Attention" "Attention" "Attention" "Attention" "Attention"
Les possibilités sont intéressantes :
> rep(c(1,2),3)
[1] 1 2 1 2 1 2
> rep(c(1,2),c(3,3))
[1] 1 1 1 2 2 2
SEQ : créer des suites :
Valeurs de 125 à 135 :
> 125:135
[1] 125 126 127 128 129 130 131 132 133 134 135
Page 10 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Valeurs de 35 à 100 avec un pas de 5 :
> seq(from=35, to= 100, by=5)
[1] 35 40 45 50 55 60 65
70
75
80
20
10
85
90
95 100
Suite de nombres inversés : REV :
Valeurs inversées de 90 à 90 :
> rev(90:80)
[1] 80 81 82 83 84 85 86 87 88 89 90
Valeurs inversées d’une suite de pas 10 :
> rev(seq(from=10, to=100, by=10))
[1] 100 90 80 70 60 50 40 30
Graphiques
Création d’un histogramme :
> hist(serie)
0
1
2
Frequency
3
4
5
Histogram of serie
0
5
pour obtenir :
10
15
20
serie
Lire des données : Read.table(« chemin et nom du fichier »).
Cela marche aussi avec des données distantes ; exemple :
read.table("http://andruccioli.u-bordeaux4.fr/R/tableau_1.txt", h=T)
On arrive alors à :
1
2
3
4
5
6
7
8
9
10
11
12
13
sexe poids taille
f
95
164
f
83
183
h
81
182
f
54
177
h
69
175
h
76
155
f
49
181
h
79
184
f
45
190
h
47
163
h
83
189
h
94
163
f
93
177
Page 11 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
14
15
f
h
68
59
184
187
Insérons ces données dans une variable (« matrice »)
tab<-read.table("http://andruccioli.u-bordeaux4.fr/R/tableau_1.txt", h=T)
Nous pouvons à présent manipuler sans difficulté ces données.
Editeur de données : edit(nom_du_fichier) ; soit avec notre exemple :
Edit(tab)
Modifions des données, et fermons la fenêtre de l’éditeur :
Vous avez remarqué qu’il ne s’est rien passé ; la fonction EDIT permet de modifier, mais
pas de sauvegarder ces modifications. Il faut donc stocker les résultats des modifications
faites avec edit dans une (nouvelle) variable.
Ainsi :tabmodif<-edit(tab) permet de modifier le tableau nommé tab et de sauvegarder
les modifications dans une nouvelle variable de type matrice : tabmodif.
> tab
sexe poids taille
1
f
95
164
2
f
83
183
3
h
81
182
> tabmodif
sexe poids taille
1
f
55
155
2
f
88
188
3
h
81
182
Sin on souhaite conserver la même variable : fix(tab) qui lance l’éditeur permettant de
saisir des modifications. Sa fermeture permet au tableau de conserver ces mises à jour.
> fix(tab)
> tab
sexe poids taille
1
f
22
122
2
f
25
125
3
h
81
182
Historique des commandes : Utiliser les touches de direction haut et bas pour faire
afficher les dernières commandes saisies.
Page 12 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Indicateurs synthétiques:
> summary(tab)
sexe
poids
taille
f:7
Min.
:22.00
Min.
:122.0
h:8
1st Qu.:48.00
1st Qu.:163.0
Median :68.00
Median :177.0
Mean
:62.93
Mean
:170.3
3rd Qu.:80.00
3rd Qu.:184.0
Max.
:94.00
Max.
:190.0
Ecrire une fonction :
Faire plus tard
Exporter des données
(paragraphe sur échanger des données)
Sauvegarde :
Sauver l’historique des commandes : C’est dans un fichier ;RHistory (File, puis Save,
history).
Sauver les objets créés : fichier RData : (File puis save image ou save Workspace selon
les versions.)
Lois de probabilités :beta, binomial, cauchy, chi-squared, exponential, F, gamma,
geometric, hypergeometric, log-lormal, logistic, normal, poisson, student, uniform,
weibull, wilcoxon.
Graphiques :
Egalement un des points forts de R. Peut-être un peu moins convivial u’Excel, mais R
présente des fonctions graphique qui permettent de disposer de graphiques statistiques
justes…
La fonction centrale : plot()
Exemple : création d’un vecteur et représentation :
x
3
4
5
6
7
> x<-c(5,6,7,3)
> plot(x)
1.0
1.5
2.0
2.5
Index
Page 13 sur22
3.0
3.5
4.0
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Plutôt basique ! mais les possibilités sont nombreuses pour améliorer ceci comme nous le
verrons plus loin. En ajoutant type="l" on obtient des courbes Avec deux vecteurs on
peut disposer d’une abscisse et d’une ordonnée très simplement :
6
x
4
5
20
12
3
16
y
24
7
> y<-c(12,14,20,26)
> plot(x,y, type="l") >
>plot(x,y, type="l")
12
3
4
5
6
16
7
20
24
y
x
TYPE :Syntaxe type="code", et le code donne :l pour les lignes, p pour les points, h
pour des bâtons…
Bien sûr le type de lignes et de points et paramétrable.
Col permet de modifier les couleurs, xlim(), et ylim() sont pratiques pour modifier les
limites des axes.
Exemple :
> x<-c(20,0,30,45,25)
> y<-c(3,5,9,4,12)
> plot(x,y)
> points(x,y, pch=3)
> lines(x,y, lty=4)
> text(10,8,"Remarque")
> abline(h=7)
> title("Premier essai")
8
Remarque
4
6
y
10
Premier essai
0
10
20
30
40
x
Autres graphiques :hist() pour les histogrammes, boxplot() pour les boîtes, barplot()
pour les barres horizontales.
Tests statistiques :
Test du khi2 :
Exemple avec le tableau de contingence suivant :
Sous Excel il nous faut construire le tableau
des effectifs théoriques pour avoir le khi2
calculé (7,6458) ; La fonction
khideux.inverse propose le khi2 théorique si
on donne le degré de lierté, pour un seuil
de 5% par exemple (9,4877)
La fonction test.khideux donne le seuil de
basculement entre H1 et H0, soit
ici :0,1054)
Voyons ce que cela donne sous R :
Insertion des données dans une matrice :
b<-matrix(c(45,45,62,35,47,40,60,50,45), ncol=3)
Réalisation du test :
Page 14 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
> chisq.test(b)
Pearson's Chi-squared test
data: b
X-squared = 7.6458, df = 4, p-value = 0.1054
R fournit donc directement le kh2 calculé, le degré de liberté, et le seuil de basculement.
Ajustement & Régression avec R
R permet avec un minimum d’effort de réaliser des ajustements et des régressions.
Régression linéaire simple (une variable explicative)
Entrée des données :
> x<-c(3,6,9,12,15,18,21,24)
> y<-c(20,50,40,70,40,60,50,80)
Première et deuxième droite d’ajustement :
> droite1<-lm(y~x)
> droite1
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept)
27.143
x
1.786
> droite2<-lm(x~y)
> droite2
Call:
lm(formula = x ~ y)
Coefficients:
(Intercept)
-0.4070
y
0.2714
Coefficient de corrélation :
> cor(x,y)
[1] 0.6961075
Test F :
> anova(droite1)
Analysis of Variance Table
Response: y
Df
Sum Sq Mean Sq F value
Pr(>F)
Page 15 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
x
1 1205.36 1205.36 5.6407 0.05514 .
Residuals 6 1282.14 213.69
--Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Tracé du nuage de points, puis ajout de la droite :
50
20
30
40
y
60
70
80
> plot(x,y)
> abline(droite1)
5
10
15
20
x
Régression multiple : (deux variables explicatives)
Entrée des données : comme précédemment :
> y<-c(85,70,100,140,115,105)
> x1<-c(3,5,9,12,14,17)
> x2<-c(11,14,15,16,19,23)
Régression :
> reg<-lm(y~x1+x2)
> reg
Call:
lm(formula = y ~ x1 + x2)
Coefficients:
(Intercept)
197.21
x1
13.38
x2
-13.99
ANOVA :
> anova(reg)
Analysis of Variance Table
Page 16 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Response: y
Df Sum Sq Mean Sq F value Pr(>F)
x1
1 1284.03 1284.03 31.821 0.01102 *
x2
1 1532.42 1532.42 37.977 0.00860 **
Residuals 3 121.06
40.35
--Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Le logiciel R permet de faire ce test facilement ; la syntaxe est la suivante :
(Remarque : les lignes écrites dans cette police sont les instructions R)
Saisie des valeurs : déclaration du tableau des observations.
> observations<-matrix(c(15,25,10,65,5,10,15,30,5,5,10,40), ncol=4,
byrow=T)
Nommons les lignes et les colonnes (optionnel pour le calcul)
> rownames(observations)<-c("M1","M2","M3")
> colnames(observations)<-c("C1","C2","C3","C4")
Affichons le tableau :
> observations
C1 C2 C3 C4
M1 15 25 10 65
M2 5 10 15 30
M3 5 5 10 40
Effectuons le test :
> chisq.test(observations)
Pearson's Chi-squared test
data: observations
X-squared = 14.0853, df = 6, p-value = 0.0287
Représentons graphiquement le tableau:
Histogramme :
Page 17 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
0
20
40
60
80
100
120
Histogramme
C1
C2
C3
C4
Boîte à moustaches (Boxplot) de Tukey
> boxplot(c1,c2,c3,c4, col=c("lightblue","lightpink","lightgrey","yellow"),
main="Boîte à moustache de Tukey")
Boîte à moustache de Tukey
10
10
20
20
30
30
40
40
50
50
60
60
Idem pour les magasins
Diagramme en mosaïque:
> mosaicplot(t(observations),
col=c("lightgreen","lightblue","lightyellow"), main="Diagramme en
mosaïque")
Page 18 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Diagramme en mosaïque
C2
C3
C4
M3
M2
M1
C1
Calculons les effectifs théoriques : pour cela il nous faut auparavant les totaux en lignes,
en colonnes et le total général :
>
>
>
>
>
>
margeC<-margin.table(observations,2)
margeM<-margin.table(observations,1)
tous<-sum(observations)
efftheoriques<-round(margeC%*%t(margeM)/tous,2)
efftheoriques<-t(efftheoriques)
efftheoriques
C1
C2
C3
C4
M1 12.23 19.57 17.13 66.06
M2 6.38 10.21 8.94 34.47
M3 6.38 10.21 8.94 34.47
Représentation graphique de ces effectifs théoriques :
mosaicplot(t(efftheoriques),col=c("lightblue","lightgreen","lightyellow"),
main="Mosaicplot - effectifs théoriques")
Page 19 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Mosaicplot - effectifs théoriques
C2
C3
C4
M3
M2
M1
C1
La confrontation avec le premier diagramme permet de visualiser les différences entre
effectifs, et de justifier l’utilisation d’un test.
Calculons à présent les fréquences absolues :
> freqabsolues<-round(observations/tous*100,2)
> freqabsolues
C1
C2
C3
C4
M1 6.38 10.64 4.26 27.66
M2 2.13 4.26 6.38 12.77
M3 2.13 2.13 4.26 17.02
ANOVA et R
Il est plus facile de présenter les données sous forme de colonnes pour faire un tel
traitement dans R. Le tableau précédent a don été retraité dans Excel et sauvegardé sous
la forme d’un simple fichier textes nommé test.txt. Il est présent à l’adresse suivante :
http://andruccioli.u-bordeaux4.fr/R/test.txt. Voici sa structure:
Page 20 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
Dans R, commençons par le récupérer avec l’instruction Read.table :
> observations<-read.table("http://andruccioli.u-bordeaux4.fr/R/test.txt",
h=T)
Vérifions:
> observations
mag cond don
1
1
1 15
2
2
1
5
3
3
1
5
4
1
2 25
5
2
2 10
6
3
2
5
7
1
3 10
8
2
3 15
9
3
3 10
10
1
4 65
11
2
4 30
12
3
4 40
Déclarons les facteurs lignes et colonnes (ici magasins puis conditionnements):
> observations$mag<-as.factor(observations$mag)
> observations$mag
[1] 1 2 3 1 2 3 1 2 3 1 2 3
Levels: 1 2 3
> observations$cond<-as.factor(observations$cond)
> attach(observations)
Demandons lui quelques indicateurs statistiques conditionnels par magasin, puis par
conditionnement : (Ci-dessous seuls les instructions en gras n été saisies…)
> by(don, mag, summary)
mag: 1
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
10.00
13.75
20.00
28.75
35.00
65.00
-----------------------------------------------------------mag: 2
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
5.00
8.75
12.50
15.00
18.75
30.00
Page 21 sur22
R et les traitements statistiques – Bernard Andruccioli – IUT Bordeaux Montesquieu – Département Tech de Co – 2005-2006
-----------------------------------------------------------mag: 3
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
5.0
5.0
7.5
15.0
17.5
40.0
> by(don, cond, summary)
INDICES: 1
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
5.000
5.000
5.000
8.333 10.000 15.000
-----------------------------------------------------------INDICES: 2
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
5.00
7.50
10.00
13.33
17.50
25.00
-----------------------------------------------------------INDICES: 3
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
10.00
10.00
10.00
11.67
12.50
15.00
-----------------------------------------------------------INDICES: 4
Min. 1st Qu. Median
Mean 3rd Qu.
Max.
30.0
35.0
40.0
45.0
52.5
65.0
Faisons une ANOVA à un facteur pour les magasins (Lignes) (en gras ce qui a été saisi)
> mag.aov<-aov(don~mag, data=observations)
> summary(mag.aov)
Df Sum Sq Mean Sq F value Pr(>F)
mag
2 504.17 252.08 0.7393 0.5043
Residuals
9 3068.75 340.97
Idem pour les conditionnements (Colonnes)
> cond.aov<-aov(don~cond, data=observations)
> summary(cond.aov)
Df Sum Sq Mean Sq F value Pr(>F)
cond
3 2622.92 874.31 7.3626 0.01091 *
Residuals
8 950.00 118.75
Et enfin une ANOVA à deux facteurs :
> deux.aov<-aov(don~cond+mag, data=observations)
> summary(deux.aov)
Df Sum Sq Mean Sq F value
Pr(>F)
cond
3 2622.92 874.31 11.7664 0.006331 **
mag
2 504.17 252.08 3.3925 0.103359
Residuals
6 445.83
74.31
--Signif. codes: 0 `***' 0.001 `**' 0.01 `*' 0.05 `.' 0.1 ` ' 1
Page 22 sur22