Aide-mémoire de statistique appliquée à la biologie

Transcription

Aide-mémoire de statistique appliquée à la biologie
Aide-mémoire de statistique
appliquée à la biologie
- Construire son étude et analyser les
résultats à l'aide du logiciel R -
Maxime HERVE
2010
AVANT-PROPOS
J'ai écrit ce livre à la fin de mon Master, principalement à l'attention des étudiants
de Master en biologie qui, lorsqu'ils sont en stage, ont peu de temps pour préparer
leur étude et en analyser les résultats. Comme une majorité de ces étudiants, les
statistiques n'étaient pas mon point fort, et je me suis souvent retrouvé perdu à ne pas
savoir que faire de mes données.
J'ai essayé de construire ce livre comme le guide que j'aurais aimé avoir à ma
disposition à ce moment là, et que je n'ai pas trouvé. Que ce soit clair, il ne constitue
pas un cours de statistiques. Un grand nombre d'ouvrages remplissent déjà
parfaitement ce rôle, certains sont présentés dans la bibliographie. Ce livre expose
simplement, lorsque l'on sait ce que l'on veut faire (ce qui n'est malheureusement pas
toujours le cas) (i) ce qu'il est possible d'utiliser parmi la multitude d'outils statistiques
disponibles, (ii) à quelles conditions utiliser ces outils pour réaliser une analyse
correcte et (iii) comment les utiliser à l'aide du logiciel R. J'ai choisi R car c'est un
logiciel de plus en plus répandu, qui tire sa force à la fois de sa gratuité, de sa
puissance et de la très grande communauté d'utilisateurs qui l'améliorent en
permanence.
Ce livre n'a pas vocation à être exhaustif. Il ne développe que ce qui est le plus
fréquemment utilisé, et je pense qu'il peut être suffisant dans de nombreux cas. Il ne
faut cependant pas hésiter à aller plus loin, par nécessité ou par envie, c'est comme
cela qu'on apprend.
Utiliser ce livre n'exige que des connaissances sommaires en statistique. En ce qui
concerne R il considère que les commandes de bases sont connues, c'est-à-dire
principalement manipuler des vecteurs (numériques et facteurs) et des tableaux. Si ces
bases ne sont pas acquises, certains très bons documents sont cités dans la
bibliographie. Le reste est expliqué pas à pas. Toutefois, si cela est nécessaire ou
simplement par curiosité, chaque fonction possède une aide qui peut être appelée
grâce à la syntaxe ?fonction
Parmi les fonctions présentées, un certain nombre sont à rentrer manuellement.
Même si cela peut être formateur, elles sont toutefois réunies dans un même fichier
disponible en ligne : http://maximerv.free.fr/Fichiers/Fonctions_maison.R
J'espère que vous trouverez dans ce livre les réponses à vos questions. Tout
commentaire, remarque ou suggestion, positif ou négatif, sera le bienvenu pour
l'améliorer (mail : [email protected]).
Le 19 Août 2010
Maxime Hervé
SOMMAIRE
L'ouvrage est divisé en trois parties :
La préparation de l'étude : souvent trop peu d'importance y est
attachée. Pourtant, cette phase est au moins aussi cruciale que l'analyse des
résultats puisqu'elle détermine la façon dont ceux-ci vont pouvoir être
analysés. Une étude bien préparée facilite grandement l'exploitation des
résultats, tandis qu'une étude mal préparée entraîne généralement des
complications au moment de l'analyse et de l'interprétation.
L'analyse descriptive des résultats : ce type d'analyse est toujours
indispensable, et selon l'objectif de l'étude il peut être suffisant. L'analyse
descriptive est souvent négligée pour "foncer sur les tests", ce qui conduit à
oublier la réalité des données de base (et par conséquent à compliquer voire
fausser l'interprétation des résultats).
L'analyse inférentielle des résultats : ce type d'analyse regroupe la
détermination des intervalles de confiance et la réalisation des tests
statistiques. L'analyse inférentielle est la seule phase de l'étude qui est
facultative, dans tous les cas elle doit passer après l'analyse descriptive.
1. PREPARATION DE L'ETUDE
1. L'étude par enquête
2. L'expérimentation
3. Les différents types de variables
4. La détermination de la taille de l'échantillon
2. ANALYSE DESCRIPTIVE DES RESULTATS
2.1. Statistique univariée
5. Graphiques de dispersion : la fonction stripchart()
6. Histogrammes : la fonction hist()
7. Boîtes à moustaches : la fonction boxplot()
8. La réduction des données à une dimension
2.2. Statistique bivariée
9. Nuages de points : la fonction plot()
10. La réduction des données à deux dimensions
2.3. Statistique multivariée
Choisir son analyse multivariée
Ce choix dépend de la nature des variables étudiées :
• toutes quantitatives : ACP
• toutes qualitatives :
 deux variables : AFC
 plus de deux variables : ACM
• à la fois quantitatives et qualitatives : Analyse mixte
11. L'Analyse en Composantes Principales (ACP)
12. L'Analyse Factorielle des Correspondances (AFC)
13. L'Analyse des Correspondances Multiples (ACM)
14. L'Analyse mixte de Hill et Smith
3. ANALYSE INFERENTIELLE DES RESULTATS
3.1. Un peu de théorie
3.1.1. Lois de probabilité
3.1.1.1. Lois de probabilité discontinues
15. Lois de probabilité discontinues - généralités
16. La loi binomiale
17. La loi de Poisson
18. La loi multinomiale
19. La loi binomiale négative
20. La loi de Pascal
21. La loi géométrique
22. La loi hypergéométrique
3.1.1.2. Lois de probabilité continues
23. Lois de probabilité continues - généralités
24. La loi normale
25. La loi exponentielle
26. La loi gamma
27. La loi de χ²
28. La loi de Fisher-Snedecor
29. La loi de Student
3.1.1.3. Autres distributions de probabilité
30. La distribution de probabilité de Mann-Whitney
31. La distribution de probabilité du test des signes de Wilcoxon
3.1.1.4. Relations entre les distributions de probabilité
32. Relations entre les distributions de probabilité
3.1.2. Risques et puissance associés aux tests statistiques
33. Principe des tests statistiques et risques associés à la conclusion
34. Le risque ou seuil de rejet α
35. La correction du seuil de rejet α
36. Le risque β et la puissance du test
3.2. Identification des données aberrantes
37. L'identification des données aberrantes
3.3. Intervalles de confiance et erreur standard
38. Intervalles de confiance et erreur standard
39. Graphiques en bâtons avec barres d'erreur
3.4. Tests d'hypothèses
40. Les différents types de tests statistiques
3.4.1. Conditions préalables à l'utilisation des tests
Ces conditions ne sont pas toujours demandées, cela dépend du test que
l'on souhaite utiliser.
41. Caractère aléatoire et simple d'une série d'observations
42. Ajustement à une distribution théorique
43. Egalité des variances de plusieurs séries de données
44. Les transformations de variables
3.4.2. Réalisation des tests
Souvent, plusieurs tests peuvent être utilisés pour réaliser la même chose.
Leurs conditions sont cependant plus ou moins restrictives, et leur puissance
plus ou moins grande (un test plus restrictif étant généralement plus
puissant). Ainsi, lorsque plusieurs tests seront disponibles ils seront
présentés du plus au moins restrictif, du plus "pointu" au plus "passepartout".
Comparaison de moyennes, régression ou analyse de la covariance ?
Dans tous les cas la variable à expliquer est unique et quantitative.
Le choix dépend de la nature des variables explicatives :
• toutes quantitatives : régression
• toutes qualitatives : comparaison de moyennes
• à la fois quantitatives et qualitatives : analyse de la
covariance
La cas des variables à expliquer qualitatives n'est pas abordé ici. Leur
étude passe par des analyses du type régression logistique, analyse
discriminante ou segmentation.
3.4.2.1. Statistique univariée
Tests sur des effectifs
45. Conformité de plusieurs effectifs avec des valeurs théoriques ou
comparaison de plusieurs effectifs
46. Comparaison de plusieurs effectifs ou indépendance de deux variables
qualitatives
Tests sur des proportions
47. Conformité d'une proportion avec une valeur théorique
48. Conformité de plusieurs proportions avec des valeurs théoriques
49. Comparaison de deux proportions
50. Comparaison de plusieurs proportions
Tests sur des moyennes
51. Conformité d'une moyenne avec une valeur théorique
52. Comparaison de deux moyennes
53. Comparaison de plusieurs moyennes - un facteur
54. Comparaison de plusieurs moyennes - deux facteurs
3.4.2.2. Statistique bivariée
Tests autour de la corrélation
55. Coefficient de corrélation linéaire entre deux variables
56. Conformité d'un coefficient de corrélation avec une valeur théorique
57. Comparaison de deux coefficients de corrélation
58. Comparaison de plusieurs coefficients de corrélation
Tests autour de la régression
59. La régression linéaire simple au sens des moindres carrés
60. La régression linéaire simple au sens des moindres rectangles
61. La régression non linéaire simple
Analyse de la covariance
62. L'analyse de la covariance (ANCOVA) - un facteur
3.4.2.3. Statistique multivariée
63. La régression linéaire multiple
ANNEXES
Index des fonctions à rentrer manuellement
Pour améliorer ses graphiques
Bibliographie et ouvrages/documents recommandés
1. L'étude par enquête
Elle consiste à collecter des informations sur un groupe d'individus dans
leur milieu habituel. Elle peut s'intéresser à tous les individus d'une
population (enquête complète) ou seulement à un échantillon (enquête par
échantillonnage).
Plusieurs méthodes d'échantillonnage peuvent être mises en œuvre :
• aléatoire et simple : les individus (au sens statistique) sont choisis
un à un, indépendamment les uns des autres et avec une chance
égale pour chacun d'être choisi
• systématique : un premier individu est choisi aléatoirement puis les
autres sont choisis de façon régulière à partir du précédent (ex : le
3ème, puis le 13ème, 23ème... rencontrés)
• stratifiée : la population est divisée en groupes aussi homogènes
que possible (ou strates), puis les individus sont choisis
indépendamment dans chaque groupe (de façon aléatoire ou
systématique)
• en grappes : plusieurs degrés ou niveaux sont définis de façon
hiérarchique, puis les individus sont choisis de façon aléatoire ou
systématique du niveau le plus élevé au moins élevé (ex : au niveau
"région", 2 régions sont choisies, puis dans chacune de ces régions,
au niveau "population" 3 populations sont choisies, puis à
l'intérieur de ces populations au niveau "individu" 20 individus sont
choisis)
• par quotas : l'échantillon est formé de façon à être le plus
représentatif possible de la population dont il est issu.
La majorité des tests statistiques exigent que l'échantillonnage soit aléatoire
et simple.
2. L'expérimentation
Elle consiste à provoquer volontairement les faits à étudier, et passe
donc nécessairement par l'élaboration d'un plan d'expérience. Celui-ci
comprend notamment les facteurs à faire varier, le nombre de répétitions à
réaliser et le dispositif expérimental à mettre en place. L'association des
modalités de plusieurs facteurs constitue un traitement.
Il existe plusieurs types de dispositifs expérimentaux, notamment les
dispositifs :
• complètement aléatoire : chaque individu est affecté à un
traitement aléatoirement
• en blocs aléatoires : les individus sont réunis en groupe aussi
homogènes que possibles (ou blocs), puis chaque individu au sein
d'un groupe est affecté aléatoirement à un traitement.
Quelle que soit la méthode employée, elle doit être clairement définie car
elle sera prise en compte dans les tests statistiques.
3. Les différents types de variables
Une variable est dite aléatoire lorsque chacune des valeurs qu'elle peut
prendre est associée à une probabilité d'apparition lorsqu'un individu est
choisi au hasard dans la population. On ne peut donc pas prédire à coup sûr
la valeur que possède un individu.
Il existe deux types de variables aléatoires :
• quantitatives : elles ont en général une infinité de valeurs
numériques possibles et peuvent être :
 continues (ex : masse, temps, distance, volume)
 discrètes (ex : dénombrement)
• qualitatives : elles sont en général non numériques (mais pas
toujours) et sont appelées facteurs. Leur valeur est appelée classe
ou modalité. Ces variables peuvent être :
 ordinales, lorsque les classes peuvent être ordonnées (ex :
classement)
 nominales, lorsque les classes ne peuvent pas être
ordonnées (ex : sexe).
Les classes d'une variable qualitative peuvent être exclusives, i.e. un individu
ne peut pas appartenir à plusieurs classes en même temps. Beaucoup de
tests statistiques exigent que les classes soient exclusives. Dans tous les cas,
le caractère d'exclusivité doit être déterminé avant toute analyse statistique.
Un facteur peut être fixé ou aléatoire. Généralement, un facteur informatif
(dont les modalités apportent une information utile ; ex : le sexe, la
présence/absence de lumière, la dose d'un substance...) est fixé, alors qu'un
facteur non informatif (dont les modalités sont issues d'un ensemble plus
grand de modalités possibles, n'apportant donc pas d'information utile ; ex :
le génotype, la famille, la population...) est aléatoire. Cette distinction,
toujours délicate, est fondamentale lors de l'analyse des données.
Que ce soit pour des variables qualitatives ou quantitatives, des séries de
données peuvent être appariées. C'est le cas notamment lorsque des
mesures sont répétées plusieurs fois sur le même individu, ou lorsque des
mesures sont effectuées sur des individus qui possèdent un lien de parenté
(il y a donc une corrélation d'origine génétique entre les résultats observés).
L'identification des séries appariées est obligatoire, puisque des tests
statistiques adaptés doivent être utilisés.
4. La détermination de la taille de l'échantillon
Il existe un lien entre le seuil de rejet α du test statistique utilisé (voir
fiches 33 et 34), la puissance de ce test (voir fiche 36), la différence entre les
paramètres mesurés et la taille de l'échantillon. Déterminer la taille de
l'échantillon à constituer passe donc par fixer les autres paramètres. Ceci
implique de choisir avant de démarrer l'étude les types de tests qui vont être
utilisés (ce qui oblige à bien identifier les questions auxquelles l'étude doit
répondre) et leur précision. Chaque test ayant des conditions d'applications
particulières, on comprend que la préparation de l'étude est une phase au
moins aussi importante que sa réalisation.
Dans R, les fonctions power et pwr (la seconde étant contenue dans le
package pwr) déterminent le paramètre souhaité quand les autres sont fixés,
pour plusieurs tests :
Comparaison de deux moyennes (test t de Student)
power.t.test(n,delta,sd,sig.level,power,type,alternative,
strict)
avec n : effectif de chaque échantillon (doit être égal)
delta : différence minimale à détecter entre les deux moyennes
sd : écart-type des deux échantillons (doit être égal)
sig.level : seuil de rejet α
power : puissance minimale du test (généralement 80 ou 90 %)
type : type de test ('two.sample' pour deux moyennes observées,
'one.sample' pour une moyenne observée à comparer avec une
théorique, 'paired' pour deux séries appariées)
alternative : type de test ('two.sided' pour bilatéral,
'one.sided' pour unilatéral)
strict : dépend du type de test (=TRUE pour bilatéral, =FALSE pour
unilatéral)
Tous les paramètres doivent être fixés sauf celui désiré où l'on doit préciser
=NULL (toutes les autres fonctions ont le même principe).
pwr.t.test(n,d,sig.level,power,type,alternative)
avec d : (µA - µB) / σ (différence des moyennes sur écart-type)
alternative : peut prendre comme valeur 'two.sided', 'less'
ou 'greater'.
Utiliser
pwr.t2n.test(n1,n2,d,sig.level,power,alternative)
pour deux échantillons de taille différente (la fonction ne gère pas les séries
appariées).
Comparaison de plus de deux moyennes (ANOVA)
power.anova.test(groups,n,between.var,within.var,sig.level
,power)
avec groups : nombre de classes du facteur étudié
between.var : variance intergroupe minimale à détecter
within.var : variance intragroupe
La fonction ne gère pas les séries appariées.
pwr.anova.test(k,n,f,sig.level,power)
avec k : nombre de classes du facteur étudié
f : taille minimale de l'effet à détecter
La fonction ne gère pas les séries appariées.
Comparaison de deux proportions
power.prop.test(n,p1,p2,sig.level,power,alternative,
strict)
avec p1, p2 : proportion observée dans chaque échantillon
pwr.2p.test(h,n,sig.level,power,alternative)
avec h : taille minimale de l'effet à détecter
Utiliser
pwr.2p2n.test(h,n1,n2,sig.level,power,alternative)
pour deux échantillons de taille différente.
Corrélation linéaire entre observations
pwr.r.test(n,r,sig.level,power,alternative)
avec r : coefficient de corrélation linéaire minimum à mettre en évidence
5. Graphiques de dispersion : la fonction stripchart()
Représente toutes les données individuelles d'un vecteur, d'une matrice
ou d'un tableau. Permet donc d'avoir un aperçu de la variabilité des données
et d'identifier les observations aberrantes.
Pour un vecteur : stripchart(vecteur)
Pour plusieurs vecteurs : stripchart(list(vecteur1,vecteur2))
Pour donner un nom aux vecteurs sur le graphe, ajouter l'argument
group.names=c('Nom1','Nom2')
Pour
représenter
Pour
représenter
des
données
en
fonction
d'un
facteur
stripchart(données~facteur) où les deux objets sont des vecteurs.
les
données
verticalement,
ajouter
:
l'argument
vertical=TRUE
Pour que les valeurs identiques ne se superposent pas, ajouter l'argument
method='jitter' (par défaut method='overplot')
6. Histogrammes : la fonction hist()
Divise les données contenues dans un vecteur en classes, et représente
chaque classe en effectif ou densité. Permet donc d'avoir un aperçu de la
distribution suivie par les données.
Pour représenter en effectif de classes : hist(vecteur)
Pour représenter en densité de classes : hist(vecteur,freq=FALSE)
(freq=TRUE par défaut, ce qui représente en effectif)
Pour ajouter une courbe de densité : lines(density(vecteur))
Pour ajouter une courbe de distribution : lines(seq(min(vecteur)
,max(vecteur),0.01),dloi(par)) où loi est la loi de probabilité
choisie et par ses paramètres (calculés à partir des données).
Pour modifier le nombre de classes, ajouter l'argument breaks=n où n est
le nombre de coupures souhaitées (il y a donc n+1 classes).
La fonction considère par défaut qu'une valeur égale à la borne inférieure
d'une classe appartient à la classe précédente, et qu'une valeur égale à la
borne supérieure appartient à la classe. Pour inverser cette exclusivité
ajouter l'argument right=FALSE (par défaut right=TRUE).
7. Boîtes à moustaches : la fonction boxplot()
Représente de façon simplifiée la dispersion des données contenues
dans un vecteur. Permet donc d'avoir un aperçu de la variabilité des données
et d'identifier les observations aberrantes.
Pour un vecteur : boxplot(vecteur). Le trait épais représente la médiane,
la boîte est formée par les valeurs des 1er et 3ème quartiles, et les moustaches
font maximum 1,5 fois la longueurs de l'interquartile (3ème - 1er). Les valeurs
au-delà des moustaches sont représentées individuellement.
Pour deux vecteurs : boxplot(list(vecteur1,vecteur2))
Pour
donner
un
nom
aux
boîtes,
ajouter
l'argument
names=c('Nom1','Nom2')
Pour
représenter
Pour
représenter
des
données
en
fonction
d'un
facteur
boxplot(donnees~facteur) où les deux objets sont des vecteurs.
horizontal=TRUE
les
boîtes
horizontalement,
ajouter
:
l'argument
8. La réduction des données à une dimension
Ces paramètres permettent de réduire une série de données à quelques
valeurs apportant une information générale.
Paramètres de position
Permettent de donner l'ordre de grandeur des observations.
Moyenne : mean(vecteur) où vecteur contient les valeurs individuelles.
Médiane : median(vecteur)
Mode : il n'existe pas de fonction qui le calcule directement. Passer par :
> densite=density(vecteur)
> densite$x[which(densite$y==max(densite$y))]
Si les vecteurs contiennent des données manquantes (NA), ajouter
l'argument na.rm=TRUE (ce qui ne tient pas compte des NA) aux fonctions
mean(), median() et density()
Paramètres de dispersion
Permettent de chiffrer la variabilité des données autour des paramètres de
position.
Variance : var(vecteur)
Ecart-type (standard deviation) : sd(vecteur)
Coefficient de variation : il n'existe pas de fonction qui le calcule
directement. Passer par : 100*abs(sd(vecteur)/mean(vecteur)) Le
coefficient de variation est généralement exprimé en pourcentage (100*) et
en valeur absolue (abs()).
Si les vecteurs contiennent des données manquantes (NA), ajouter
l'argument na.rm=TRUE (ce qui ne tient pas compte des NA) aux fonctions
var() et sd()
Les fonctions var() et sd() calculent la variance et l'écart-type non biaisés
(sur la base de n-1 et non n, si n est l'effectif de l'échantillon).
9. Nuages de points : la fonction plot()
Permet de représenter deux caractères pour chaque individu dans un
graphe du type y=f(x), et ainsi d'avoir un aperçu de la liaison qu'il peut y
avoir entre ces caractères. Peut être utilisé pour deux vecteurs, une matrice
à deux colonnes ou un tableau.
Pour deux vecteurs x et y contenant les valeurs de chaque individu pour
chaque caractère (dans le même ordre) : plot(x,y) ou plot(y~x)
Pour ajouter une droite du type y = ax + b : abline(b,a)
Pour ajouter une droite de régression linéaire au sens des moindres carrés :
abline(lm(y~x)) (voir fiche 59).
Pour ajouter une droite de régression linéaire au sens des moindres
rectangles : abline(frect(x,y)) (la fonction frect() est à rentrer
manuellement, voir fiches 10 et 60).
Pour ajouter une courbe de régression d'équation inconnue, utiliser la
fonction gam() (General Additive Model) du package mgcv et la procédure
suivante :
>
>
>
>
modele=gam(y~s(x))
x2=seq(min(x),max(x),0.01)
y2=predict(modele,list(x=x2))
lines(x2,y2)
Pour ajouter une droite horizontale : abline(h=ordonnee)
Pour ajouter une droite verticale : abline(v=abscisse)
10. La réduction des données à deux dimensions
Permet de réduire deux séries de données à quelques valeurs apportant
une information générale sur la liaison qui peut les unir.
Pour deux vecteurs x et y contenant les valeurs de chaque individu pour
chaque série (dans le même ordre) :
Covariance : cov(x,y)
Coefficient de corrélation linéaire de Pearson : cor(x,y)
Les vecteurs doivent avoir la même taille (contenir autant de valeurs). S'ils
contiennent des données manquantes (NA), ajouter l'argument
use='complete.obs' (qui ne considère que les couples de données
complets) aux fonctions cov() et cor()
La régression linéaire au sens des moindres carrés s'utilise dans le cas où la
variable y (dite dépendante ou à expliquer) varie en fonction de la variable x
(dite indépendante ou explicative). Pour récupérer les paramètres de la
droite :
lm(y~x)$coefficients[2] pour le coefficient directeur (lm() construit
un modèle linéaire reliant x et y au sens des moindres carrés).
lm(y~x)$coefficients[1] pour l'ordonnée à l'origine.
La régression linéaire au sens des moindres rectangles s'utilise dans le cas où
les deux variables sont considérées sur le même pied d'égalité (elles sont
dites interdépendantes). Il n'existe pas de fonction donnant les paramètres
de la droite, il faut rentrer manuellement celle-ci :
frect=function(x,y){
b=sqrt(var(y)/var(x))*sign(cov(x,y))
c(mean(y)-b*mean(x),b)}
Puis en retirer les paramèters frect(x,y)[2] (coefficient directeur de la
droite) et frect(x,y)[1] (ordonnée à l'origine).
Les vecteurs x et y doivent avoir la même taille pour les fonctions de
régression au sens des moindres carrés et des moindres rectangles. La
fonction lm() gère les données manquantes (NA), mais la fonction frect()
ne fonctionne pas si les vecteurs en contiennent.
11. L'Analyse en Composantes Principales (ACP)
Conditions d'utilisation : les variables doivent être quantitatives ou
ordinales, et les données doivent être contenues dans un tableau avec en
colonnes les variables (avec un titre) et en ligne les individus. La 1ère case du
tableau (en haut à gauche) doit être vide.
Le tableau ne doit pas contenir de données manquantes (NA). Pour
supprimer les lignes qui en possèdent : tableau2=na.omit(tableau), où
tableau est le tableau de départ.
L'ACP se prête mieux à l'analyse de relations linéaires et de variables ayant
une distribution symétrique. Pour observer ces caractères, utiliser
pairs(tableau2,panel=panel.smooth) d'une part et hist() avec
chacune des variables d'autre part. Si besoin transformer les variables (voir
fiche 44).
Pour visualiser la matrice de corrélations linéaires entre les variables :
cor(tableau2) (utilisée dans le cas de l'ACP réduite).
Pour visualiser la matrice de variances-covariances : cov(tableau2)
(utilisée dans le cas de l'ACP non réduite).
L'ACP est réalisée grâce à la fonction dudi.pca() du package ade4. Par
défaut elle est centrée réduite, pour changer ces paramètres ajouter les
arguments center=FALSE (pour ne pas centrer) et/ou scale=FALSE (pour
ne pas réduire). En général, l'ACP est réduite quand les variables n'ont pas le
même ordre de grandeur (ou unité de mesure), non réduite dans le cas
contraire (elles sont donc directement comparables).
Lorsque la commande acp=dudi.pca(tableau2) est passée, R renvoie le
graphe des valeurs propres (ou pouvoirs de synthèse) associées à chaque
variable de synthèse (ou axe ou composante principale) et demande le
nombre d'axes à sélectionner. Le choix peut se faire sur la base du critère de
Kaiser (ne choisir que les axes dont la valeur propre est supérieure à 1) ou
sur un critère fixé avant l'analyse, à savoir le nombre de composantes
principales expliquant un minimum de x % de l'information (ou inertie
totale) contenue dans le tableau initial. Ce pourcentage d'inertie est calculé
en divisant la valeur propre d'un axe par le nombre d'axes possibles (égal au
nombre de variables du tableau de départ).
Pour visualiser la corrélation entre chaque variable et une composante
principale : score.pca(acp,xax=num) où num est le numéro de l'axe
choisi.
Le diagnostic de l'ACP se fait grâce à la fonction inertia.dudi(acp), qui
renvoie le tableau $TOT. Celui-ci contient la contribution à l'inertie de
chaque composante principale (proportions cumulées dans la colonne
ratio, multiplier par 100 pour le pourcentage). En ajoutant l'argument
col.inertia=TRUE dans la fonction on obtient trois tableaux
supplémentaires :
• $col.abs : donne la contribution à l'inertie de chaque variable du
tableau de départ, c'est-à-dire leur importance respective dans la
construction des axes (ce qui aide à l'interprétation de ces axes).
Diviser par 100 pour obtenir les pourcentages. La somme de
chaque colonne est égale à 100 %.
• $col.rel : donne la part d'information apportée par chaque axe
pour chaque variable (diviser la valeur absolue par 100 pour
obtenir les pourcentages). Ne pas tenir compte de la 3ème colonne.
• $col.cum : valeurs absolues de $col.rel cumulées (diviser par
100 pour obtenir les pourcentages). Donne donc la part totale
d'information apportée par tous les axes retenus pour chaque
variable, autrement dit la qualité de la représentation de chaque
variables.
Ajouter l'argument row.inertia=TRUE à la fonction inertia.dudi()
pour obtenir les valeurs pour chaque individu ($row.abs, $row.rel et
$row.cum).
Pour visualiser graphiquement les relations entre :
• les individus : s.label(acp$li), le tableau $li de l'ACP donnant
les coordonnées des individus dans les différents plans factoriels.
Pour sélectionner un plan factoriel, ajouter les arguments
er
xax=num1 et yax=num2 où num1 est le numéro du 1 axe choisi et
num2 celui du second (il faut avoir sélectionné au moins deux axes
au départ de l'ACP). Par convention on choisit pour l'axe horizontal
celui des deux ayant la meilleure contribution à l'inertie totale. Des
individus éloignés sur le graphe le sont dans le tableau initial (mais
faire attention aux contributions relatives $row.rel du
diagnostic).
Pour ajouter comme information supplémentaire une variable
qualitative définissant des groupes d'individus (ex : sexe), utiliser
s.class(dfxy=acp$li,fac=facteur) où facteur est un
vecteur contenant la modalité de chaque individu (dans le même
ordre que les autres variables). Pour donner une couleur à chaque
groupe ajouter l'argument col=couleur où couleur est un
vecteur contenant la couleur de chaque modalité, dans l'ordre
alphabétique des modalités. Préciser le plan factoriel grâce aux
arguments xax et yax
• les variables :
 ACP réduite : s.corcircle(acp$co) donne le cercle
des corrélations (le tableau $co de l'ACP donne les
coordonnées des variables dans les différents plans
factoriels), où la longueur des flèches indique la part de
leur information représentée par les deux axes
(contributions relatives cumulées $col.cum du
diagnostic). L'angle entre deux flèches représente la
corrélation qui les lie : angle aigu = positive ; droit = nulle ;
obtus = négative.
 ACP non réduite : s.arrow(acp$co) où la longueur des
flèches représente la contribution à l'inertie de chaque
variable (contributions absolues $col.abs du diagnostic).
Les relations entre variables s'interprètent de la même
façon que pour l'ACP réduite, mais cette fois en terme de
covariances et non pas de corrélations.
Pour représenter à la fois les individus et les variables dans un plan factoriel,
utiliser scatter(acp) Pour ajouter comme information supplémentaire
une variable qualitative définissant des groupes d'individus, utiliser la
procédure suivante :
> scatter(acp,clab.row=0,posieig='none')
> s.class(dfxy=acp$li,fac=facteur,col=couleur,add.plot=
TRUE)
Préciser le plan factoriel grâce aux arguments xax et yax
L'échelle des flèches sur la double représentation individus-variables est
arbitraire, elle peut être changée sans que cela change l'interprétation.
Pour l'interprétation, n'utiliser que les individus les plus éloignés du centre
du nuage de points et les flèches les plus longues pour les variables, car ce
sont eux qui sont le mieux représentés par les axes.
Un 1er axe très corrélé de façon positive avec toutes les variables est souvent
le signe d'un "effet taille". Il convient dans ce cas de se placer dans des plans
factoriels ne comprenant pas le 1er axe pour l'interprétation.
12. L'Analyse Factorielle des Correspondances (AFC)
Conditions d'utilisation : les variables doivent être au nombre de deux et
qualitatives. Les données doivent être en effectifs et organisées dans un
tableau de contingence :
Variable B
Classe 1
Classe 2
Classe 3
Classe 1
Variable A
Classe 2
Classe 3
Ce
tableau
est
obtenu
de
la
manière
suivante
:
tableau=table(variableA,variableB) où variableA et variableB
sont des vecteurs contenant les valeurs de chaque individu pour la variable A
et la variable B (dans le même ordre).
L'AFC est sensible aux effectifs faibles, aussi regrouper les classes quand cela
est nécessaire.
Commencer par calculer la valeur du χ² du test d'indépendance des variables
(voir
fiche
46)
réalisé
à
partir
du
tableau
initial
:
chisq.test(tableau)$statistic
L'AFC est réalisée grâce à la fonction dudi.coa() du package ade4. Lorsque
la commande afc=dudi.coa(tableau) est passée, R renvoie le graphe
des valeurs propres (ou pouvoirs de synthèse) associées à chaque variable
de synthèse (ou axe) et demande le nombre d'axes à sélectionner. La part de
l'inertie (ou information totale contenue dans le tableau initial) expliquée
par chaque axe se calcule simplement par :
(valeur propre * effectif total) / χ²
On peut choisir le nombre d'axes expliquant ensemble x % de l'inertie, x
étant choisi à l'avance, ou un nombre d'axes déterminé à l'avance.
Le diagnostic de l'AFC se fait grâce à la fonction inertia.dudi(afc), qui
renvoie le tableau $TOT. Celui-ci contient la contribution à l'inertie de
chaque axe (proportions cumulées dans la colonne ratio, multiplier par 100
pour le pourcentage). En ajoutant l'argument col.inertia=TRUE dans la
fonction on obtient trois tableaux supplémentaires :
•
$col.abs : donne la contribution à l'inertie de chaque colonne du
tableau de départ, c'est-à-dire leur importance respective dans la
construction des axes (ce qui aide à l'interprétation de ces axes).
Diviser par 100 pour obtenir les pourcentages. La somme de
chaque colonne est égale à 100 %.
• $col.rel : donne la part d'information apportée par chaque axe
pour chaque colonne (diviser la valeur absolue par 100 pour
obtenir les pourcentages). Ne pas tenir compte de la 3ème colonne.
• $col.cum : valeurs absolues de $col.rel cumulées (diviser par
100 pour obtenir les pourcentages). Donne donc la part totale
d'information apportée par tous les axes retenus pour chaque
colonne, autrement dit la qualité de la représentation de chaque
colonne.
Ajouter l'argument row.inertia=TRUE à la fonction inertia.dudi()
pour obtenir les valeurs pour chaque ligne ($row.abs, $row.rel et
$row.cum).
Pour visualiser graphiquement le résultat de l'AFC (donc la structure du
tableau), utiliser scatter(afc,posieig='none') Pour sélectionner un
plan factoriel, ajouter les arguments xax=num1 et yax=num2 où num1 est le
numéro du 1er axe choisi et num2 celui du second (il faut avoir sélectionné au
moins deux axes au départ de l'AFC). Par convention on choisit pour l'axe
horizontal celui des deux ayant la meilleure contribution à l'inertie totale. La
proximité des modalités représente leur liaison plus ou moins forte dans le
tableau initial (mais faire attention aux contributions relatives $col.rel et
$row.rel du diagnostic).
La contribution des lignes et des colonnes à la construction des axes ne peut
pas se lire sur le graphique (leur éloignement de l'origine n'est pas
représentatif de leur contribution à l'inertie des axes). Il est donc
indispensable de lire en détail le diagnostic.
Pour
interpréter
les
axes
il
peut
être
utile
d'utiliser
score.coa(afc,xax=num,dotchart=TRUE) où num est le numéro de
l'axe à représenter. Le graphique montre la répartition des modalités sur
l'axe choisi. Utiliser abline(v=0) pour ajouter une ligne marquant l'origine
de l'axe.
13. L'Analyse des Correspondances Multiples (ACM)
Conditions d'utilisation : les variables doivent être qualitatives (ordinales ou
nominales), et les données doivent être contenues dans un tableau avec en
colonnes les variables (avec un titre) et en ligne les individus. La 1ère case du
tableau (en haut à gauche) doit être vide. Pour intégrer des variables
quantitatives, regrouper les valeurs en classes (ce qui rend ces variables
qualitatives).
Le tableau ne doit pas contenir de données manquantes (NA). Pour
supprimer les lignes qui en possèdent : tableau2=na.omit(tableau), où
tableau est le tableau de départ.
Il est indispensable de réaliser une analyse préliminaire univariée de chaque
variable, afin de voir si les classes sont aussi bien représentées ou s'il existe
un déséquilibre. Pour cela utiliser plot(tableau$variable) où tableau
est le tableau de données et variable la variable choisie. L'ACM est
sensible aux effectifs faibles, aussi regrouper les classes quand cela est
nécessaire.
De même, si les variables ne sont pas trop nombreuses, réaliser un test du χ²
d'indépendance deux à deux est une première approche :
chisq.test(table(variable1,variable2)) (voir fiche 46)
L'ACM est réalisée grâce à la fonction dudi.acm() du package ade4.
Lorsque la commande acm=dudi.acm(tableau) est passée, R renvoie le
graphe des valeurs propres (ou pouvoirs de synthèse) associées à chaque
variable de synthèse (ou axe) et demande le nombre d'axes à sélectionner. Il
est difficile d'établir un critère de choix pour l'ACM, ne pas multiplier les axes
est en tout cas bénéfique pour l'interprétation (ce qui est aussi valable pour
les autres analyses multivariées).
Le diagnostic de l'ACM se fait grâce à la fonction inertia.dudi(acm), qui
renvoie le tableau $TOT. Celui-ci contient la contribution à l'inertie (ou
information totale) de chaque axe (proportions cumulées dans la colonne
ratio, multiplier par 100 pour le pourcentage).
Pour représenter les résultats de l'ACM, utiliser scatter(acm) Les résultats
sont séparés pour chaque variable, toutes représentées sur le même plan
factoriel. Pour sélectionner un plan factoriel, ajouter les arguments
er
xax=num1 et yax=num2 où num1 est le numéro du 1 axe choisi et num2 celui
du second (il faut avoir sélectionné au moins deux axes au départ de l'ACM).
Par convention on choisit pour l'axe horizontal celui des deux ayant la
meilleure contribution à l'inertie totale. Les modalités de chaque variable
sont représentées par des ellipses portant leur nom. Pour rendre le
graphique plus clair et donner une couleur à chaque modalité, ajouter
l'argument col=couleur où couleur est un vecteur contenant autant de
noms (ou numéros) de couleurs qu'il y a de modalités possibles.
Pour ne représenter qu'une seule variable, le même résultat est obtenu par
s.class(dfxy=acm$li,fac=variable,col=couleur,cstar=0,sub=
nom) où variable est la variable choisie et nom son nom (entre guillemets).
Choisir le plan factoriel à l'aide des arguments xax et yax
Le tableau acm$cr contient les rapports de corrélation (variant de 0 à 1)
entre les variables et les axes choisis au départ de l'ACM. Pour représenter
graphiquement ces rapports, utiliser barplot(acm$cr[,num],
names.arg=row.names(acm$cr),las=2) où num est le numéro de l'axe
à représenter. Pour l'interprétation des axes, se concentrer sur les variables
les plus structurantes, i.e. dont le rapport de corrélation est le plus proche
de 1.
Une aide à l'interprétation est fournie par la fonction
score.acm(acm,xax=num) où num est le numéro de l'axe à représenter. Le
graphique montre la répartition des modalités de chaque variable sur l'axe
choisi. Pour sélectionner les variables à représenter, ajouter l'argument
which.var=variables où variables est un vecteur contenant le
numéro des variables choisies, i.e. le numéro des colonnes dans le tableau
initial.
L'ACM est clairement une analyse plus difficile à interpréter que l'ACP ou
l'AFC. Aussi, il est bon de limiter la difficulté en ne rentrant pas des dizaines
de variables mais en se limitant aux questions essentielles.
De plus, l'ACM est sensible aux modalités contenant un faible effectif et aux
variables contenant un grand nombre de modalités. Mieux vaut les
regrouper en classes plus larges lorsque l'un de ces deux cas se présente.
14. L'Analyse mixte de Hill et Smith
Conditions d'utilisation : les variables peuvent être quantitatives ou
qualitatives. Les données doivent être contenues dans un tableau avec en
colonnes les variables (avec un titre) et en ligne les individus. La 1ère case du
tableau (en haut à gauche) doit être vide.
Le tableau ne doit pas contenir de données manquantes (NA). Pour
supprimer les lignes qui en possèdent : tableau2=na.omit(tableau), où
tableau est le tableau de départ.
Il est indispensable de réaliser une analyse préliminaire univariée de chaque
variable afin d'observer les distributions de valeurs (variables quantitatives)
ou leur répartition entre les différentes classes (variables qualitatives).
Utiliser pour cela les fonctions hist(), plot() ou boxplot() selon les cas
(voir fiches 6, 7 et 9).
L'analyse mixte est réalisée grâce à la fonction dudi.mix() du package
ade4. Lorsque la commande amix=dudi.mix(tableau2) est passée, R
renvoie le graphe des valeurs propres (ou pouvoirs de synthèse) associées à
chaque variable de synthèse (ou axe) et demande le nombre d'axes à
sélectionner. Il est difficile d'établir un critère de choix pour l'analyse mixte,
ne pas multiplier les axes est en tout cas bénéfique pour l'interprétation (ce
qui est aussi valable pour les autres analyses multivariées). Le pourcentage
d'inertie (ou de l'information totale) expliqué par chaque axe est calculé en
divisant la valeur propre d'un axe par le nombre d'axes possibles.
Le diagnostic de l'ACM se fait grâce à la fonction inertia.dudi(amix), qui
renvoie le tableau $TOT. Celui-ci contient la contribution à l'inertie de
chaque axe (proportions cumulées dans la colonne ratio, multiplier par 100
pour le pourcentage).
Pour
représenter
les
résultats
de
l'analyse
mixte,
la
fonction
scatter(amix) peut être utilisée. Elle représente dans le plan factoriel les
individus, les variables quantitatives comme dans une ACP et les variables
qualitatives comme dans une ACM. Pour sélectionner un plan factoriel,
ajouter les arguments xax=num1 et yax=num2 où num1 est le numéro du 1er
axe choisi et num2 celui du second (il faut avoir sélectionné au moins deux
axes au départ de l'analyse). Par convention on choisit pour l'axe horizontal
celui des deux ayant la meilleure contribution à l'inertie totale.
Cette représentation peut cependant être illisible, et il vaut mieux utiliser les
fonctions suivantes (à rentrer manuellement) :
scatter.mix.numeric=function(obj.dudi,xax=1,yax=2,... ){
indexation=obj.dudi$index=="q"
numero=match(seq(1,length(obj.dudi$index))[indexation],
obj.dudi$ assign)
noms=row.names(obj.dudi$co[numero,c(xax,yax)])
s.corcircle(obj.dudi$co[numero,c(xax,yax)],label=noms,.
..)}
et
scatter.mix.categorical=function(dudi.obj,xax=1,yax=2,csub
=2,possub="topleft",...){
def.par=par(no.readonly=TRUE)
on.exit(par(def.par))
tabcomplet=eval(as.list(dudi.obj$call)[[2]],sys.frame
(0))
indexation=dudi.obj$index=="f"
oritab=tabcomplet[,indexation]
nvar=ncol(oritab)
levels=NULL
for (i in 1:ncol(tabcomplet)) {levels=c(levels,
length(levels(tabcomplet[,i])))}
ncol=(max(levels)%/%5)+1
par(mfrow=n2mfrow(nvar))
for(i in 1 :nvar)s.class(dudi.obj$li,oritab[,i],
xax=xax,yax=yax,clab=1.5,sub=names(oritab[i]),csub=csub
,possub=possub,col=rep(c('black','red','blue','green
','orange'),ncol),cgrid=0,csta=0)}
La fonction scatter.mix.numeric(amix) représente les variables
quantitatives sur un cercle des corrélation (comme en ACP, voir fiche 11),
tandis que la fonction scatter.mix.categorical(amix) représente les
variables quantitatives à la manière d'une ACM (voir fiche 13).
Le tableau amix$cr contient les valeurs des "corrélations" (de 0 à 1) qui
lient les variables de synthèse aux variables initiales. Pour les représenter
barplot(amix$cr[,num],names.arg=
graphiquement,
utiliser
row.names(amix$cr),las=2) où num est le numéro de l'axe à
représenter. Pour l'interprétation des axes, se concentrer sur les variables
les plus structurantes, i.e. dont le rapport de corrélation est le plus proche
de 1.
Une aide à l'interprétation est fournie par la fonction
score(amix,xax=num) où num est le numéro de l'axe à représenter. Là
encore la représentation est de type ACP ou ACM selon la nature des
variables. Pour sélectionner les variables à représenter, ajouter l'argument
which.var=variables où variables est un vecteur contenant le
numéro des variables choisies, i.e. le numéro des colonnes dans le tableau
initial.
15. Lois de probabilité discontinues - généralités
Type de variable : quantitative discrète.
Paramètres :
• k : chaque valeur possible rencontrée dans la population par la
variable discrète X. Egalement appelée quantile.
• f(k) : fréquence, ou probabilité, associée à chaque valeur de la
variable discrète X. Egalement appelée distribution de probabilité
de X ou fonction de masse de X. Comprise entre 0 et 1.
• F(k) : somme des probabilités f(k) situées à droite ou à gauche de k,
suivant la situation. Egalement appelée fonction de répartition de X.
On note F(k)droite = P(X > k) et F(k)gauche = P(X ≤ k). Comprise entre 0
et 1.
Dans R :
dY() : donne la probabilité f(k) pour une distribution de type Y.
pY() : donne la fonction de répartition F(k) pour une distribution de type Y.
R considère par défaut la répartition à gauche, préciser lower.tail=F pour
la répartition à droite.
qY() : donne la valeur k de la variable X correspondant à une valeur de F(k)
pour une distribution de type Y. R considère par défaut la répartition à
gauche de k, préciser lower.tail=F pour la répartition à droite.
rY() : donne une série de valeurs aléatoires de la variable X pour une
distribution de type Y.
16. La loi binomiale
Loi suivie par les résultats de tirages aléatoires lorsqu'il n'y a que deux
possibilités mutuellement exclusives de résultat et que la probabilité
d'obtenir chaque possibilité est constante au cours de l'expérience
(population infinie ou tirages avec remise). La loi binomiale donne la
probabilité d'obtenir k fois le résultat A quand n tirages sont réalisés.
Ecriture : B(n,p)
avec n : nombre de tirages
p : probabilité associée au résultat A
Dans R :
dbinom(k,n,p)
pbinom(k,n,p)
qbinom(F(k),n,p)
rbinom(x,n,p) avec x : nombre de valeurs à générer
17. La loi de Poisson
Limite de la loi binomiale quand p tend vers 0 et n vers l'infini ("loi des
évènements rares"). L'approximation de la loi binomiale par la loi de Poisson
est possible quand quand p < 0,1 et n > 30).
Sa moyenne est égale à sa variance et vaut np (ou λ).
Ecriture : P(np) ou P(λ)
avec n : nombre de tirages
p : probabilité associée au résultat rare
Dans R :
dpois(k,n*p) ou dpois(k,lambda)
ppois(k,n*p) ou ppois(k,lambda)
qpois(F(k),n*p) ou qpois(F(k),lambda)
rpois(x,n*p) ou rpois(x,lambda) avec x : nombre de valeurs à
générer
18. La loi multinomiale
Equivalent de la loi binomiale quand le nombre de résultats possibles est
supérieur à deux.
Ecriture : MN(n,p1,...,pc)
avec n : nombre de tirages
p : probabilité associée à chaque résultat (1 à c)
Dans R :
dmultinom(c(k1,...,kc),n,c(p1,...,pc))
rmultinom(x,n,c(p1,...,pc)) avec x : nombre de valeurs à générer
R ne donne pas la fonction de répartition F(k) car la distribution de
probabilité comporte autant de dimensions qu'il y a de résultats possibles.
De même, il n'est pas possible de représenter la distribution de la loi
multinomiale.
19. La loi binomiale négative
Les conditions sont identiques à celles de la loi binomiale. La loi
binomiale négative donne la probabilité d'obtenir r résultats B avant
d'obtenir k résultats A (approche par l'échec).
Ecriture : BN(k,p)
avec k : nombre de résultats A désirés
p : probabilité associée au résultat A
Dans R :
dnbinom(r,k,p)
pnbinom(r,k,p)
qnbinom(F(r),k,p)
rnbinom(x,k,p) avec x : nombre de valeurs à générer
20. La loi de Pascal
Les conditions sont identiques à celle de la loi binomiale. La loi de Pascal
donne la probabilité du nombre de tirages n à réaliser avant d'obtenir k
résultats A, le dernier tirage donnant un A (approche globale).
Sa formule est identique à celle de la loi binomiale négative, seule l'approche
est différente.
Ecriture : P(k,p)
avec k : nombre de résultats A désirés
p : probabilité associée au résultat A
Dans R, il n'existe pas de fonction pour la loi de Pascal. L'approche adoptée
est celle de la loi binomiale négative.
21. La loi géométrique
Variation des lois binomiale négative et de Pascal. La loi géométrique
donne la probabilité du nombre r de résultats B qu'il faut obtenir avant
d'obtenir le premier résultat A (soit aussi la probabilité du nombre de tirages
n à réaliser avant d'obtenir le premier résultat A).
Ecriture : G(p)
avec p : probabilité associée au résultat A
Dans R, l'approche adoptée est celle de la loi binomiale négative :
dgeom(r,p)
pgeom(r,p)
qgeom(F(r),p)
rgeom(x,p) avec x : nombre de valeurs à générer
22. La loi hypergéométrique
Equivalent de la loi binomiale quand les tirages sont effectués sans
remise (la probabilité associée à chaque résultat change au fur et à mesure
des tirages).
Ecriture : H(N,n,p)
avec N : nombre total de tirages possibles (ex : nombres d'individus)
n : nombre de tirages réalisés
p : probabilité associée au résultat A
Dans R :
dhyper(k,NA,NB,n)
phyper(k,NA,NB,n)
qhyper(F(k),NA,NB,n)
rhyper(x,NA,NB,n) avec x : nombre de valeurs à générer
23. Lois de probabilité continues - généralités
Type de variable : quantitative continue.
Paramètres :
• xi : chaque valeur possible de la variable continue x. Egalement
appelée quantile.
• f(xi) : distribution de probabilité de la valeur x. Egalement appelée
densité de probabilité de xi. Comprise entre 0 et 1.
• F(xi) : aire sous la courbe située à droite ou à gauche de xi, suivant
la situation. Egalement appelée fonction de répartition de xi. On
note F(xi)droite = P(x > xi) et F(xi)gauche = P(x ≤ xi). Comprise entre 0 et
1.
Dans R :
dY() : donne la densité de probabilité f(xi) pour une distribution de type Y.
pY() : donne la fonction de répartition F(xi) pour une distribution de type Y.
R considère par défaut la répartition à gauche, préciser lower.tail=F pour
la répartition à droite.
qY() : donne la valeur xi de la variable x correspondant à une valeur de F(xi)
pour une distribution de type Y. R considère par défaut la répartition à
gauche de k, préciser lower.tail=F pour la répartition à droite.
rY() : donne une série de valeurs aléatoires de la variable x pour une
distribution de type Y.
24. La loi normale
Ecriture : N(µ,σ)
avec µ : moyenne de la variable x
σ : écart-type de la variable x
Cas particulier, la loi normale centrée-réduite : N(0,1)
Dans R :
dnorm(xi,mu,sigma)
pnorm(xi,mu,sigma)
qnorm(F(xi),mu,sigma)
rnorm(z,mu,sigma) avec z : nombre de valeurs à générer
25. La loi exponentielle
Correspond souvent à des évènements dont la probabilité de survenue
diminue avec le temps. Egalement utilisée pour matérialiser des durées de
vie.
Ecriture : exp(λ)
avec λ : paramètre de la loi (0 < λ < +∞)
Dans R :
dexp(xi,lambda)
pexp(xi,lambda)
qexp(F(xi),lambda)
rexp(z,lambda) avec z : nombre de valeurs à générer
26. La loi gamma
La loi exponentielle est un cas particulier de la loi gamma, qui intervient
dans le calcul d'autres lois de probabilité très utilisées (lois de χ², de FisherSnedecor et de Student).
Ecriture : G(α,β)
avec α et β : paramètres de la loi (0 < α,β < +∞)
Dans R :
dgamma(xi,shape=alpha,scale=beta)
pgamma(xi,shape=alpha,scale=beta)
qgamma(F(xi),shape=alpha,scale=beta)
rgamma(z,shape=alpha,scale=beta) avec z : nombre de valeurs à
générer
27. La loi de χ²
Ecriture : χ²(ν)
avec ν : nombre de degrés de liberté (ddl), i.e. de paramètres indépendants
impliqués dans la loi (0 < ν < +∞)
Dans R :
dchisq(xi,ddl)
pchisq(xi,ddl)
qchisq(F(xi),ddl)
rchisq(z,ddl) avec z : nombre de valeurs à générer
28. La loi de Fisher-Snedecor
Ecriture : F(ν1,ν2)
avec ν1 : premier nombre de degrés de liberté (ddl) (0 < ν1 < +∞)
ν2 : deuxième nombre de ddl (0 < ν2 < +∞)
Dans R :
df(xi,ddl1,ddl2)
pf(xi,ddl1,ddl2)
qf(F(xi),ddl1,ddl2)
rf(z,ddl1,ddl2) avec z : nombre de valeurs à générer
29. La loi de Student
Ecriture : t(ν)
avec ν : nombre de degré de liberté (ddl) (0 < ν < +∞)
Dans R :
dt(xi,ddl)
pt(xi,ddl)
qt(F(xi),ddl)
rt(z,ddl) avec z : nombre de valeurs à générer
30. La distribution de probabilité de Mann-Whitney
Type de variable : qualitative à deux classes.
Ecriture : U(n1,n2)
avec n1 : effectif de la classe 1
n2 : effectif de la classe 2
Dans R, la fonction s'appelle [d,p,q,r]wilcox mais correspond à la
distribution de probabilité de Mann-Whitney :
dwilcox(k,n1,n2)
pwilcox(k,n1,n2)
qwilcox(F(k),n1,n2)
rwilcox(x,n1,n2) avec x : nombre de valeurs à générer
31. La distribution de probabilité du test des signes de
Wilcoxon
Type de variable : qualitative à deux classes.
Ecriture : V(n)
avec n : effectif de l'échantillon
Dans R :
dsignrank(k,n)
psignrank(k,n)
qsignrank(F(k),n)
rsignrank(x,n) avec x : nombre de valeurs à générer
32. Relations entre les distributions de probabilités
Schéma tiré de Millot, G. (2008) Comprendre et réaliser les tests statistiques
à l'aide de R. Editions De Boeck.
33. Principe des tests statistiques et risques associés à la
conclusion
Principe de réalisation des tests statistiques :
(1) Poser une hypothèse nulle H0, de type "rien à signaler" (ex : les moyennes
µA et µB sont égales) ou valeur ponctuelle (ex : µ = 10, µ = 50 %).
(2) Poser une hypothèse H1, de telle manière que H0 et H1 soient exclusives
(ex : les moyennes µA et µB sont différentes).
(3) Calculer la variable de test (VT)
(4) Utiliser la VT calculée pour déterminer une p-value, c'est-à-dire une
probabilité d'obtenir la valeur mesurée (moyenne, pourcentage...) si H0
est vraie.
(5) Conclure sur les deux hypothèses posées grâce à cette p-value :
• si la p-value est supérieure au seuil α fixé avant le test (5 % en
général), ne pas rejeter H0 (donc rejeter H1)
• si la p-value est inférieure au seuil α, rejeter H0 (donc accepter H1).
Conclure sur les deux hypothèses présente deux risques :
• le risque de 1ère espèce ou risque α, c'est-à-dire le rejet de H0 si
celle-ci est vraie
• le risque de 2ème espèce ou risque β, c'est-à-dire le non-rejet de H0
si celle-ci est fausse.
Décision
Réalité (inconnue le plus souvent)
H0 vraie
H0 fausse
H0 non-rejetée
Bonne décision
Erreur β
H0 rejetée
Erreur α
Bonne décision
La probabilité associée au fait de rejeter H0 si celle-ci est fausse (soit 1 - β)
est appelée puissance du test.
34. Le risque ou seuil de rejet α
Il existe deux définitions du risque α :
• le seuil de rejet (ou seuil de signification) de l'hypothèse H0. Si la pvalue est inférieur à ce seuil, l'hypothèse H0 est rejetée (la p-value
est dite significative), dans le cas contraire H0 n'est pas rejetée (la
p-value est dite non significative). Habituellement fixé à 5 %, dans
tous les cas doit être fixé avant la réalisation du test statistique.
• la p-value. Le risque α est égal à la p-value, i.e. en rejetant H0 on
prend le risque p de se tromper.
Xseuil : valeur de la VT X qui donne une fonction de répartition à droite égale
au seuil α (test unilatéral droit).
Xcalc : valeur de la VT X calculée à partir de l'échantillon testé.
A gauche l'hypothèse H0 est rejetée, à droite elle ne l'est pas.
35. La correction du seuil de rejet α
Si une série de tests statistiques est réalisée, avec à chaque fois α pour
seuil de rejet de H0, le risque global de rejeter H0 si celle-ci est vraie
augmente. En effet, plus on effectue de tests, plus on a de chance de tomber
sur un échantillon peu représentatif de la population dont il provient
(donnant une p-value inférieure au αseuil).
Il est donc nécessaire de corriger le seuil de rejet α de chaque test lorsque
plusieurs sont réalisés, afin que le risque global soit égal au α fixé.
Cette situation se présente :
• lorsque les tests vont permettre de prendre une décision unique,
dès que l'un d'eux au moins permet le rejet de H0
• lorsque sont réalisés une série de tests deux à deux, soit
directement soit après une analyse globale (ANOVA, χ²...).
Plusieurs méthodes de corrections existent, dont les trois suivantes.
La technique de Bonferroni
Si k tests sont effectués, la technique consiste simplement à diviser le seuil
de rejet global α par k, donc considérer pour chaque test le seuil de rejet
α/k.
La technique séquentielle de Holm
La procédure se réalise en plusieurs étapes :
• classer les p-values de tous les tests réalisés par ordre croissant
(p1 < ... < pk), k étant le nombre de tests effectués
• rejeter H0 pour les tests dont la p-value satisfait la condition :
pi ≤ αseuil / (k + 1 - i)
où i est le rang de la p-value après classement.
La technique du False Discovery Rate (FDR) de Benjamini et Hochberg
La procédure se réalise aussi en plusieurs étapes :
• classer les p-values de tous les tests réalisés par ordre croissant
(p1 < ... < pk), k étant le nombre de tests effectués
• rejeter H0 pour les tests dont la p-value satisfait la condition :
pi ≤ αseuil x (i / k)
où i est le rang de la p-value après classement.
La technique la plus stricte est celle de Bonferroni, la moins stricte celle du
FDR. Cette dernière peut être appliquée par défaut. Dans tous les cas la
méthode de correction du seuil de rejet de H0 doit être décidée avant de
réaliser les tests.
Dans R, si p est le vecteur contenant les p-values non corrigées :
p.adjust(p,method='bonferroni') pour la correction de Bonferroni
p.adjust(p,method='holm') pour la correction de Holm
p.adjust(p,method='BH') ou p.adjust(p,method='fdr') pour la
correction de Benjamini et Hochberg (FDR).
36. Le risque β et la puissance du test
Le risque β est le risque de considérer l'hypothèse H0 comme acceptable
(i.e. ne pas la rejeter) si celle-ci est fausse. Contrairement au risque α, le
risque β ne peut pas être fixé. En effet, si α dépend de la distribution de la VT
sous H0, β édpend de sa distributi on sous H1. Or cette distribution est
inconnue, puisque l'hypothèse H1 regroupe une infinité de distributions (ex :
si l'hypothèse H1 est µA ≠ µB, les deux moyennes peuvent différer d'une
infinité de façons).
La puissance d'un test représente la probabilité de rejeter H0 si celle-ci est
fausse (i.e. de faire le bon choix). Elle équivaut à 1 - β, et est donc également
une variable dépendant de la distribution de la VT sous H1, inconnue.
Ces deux variables dépendent du seuil α fixé.
Xseuil : valeur de la VT X qui donne une fonction de répartition à droite égale
au seuil α pour la distribution sous H0 (test unilatéral droit).
La puissance d'un test augmente :
• quand augmente le seuil α
• quand augmente l'effectif de l'échantillon testé (ce qui diminue
l'étalement de la distribution de la VT ou éloigne les distributions
de la VT sous H0 et H1, selon le test)
• quand augmente l'écart réel entre les paramètres (moyennes,
pourcentages...) testés.
37. L'identification des données aberrantes
L'identification des valeurs aberrantes doit se faire avant tout
visuellement, cependant certains tests peuvent apporter une aide.
L'élimination d'une valeur d'une série de données doit toutefois se faire sur
des considérations techniques (erreur de mesure ou de retranscription de la
mesure) ou biologiques (valeur improbable pour la variable mesurée). Dans
tous les cas, l'élimination des données aberrantes doit se faire avant tout
autre test.
Les fonctions suivantes sont toutes contenues dans le package outliers.
Identification d'une valeur au sein d'une distribution
Test du χ² : chisq.out.test(serie) où serie est un vecteur contenant
une série de données. La fonction teste la valeur extrême de la série la plus
éloignée de la moyenne. Pour tester l'autre valeur extrême, ajouter
l'argument opposite=TRUE
Test de Dixon : la fonction dixon.test() a la même syntaxe que la
précédente, avec le même argument opposite
Identification d'une moyenne au sein d'un groupe de moyennes
Test de Grubbs : grubbs.test(moyennes) où moyennes est un vecteur
contenant les moyennes des séries de données. Pour travailler directement
avec
un
tableau
de
données,
utiliser
grubbs.test(tapply(variable,facteur,mean)) où la fonction
tapply() calcule la moyenne de la variable variable par modalité du
facteur facteur Le tableau de données ne doit pas contenir de données
manquantes (NA). L'argument opposite peut être ajouté.
Identification d'une variance au sein d'un groupe de variances
Test de Cochran : cochran.test(variable~facteur, data=tableau)
où tableau est le tableau de données. La fonction teste la variance la plus
élevée, pour tester la plus faible ajouter l'argument inlying=TRUE Le
tableau de données ne doit pas contenir de données manquantes (NA).
38. Intervalles de confiance et erreur standard
Pour des moyennes :
• intervalle de confiance :
 petit effectif (< 30 individus) : utiliser le module "intervalle
de confiance" du test de Wilcoxon (test non paramétrique
qui calcule en fait l'intervalle de confiance de la médiane)
: wilcox.test(serie,conf.int=TRUE)$conf.int
où serie est un vecteur contenant la série de données.
 grand effectif (> 30 individus) : utiliser le module
"intervalle de confiance" du test de Student (test
paramétrique) : t.test(serie)$conf.int
• erreur standard : il n'existe pas de fonction, utiliser le calcul
sd(serie)/sqrt(length(serie)-1) où sd() calcule l'écarttype de la série, length() son effectif (-1 pour l'erreur standard
non biaisée) et sqrt() est la fonction racine carrée.
Pour des pourcentages : quel que soit l'effectif, utiliser le module "intervalle
de confiance" du test binomial exact : binom.test(a,b)$conf.int où a
est le nombre d'individus de la catégorie d'intérêt et b l'effectif total (ex : 9
mâles sur 25 individus).
Pour n'importe quoi : utiliser bootstrap(serie), fonction à rentrer
manuellement qui réalise un bootstrap avec 1000 répétitions par défaut :
bootstrap=function(data,rep=1000,conf.level=0.95){
val=NULL
for (i in 1:rep) {
ech=sample(x=data,size=length(data),replace=T)
val=c(val,mean(ech))}
val.sort=sort(val)
int=(1-conf.level)/2
if(rep*int<1)
{int.inf=ceiling(rep*int)}
else
{int.inf=floor(rep*int)}
int.sup=ceiling(rep*(1-int))
cat(paste('Intervalle
de
confiance
à',100*conf.level,'%\n',round(val.sort[int.inf],4),r
ound(val.sort[int.sup],4),'\n'))}
Cette fonction calcule l'intervalle de confiance d'une moyenne, pour calculer
celui d'autre chose modifier l'expression en rouge.
Pour toutes ces fonctions, la précision de l'intervalle de confiance peut être
modifiée grâce à l'argument conf.level (par défaut 0.95).
39. Graphiques en bâtons avec barres d'erreur
Si l'on veut représenter une moyenne par traitement par exemple,
l'étape préliminaire est de rassembler les moyennes dans un vecteur
moyennes (contenant les valeurs dans l'ordre du graphique, de gauche à
droite) et les erreurs standards (voir fiche 38 pour le calcul) dans un vecteur
erreurs (avec les valeurs dans le même ordre que les moyennes).
La procédure est ensuite la suivante :
> abscisses=barplot(moyennes)
> segments(abscisses,moyennes-erreurs,abscisses,moyennes+
erreurs)
La fonction barplot() trace le graphique en bâtons, et le vecteur
abscisses stocke l'abscisse du milieu de chaque bâton. La fonction
segments() trace ensuite les segments correspondant aux barres d'erreurs.
Les arguments de cette fonction sont (dans l'ordre) x1,y1,x2,y2 où x1 et y1
sont les coordonnées du point de départ du segment, tandis que x2 et y2
sont les coordonnées du point d'arrivée.
S'il y a plusieurs moyennes par traitement (plusieurs lots d'individus par
exemple), moyennes et erreurs standards doivent alors être contenues dans
des matrices. Ces matrices doivent avoir en lignes les lots d'individus et en
colonnes les traitements. La procédure est ensuite identique, il faut
seulement ajouter l'argument beside=TRUE à la fonction barplot() pour
que les moyennes de chaque lot ne soient pas superposées.
L'argument names.arg=noms de la fonction barplot() ajoute ou modifie
le nom des bâtons (noms étant un vecteur contenant les noms de gauche à
droite), tandis que legend=TRUE ajoute une légende dans le cas de
matrices.
40. Les différents types de tests statistiques
Il existe quatre grandes familles de tests statistiques, qui se différencient
par leur objectif :
• les tests d'homogénéité : ils permettent de tester l'égalité de
paramètres de plusieurs populations (ex : égalité des moyennes
entre n populations)
• les tests de conformité : ils permettent de tester l'égalité de
paramètres de population(s) à une valeur théorique (ex : sex-ratio
équilibré 1:1)
• les tests d'indépendance : ils permettent de tester si deux variables
mesurées sont indépendantes l'une par rapport à l'autre
• les tests d'ajustement : ils permettent de tester (i) si une
distribution de valeurs observée est conforme à une distribution
théorique ou (ii) si deux distributions observées sont identiques
entre elles.
Ces quatre catégories ne sont pas exclusives, un même test pouvant avoir
plusieurs objectifs (ex : le test du χ² de conformité est aussi un test
d'ajustement).
Le choix d'un test statistique repose sur plusieurs critères :
• son objectif : à quel question doit-il permettre de répondre ?
• le type de données :
 comment ont-elles été récoltées (voir fiches 1 et 2) ?
 combien de variables ont été mesurées ?
 quelle est la nature de ces variables (voir fiche 3) ?
 comment sont-elles distribuées ?
• la quantité de données : combien d'individus ont été
comptés/mesurés ?
• le nombre de populations à comparer
La réponse à toutes ces questions peut être apportée avant même de
récolter les données, dès la préparation de l'étude. Une bonne démarche
consiste ainsi à choisir dès le départ le type de tests qui vont être utilisés. Ce
choix ne pose pas de problèmes si les questions auxquelles l'étude doit
répondre sont clairement identifiées.
41. Caractère aléatoire et simple d'une série d'observations
Cette condition est l'une des plus fondamentale d'un grand nombre de
tests statistiques. Elle peut être testée par les deux tests non paramétriques
suivants, issus du package lawstat :
Test des runs : runs.test(serie) où serie est un vecteur contenant des
données numériques, dans l'ordre où elles ont été récoltées.
Test de Bartels : bartels.test(serie) où serie est un vecteur
contenant des données numériques ou non (ex : modalités d'un facteur),
dans l'ordre où elles ont été récoltées.
Une p-value significative indique qu'il existe une corrélation entre les valeurs
de la série, négative ou positive (par défaut les deux tests sont bilatéraux).
Pour connaître le signe de cette corrélation réaliser un test unilatéral en
ajoutant l'argument alternative= 'positive.correlated' ou
alternative='negative.correlated' Dans ce cas l'hypothèse
alternative H1 n'est plus "il y a une corrélation entre les valeurs" mais "il y a
une corrélation positive" ou "il y a une corrélation négative".
42. Ajustement à une distribution théorique
Ces tests paramétriques peuvent être une fin en soi mais sont souvent
préliminaires à d'autres tests. La condition qu'une distribution observée
suive une loi normale est en particulier très fréquemment demandée.
Avant de réaliser un test, la première analyse doit être graphique, en
réalisant le graphe quantile-quantile de la manière suivante :
qqplot(serie,qloi(ppoints(serie), par)) où serie est un vecteur
contenant la série de données, loi est la loi théorique choisie et par ses
paramètres séparés par une virgule (ex : pour une loi de χ²
qqplot(serie,qchisq(ppoints(serie),ddl)) ). La distribution de la
série suit la loi théorique choisie si les points du graphe sont alignés sur une
droite. Toute autre structuration des points (courbures, nombreux points
éloignés...) indique que le contraire.
Dans le cas d'une loi normale, le même résultat est obtenu directement avec
la fonction qqnorm(serie)
Ajustement à une loi normale - Test de Shapiro-Wilk
Condition : l'échantillonnage doit être aléatoire et simple ; la variable testée
doit être quantitative.
Pour réaliser le test : shapiro.test(serie)
Ajustement à une loi autre que normale - Test de Kolmogorov-Smirnov
Conditions : l'échantillonnage doit être aléatoire et simple ; la variable testée
doit être quantitative ; les paramètres de la loi théorique ne doivent pas
provenir de l'échantillon testé.
Pour réaliser le test : ks.test(serie,ploi,par) où loi est la loi choisie
et par ses paramètres séparés par une virgule. Ce test peut être utilisé pour
une loi normale, mais il est moins puissant que celui de Shapiro-Wilk.
43. Egalité des variances de plusieurs série de données
Ces tests peuvent être une fin en soi mais sont souvent préliminaires à
d'autres tests. L'égalité des variances (ou homoscédasticité) doit en effet au
minimum être contrôlée, au maximum exigée dans de nombreux tests
usuels.
Comparaison des variances de deux populations
Test de Fisher (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être dans les deux échantillons à la fois ; la distribution
dans chaque échantillon doit être normale.
Pour réaliser le test : var.test(serie1,serie2) où serie1 et serie2
sont des vecteurs contenant les deux séries de données à comparer. Si les
données sont dans un tableau où une colonne contient les valeurs de la
variable mesurée et une autre le facteur déterminant les classes à comparer,
la syntaxe peut être var.test(variable~facteur)
Ce test est très sensible à la condition de normalité. De plus prendre garde
aux individus extrêmes qui ont une grande influence sur la variance.
Test de Fligner-Killeen (non paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être dans les deux échantillons à la fois.
Pour réaliser le test : fligner.test(variable,facteur) ou
fligner.test(variable~facteur)
Comparaison des variances de plus de deux populations
Test de Bartlett (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être dans plusieurs échantillons à la fois ; la distribution
dans chaque échantillon doit être normale ; l'effectif de chaque échantillon
doit être au moins égal à 4.
Pour réaliser le test : bartlett.test(variable,facteur) ou
bartlett.test(variable~facteur)
Ce test est très sensible aux conditions de normalité et d'effectif minimum.
De plus prendre garde aux individus extrêmes qui ont une grande influence
sur la variance.
Test de Fligner-Killeen (non paramétrique) (voir ci-dessus)
44. Les transformations de variables
Les tests paramétriques sont en général plus puissants que leurs
homologues non paramétriques. Cependant ils ont des conditions
d'application plus rigoureuses (notamment normalité des distributions et
homoscédasticité). Lorsque celles-ci ne sont pas remplies, il y a donc deux
possibilités : (i) utiliser un test homologue non paramétrique moins puissant
ou (ii) transformer la variable pour satisfaire la ou les conditions non
remplie(s) et utiliser le test paramétrique. La conclusion d'un test sur des
données transformées s'applique en effet aussi bien aux données initiales.
Les transformations usuelles sont les suivantes :
• logarithmique : variable2=log(variable,10) A utiliser lorsque
la moyenne des échantillons (si plusieurs sont disponibles) est
proportionnelle à leur écart-type. En histogramme cela donne un
fort biais à gauche de la distribution. Utilisée fréquemment lorsque
des processus de croissance ou de multiplication sont en jeu :
masse, rendement, décompte d'organismes vivants...
• racine : variable2=sqrt(variable) A utiliser lorsque la
moyenne des échantillons est proportionnelle à leur variance (ce
qui est exactement le cas pour les distributions de Poisson). En
histogramme cela donne un léger biais à gauche
• inverse : variable2=1/variable A utiliser lorsque la variable est
distribuée "en i", i.e. lorsque les valeurs les plus faibles sont les plus
fréquentes
• angulaire : variable2=asin(sqrt(variable)) A utiliser
lorsque la variable suit une distribution binomiale (proportions).
Il existe un très grand nombre de transformations possibles. Elles peuvent
être utilisées sur des bases théoriques ou de façon empirique. Dans tous les
cas, chercher une transformation hypercomplexe qui permettra de satisfaire
une condition d'un test n'est pas conseillé. Si une transformation simple ne
fonctionne pas, c'est que les données sont vraiment "particulières". Il
convient alors (i) de chercher d'où vient cette particularité, ce qui peut être
biologiquement intéressant et (ii) d'utiliser un test non paramétrique.
Une fois qu'une transformation a été appliquée, il est nécessaire de repasser
par un examen graphique des données (à l'aide des fonctions hist(),
plot() et/ou boxplot(), voir fiches 6, 7 et 9) et par les tests qui avaient
conduit à les transformer (le plus souvent ajustement à une distribution
théorique et homoscédasticité, voir fiches 42 et 43).
45. Conformité de plusieurs effectifs avec des valeurs
théoriques ou comparaison de plusieurs effectifs
Les effectifs à comparer sont en fait les effectifs des différentes classes
d'une même variable qualitative. Cette variable peut être une mesure si l'on
compare des effectifs de classes au sein d'une population, ou la population si
l'on compare les effectifs totaux de plusieurs populations.
Test du χ² de conformité
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs effectifs à la fois ; au
moins 80 % des effectifs théoriques doivent être non nuls et ≥ 5 (voir cidessous pour obtenir les effectifs théoriques).
Pour réaliser le test : chisq.test(effectifs,p=prop_theo) où
effectifs est un vecteur contenant les effectifs de chaque classe et
prop_theo un vecteur contenant les proportions théoriques (et non pas les
effectifs théoriques) de chaque classe, dans le même ordre que dans
effectifs (la somme devant faire 1). Si p n'est pas précisé les proportions
théoriques sont par défaut les mêmes pour chaque classe (l'égalité des
effectifs est donc testée).
les
effectifs
théoriques
sont
donnés
par
la
fonction
chisq.test(effectifs,p=prop_theo)$expected
Une p-value significative indique qu'au moins un effectif diffère de sa valeur
théorique, sans préciser le(s)quel(s). Il est donc dans ce cas nécessaire de
réaliser des comparaisons deux à deux pour identifier le(s) effectif(s) en
question. La procédure est la suivante :
(1) Réaliser autant de tests du χ² de conformité qu'il y a de classes, de la
façon suivante : chisq.test(c(ni,1-ni),p=c(pi,1-pi)) où ni est
l'effectif de la classe et pi sa proportion théorique
(2) Noter la p-value de chacun de ces tests (et la classe testée à chaque fois)
(3) Corriger les p-values avec une méthode choisie à l'avance (voir fiche 35)
(4) Considérer que les p-values significatives après correction indiquent les
classes dont l'effectif diffère de leur valeur théorique.
Il peut arriver que les comparaisons deux à deux n'indiquent aucune
différence significative, contrairement au test global. Dans ce cas, la solution
la plus prudente est de considérer qu'on ne peut pas savoir quelle classe est
responsable du rejet de l'hypothèse nulle dans le test global.
46. Comparaison de plusieurs effectifs ou indépendance de
deux variables qualitatives
Ces deux démarches sont en fait équivalentes puisqu'elles testent si la
répartition des individus dans les différentes classes d'une variable A est liée
à leur répartition dans les différentes classes d'une variable B. Pour les tests
suivants, les données doivent être organisées en un tableau de contingence
du type :
Variable B
Classe 1
…
Classe c
Classe 1
Variable A
…
Classe k
où chaque case contient le nombre d'individus possédant à la fois le
caractère de la variable A et celui de la variable B.
Ce
tableau
est
obtenu
de
la
manière
suivante
:
tab_cont=table(variableA,variableB) où variableA et variableB
sont des vecteurs contenant les valeurs de chaque individu pour la variable A
et la variable B (dans le même ordre). Une représentation graphique du
tableau de contingence peut être obtenue à l'aide de la fonction
mosaicplot(tab_cont)
Test du χ² d'homogénéité (ou d'indépendance)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs cases du tableau de
contingence à la fois ; chaque case du tableau de contingence doit présenter
un effectif théorique non nul et ≥ 5 (les effectifs théoriques sont donnés par
la fonction chisq.test(tab_cont)$expected).
Pour réaliser le test : chisq.test(tab_cont)
Test exact de Fisher
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs cases du tableau de
contingence à la fois.
Pour réaliser le test : fisher.test(tab_cont)
Si le message d'avertissement out of workspace apparaît, augmenter le
nombre dans l'argument workspace (par défaut 200000). Si un autre
message d'avertissement apparaît, cela peut être à cause d'un tableau trop
complexe à analyser.
Quel que soit le test utilisé, une p-value significative indique que les deux
variables ne sont pas indépendantes, sans préciser la (les) classe(s) qui sont à
l'origine de cette liaison. Il est donc dans ce cas nécessaire de réaliser des
comparaisons deux à deux pour identifier la (les) classe(s) en question. La
procédure est la suivante :
(1) Créer autant de tableaux de contingence qu'il y a de combinaisons
possibles entre deux classes de la variable A et deux classes de la
variable B
(2) Réaliser un test exact de Fisher par tableau créé
(3) Noter la p-value de chacun de ces tests (et les classe testées à chaque
fois)
(4) Corriger les p-values avec une méthode choisie à l'avance (voir fiche 35)
(5) Considérer que les p-values significatives après correction indiquent les
classes qui sont liées entre elles.
Il peut arriver que les comparaisons deux à deux n'indiquent aucune liaison
significative, contrairement au test global. Dans ce cas, la solution la plus
prudente est de considérer qu'on ne peut pas savoir quelle classe est
responsable du rejet de l'hypothèse nulle dans le test global.
47. Conformité d'une proportion avec une valeur théorique
Test binomial exact
Conditions : l'échantillonnage doit être aléatoire et simple.
Pour réaliser le test : binom.test(n1,n,p) où n1 est le nombre d'individus
de la catégorie d'intérêt, n l'effectif total et p la proportion théorique de la
catégorie d'intérêt (ex : pour comparer le sex-ratio d'un échantillon de 20
individus contenant 8 mâles à un sex-ratio équilibré, la syntaxe est
binom.test(8,20,0.5)).
48. Conformité de plusieurs proportions avec des valeurs
théoriques
Pour comparer plusieurs proportions, il doit en fait y avoir deux variables
qualitatives : l'une définissant les populations à comparer (à k classes
correspondant aux k populations), l'autre définissant les deux groupes à
l'intérieur de chaque échantillon (la seconde donnant les proportions). Pour
le test suivant, les données doivent être organisées en un tableau de
contingence du type :
Variable B (mesure)
Classe 1
Variable A
(population)
Classe 2
Classe 1
…
Classe k
où chaque case contient le nombre d'individus possédant à la fois le
caractère de la variable A et celui de la variable B.
Ce
tableau
est
obtenu
de
la
manière
suivante
:
tab_cont=table(variableA,variableB) où variableA et variableB
sont des vecteurs contenant les valeurs de chaque individu pour la variable A
et la variable B (dans le même ordre). Une représentation graphique du
tableau de contingence peut être obtenue à l'aide de la fonction
mosaicplot(tab_cont)
Les proportions comparées sont celles de la première colonne du tableau de
contingence (classe 1 de la variable B).
Test du χ²
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs cases du tableau de
contingence à la fois ; chaque case du tableau de contingence doit présenter
un effectif théorique non nul et ≥ 5 (voir ci-dessous pour obtenir les effectifs
théoriques).
Pour réaliser le test : prop.test(tab_cont,p=prop_theo) où
prop_theo est un vecteur contenant les proportions théoriques de chaque
population (dans l'ordre des populations).
Pour
obtenir
les
effectifs
théoriques
utiliser
la
fonction
eff.theo(tab_cont,prop_theo) à rentrer manuellement :
eff.theo=function(data,p.theo,graphe=FALSE){
if (length(p.theo)!=length(data[,1])){stop("Il n'y a
pas le même nombre de proportions théoriques que de
populations")}
n=NULL
for (i in 1:length(data[,1])) {n=c(n,sum(data[i,]))}
n.theo1=n*p.theo
n.theo2=n*(1-p.theo)
n.theo.mat=matrix(c(n.theo1,n.theo2),nrow=length(data[,
1]),dimnames=list(rownames(data),colnames(data)))
cochran.max=ceiling(0.8*length(data))
cochran.min=length(data)-cochran.max
cat('Effectifs théoriques\n\n')
print(n.theo.mat)
cat(paste('\nRègle de Cochran :',cochran.min,'case(s)
maximum peu(ven)t être < ou = à 5\n'))
if (graphe==TRUE)
{mosaicplot(n.theo.mat,main='Théorique',col=T)}}
L'argument facultatif graphe=TRUE permet d'obtenir une représentation
graphique des effectifs théoriques.
Une p-value significative indique qu'au moins une proportion diffère de sa
valeur théorique, sans préciser la(es)quelle(s). Il est donc dans ce cas
nécessaire de réaliser des comparaisons deux à deux pour identifier la (les)
proportion(s) en question. La procédure est la suivante :
(1) Réaliser autant de fois le test binomial exact qu'il y a de populations, de
la façon suivante : binom.test(n1,n,p) où n1 est l'effectif de la
classe 1 de la variable B dans la population et p sa proportion
théorique
(2) Noter la p-value de chacun de ces tests (et la population testée à chaque
fois)
(3) Corriger les p-values avec une méthode choisie à l'avance (voir fiche 35)
(4) Considérer que les p-values significatives après correction indiquent les
populations dans lesquelles la proportion diffère de sa valeur
théorique.
Il peut arriver que les comparaisons deux à deux n'indiquent aucune
différence significative, contrairement au test global. Dans ce cas, la solution
la plus prudente est de considérer qu'on ne peut pas savoir quelle
population est responsable du rejet de l'hypothèse nulle dans le test global.
49. Comparaison de deux proportions
Pour comparer deux proportions, il doit en fait y avoir deux variables
qualitatives (à deux classes) : l'une définissant les deux populations à
comparer, l'autre définissant les deux groupes à l'intérieur de chaque
échantillon (la seconde donnant les proportions). Pour les tests suivants, les
données doivent être organisées en un tableau de contingence du type :
Variable B (mesure)
Classe 1
Variable A
(population)
Classe 2
Classe 1
Classe 2
où chaque case contient le nombre d'individus possédant à la fois le
caractère de la variable A et celui de la variable B.
Ce
tableau
est
obtenu
de
la
manière
suivante
:
tab_cont=table(variableA,variableB) où variableA et variableB
sont des vecteurs contenant les valeurs de chaque individu pour la variable A
et la variable B (dans le même ordre). Une représentation graphique du
tableau de contingence peut être obtenue à l'aide de la fonction
mosaicplot(tab_cont)
Séries non appariées
Dans ces tests, les proportions comparées sont celles de la première colonne
du tableau de contingence (classe 1 de la variable B).
Test du χ² d'homogénéité (ou d'indépendance)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs cases du tableau de
contingence à la fois ; chaque case du tableau de contingence doit présenter
un effectif théorique non nul et ≥ 5 (les effectifs théoriques sont donnés par
la fonction chisq.test(tab_cont)$expected).
Pour réaliser le test : prop.test(tab_cont)
R renvoie également l'intervalle de confiance à 95 % de la différence entre
les deux proportions lorsqu'il réalise le test.
Test exact de Fisher
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs cases du tableau de
contingence à la fois.
Pour réaliser le test : fisher.test(tab_cont)
Séries appariées
Dans le cas de séries appariées, l'individu est soit une entité mesurée deux
fois, soit une paire d'entités reliées entre elles et sur qui la même mesure a
été réalisée. Le tableau de contingence est donc différent :
Variable B (2ème mesure)
Classe 1
Variable A
(1ère mesure)
Classe 2
Classe 1
Classe 2
Test binomial exact
Conditions : l'échantillonnage doit être aléatoire et simple simple ; les
individus ne doivent pas pouvoir être décomptés dans plusieurs cases du
tableau de contingence à la fois ; les individus doivent pouvoir changer de
classe lors de la 2ème mesure.
Pour réaliser le test : binom.test(n12,ns,0.5) où n12 est le nombre
d'individus qui sont de classe 1 lors de la première mesure et de classe 2 lors
de la seconde (case en haut à droite), ns est le nombre d'individus qui ont
changé de classe entre les deux mesures (quel que soit le sens de ce
changement : case en bas à gauche + case en haut à droite).
50. Comparaison de plusieurs proportions
Pour comparer plusieurs proportions, il doit en fait y avoir deux variables
qualitatives : l'une définissant les populations à comparer (à k classes
correspondant aux k populations), l'autre définissant les deux groupes à
l'intérieur de chaque échantillon (la seconde donnant les proportions). Pour
les tests suivants, les données doivent être organisées en un tableau de
contingence du type :
Variable B (mesure)
Classe 1
Variable A
(population)
Classe 2
Classe 1
…
Classe k
où chaque case contient le nombre d'individus possédant à la fois le
caractère de la variable A et celui de la variable B.
Ce
tableau
est
obtenu
de
la
manière
suivante
:
tab_cont=table(variableA,variableB) où variableA et variableB
sont des vecteurs contenant les valeurs de chaque individu pour la variable A
et la variable B (dans le même ordre). Une représentation graphique du
tableau de contingence peut être obtenue à l'aide de la fonction
mosaicplot(tab_cont)
Les proportions comparées sont celles de la première colonne du tableau de
contingence (classe 1 de la variable B).
Test du χ² d'homogénéité (ou d'indépendance)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs cases du tableau de
contingence à la fois ; chaque case du tableau de contingence doit présenter
un effectif théorique non nul et ≥ 5 (les effectifs théoriques sont donnés par
la fonction chisq.test(tab_cont)$expected).
Pour réaliser le test : prop.test(tab_cont)
Une p-value significative indique qu'au moins une proportion diffère des
autres, sans préciser la(es)quelle(s). Il est donc dans ce cas nécessaire de
réaliser des comparaisons deux à deux pour identifier la (les) proportion(s)
en
question.
Pour
cela
utiliser
la
fonction
pairwise.prop.test(tab_cont,p.adjust.method=methode)
(voir
fiche 35 pour choisir la méthode de correction du seuil de rejet α).
51. Conformité d'une moyenne avec une valeur théorique
Test t de Student (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; la distribution
des valeurs de l'échantillon doit être normale.
Pour réaliser le test : t.test(variable,mu=mthéo) où variable est un
vecteur contenant la série de données et mthéo la moyenne théorique à
comparer.
Ce test étant assez robuste, il peut être utilisé lorsque la distribution des
valeurs ne suit pas une loi normale, à condition qu'elle ne s'en éloigne pas
trop et que l'échantillon soit de grande taille (> 30 individus). Prendre garde
aux individus extrêmes qui ont une grande influence sur la moyenne.
Test des signes de Wilcoxon (non paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; la distribution
des valeurs de l'échantillon doit être symétrique (uni- ou polymodale mais
symétrique).
Pour réaliser le test : wilcox.test(variable,mu=mthéo)
Ce test compare en fait la médiane de l'échantillon à la valeur théorique.
Mais si la distribution est symétrique, médiane et moyenne sont
confondues. Examiner cette condition à l'aide d'un graphique type
boxplot() (voir fiche 7). La médiane n'est pas sensible aux individus
extrêmes.
52. Comparaison de deux moyennes
Séries non appariées
Test t de Student (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans les deux échantillons à la fois ; la
distribution des valeurs dans chaque échantillon doit être normale ; la
variance doit être égale entre les deux échantillons.
Pour réaliser le test : t.test(serie1,serie2,var.equal=TRUE) où
serie1 et serie2 sont les deux vecteurs contenant les séries de données à
comparer. Si les données sont dans un tableau où une colonne contient les
valeurs de la variable mesurée et une autre le facteur déterminant les
classes à comparer, la syntaxe peut être t.test(variable~facteur)
R renvoie également l'intervalle de confiance à 95 % de la différence entre
les deux moyennes lorsqu'il réalise le test.
Ce test étant assez robuste, il peut être utilisé lorsque la distribution des
valeurs ne suit pas une loi normale, à condition qu'elle ne s'en éloigne pas
trop et que l'échantillon soit de grande taille (> 30 individus). Il est
cependant très sensible à la condition d'homoscédasticité. De plus prendre
garde aux individus extrêmes qui ont une grande influence sur la moyenne.
Si les variances sont inégales, appliquer la correction de Welch en précisant
var.equal=FALSE (ce qui est le cas par défaut si var.equal n'est pas
précisé).
Test de Mann-Whitney-Wilcoxon (non paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans les deux échantillons à la fois ; la
distribution des valeurs dans les deux échantillons doit avoir la même forme
(peu importe celle-ci).
Pour
réaliser
le
test
:
wilcox.test(serie1,serie2)
ou
wilcox.test(variable~facteur)
Ce test est très sensible à la similitude des distributions dans les deux
échantillons. Il faut donc toujours rester prudent quant à son interprétation
car cette condition est difficile à remplir.
Séries appariées
Dans le cas de séries appariées, l'individu est soit une entité mesurée deux
fois, soit une paire d'entités reliées entre elles et sur qui la même mesure a
été réalisée.
Test t de Student pour séries appariées (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; chaque individu
doit être présent dans les deux échantillons à la fois ; la distribution des
valeurs dans chaque échantillon doit être normale.
Pour réaliser le test : t.test(serie1,serie2,paired=TRUE)
R renvoie également l'intervalle de confiance à 95 % de la différence entre
les deux moyennes lorsqu'il réalise le test.
Ce test étant assez robuste, il peut être utilisé lorsque la distribution des
valeurs ne suit pas une loi normale, à condition qu'elle ne s'en éloigne pas
trop et que l'échantillon soit de grande taille (> 30 individus). Prendre garde
aux individus extrêmes qui ont une grande influence sur la moyenne.
A l'issue de ce test, on peut s'intéresser à la liaison entre les deux séries de
données en réalisant un test du coefficient de corrélation (voir fiche 55).
Test des signes de Wilcoxon pour séries appariées (non paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; chaque individu
doit être présent dans les deux échantillons à la fois ; la distribution des
valeurs dans chaque échantillon doit être symétrique (uni- ou polymodale
mais symétrique).
Pour réaliser le test : wilcox.test(serie1,serie2,paired=TRUE)
Ce test compare en fait la médiane des deux échantillons. Mais si leur
distribution est symétrique, médiane et moyenne sont confondues.
Examiner cette condition à l'aide d'un graphique type boxplot() (voir fiche
7). La médiane n'est pas sensible aux individus extrêmes.
A l'issue de ce test, on peut s'intéresser à la liaison entre les deux séries de
données en réalisant un test du coefficient de corrélation (voir fiche 55).
53. Comparaison de plusieurs moyennes - un facteur
Analyse de variance (ANOVA) en Modèle Linéaire (LM) (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs échantillons à la fois ; la
distribution des valeurs dans chaque échantillon doit être normale ; la
distribution des résidus du modèle doit être normale (voir ci-dessous pour
tester cette hypothèse) ; la variance doit être égale entre tous les
échantillons.
Pour réaliser le test : commencer par écrire le modèle
modele=lm(variable~facteur) où lm() est la fonction décrivant le
modèle linéaire, variable est un vecteur contenant les valeurs de la
variable mesurée et facteur un vecteur contenant la classe de chaque
individu (dans le même ordre que variable), déterminant donc les
échantillons à comparer. L'ANOVA est réalisée grâce à la fonction
anova(modele)
Pour tester l'hypothèse de normalité des résidus du modèle utiliser
l'observation graphique via qqnorm(residuals(modele)) et/ou le test de
Shapiro-Wilk via shapiro.test(residuals(modele)) (voir fiche 42).
Ce test étant assez robuste, il peut être utilisé lorsque la distribution des
valeurs ne suit pas une loi normale, à condition qu'elle ne s'en éloigne pas
trop et que l'échantillon soit de grande taille (> 30 individus). Il est
cependant très sensible à la condition d'homoscédasticité. De plus prendre
garde aux individus extrêmes qui ont une grande influence sur la moyenne.
Une p-value significative indique qu'au moins une moyenne diffère des
autres, sans préciser la(es)quelle(s). Il est donc dans ce cas nécessaire de
réaliser des comparaisons deux à deux pour identifier la (les) moyenne(s) en
question.
Pour
cela
utiliser
la
fonction
pairwise.t.test(variable,facteur,p.adjust.method=methode)
(voir fiche 35 pour choisir la méthode de correction du seuil de rejet α).
Analyse de déviance en Modèle Linéaire Généralisé (GLM) (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs échantillons à la fois.
Les GLMs sont en fait utilisés lorsque les variances ne sont pas égales entre
tous les échantillons à comparer et/ou les résidus du modèle linéaire ne sont
pas distribués normalement. Ils doivent être utilisés en particulier lorsque les
données sont des dénombrements ou des proportions (dans le cas des
proportions, les GLMs sont plus puissants que le test du χ² d'homogénéité).
Pour
réaliser
le
test
:
commencer
par
écrire le modèle
où loi décrit la
distribution suivie par les résidus du modèle. Les lois les plus classiques sont
gaussian pour une distribution normale (cas où une ANOVA n'est pas
possible car l'homoscédasticité n'est pas respectée), poisson lorsque les
données sont des dénombrements et binomial lorsque les données sont
des proportions (dans ce cas la variable doit être codée sous forme binaire, 0
si l'individu appartient à une classe et 1 lorsqu'il appartient à l'autre).
L'analyse de déviance est réalisée grâce à la fonction
modele=glm(variable~facteur,family=loi)
anova.glm(modele,test='Chisq')
Une p-value significative indique qu'au moins une moyenne diffère des
autres, sans préciser la(es)quelle(s). Il est donc dans ce cas nécessaire de
réaliser des comparaisons deux à deux pour identifier la (les) moyenne(s) en
question. Pour cela utiliser la méthode des contrastes, qui nécessite tout
d'abord de créer une matrice donnant les comparaisons à réaliser, sous la
forme :
Contraste 1
Contraste 2
Contraste 3
Classe 1 Classe 2 Classe 3
1
-1
0
0
1
-1
2
-1
-1
Dans cette matrice, les comparaisons (ou contrastes) doivent être
représentées en lignes, tandis que les classes du facteur sont en colonne. Les
conventions d'écriture des contrastes sont les suivantes :
• les classes n'intervenant pas dans la comparaison doivent avoir une
valeur nulle
• les classes à comparer doivent avoir une valeur non nulle et un
signe opposé
• il est possible d'effectuer des regroupements de classes
• la somme des valeurs positives et négatives d'un contraste doit
être nulle.
Attention, R considère les classes du facteur dans l'ordre alphabétique, c'està-dire que la 1ère colonne doit correspondre à la 1ère classe dans l'ordre
alphabétique, et ainsi de suite.
Pour créer la matrice, utiliser contrastes=rbind(ligne1,ligne2,...)
où ligne1 est un vecteur contenant les valeurs de la 1ère ligne, de gauche à
droite (dans notre exemple c(1,-1,0)). Pour ne pas se tromper dans
l'interprétation
des
comparaisons,
on
peut
utiliser
colnames(contrastes)=levels(facteur) qui donne aux colonnes le
nom de chaque classe du facteur, dans l'ordre alphabétique.
Il faut ensuite modifier légèrement le modèle avant de réaliser les
comparaisons : modele2=glm(variable~facteur-1,family=loi)
Les comparaisons peuvent enfin être calculées, grâce à la fonction
esticon() du package doBy : esticon(modele2,contrastes) La
fonction renvoie une ligne par contraste, dans le même ordre que la matrice.
Lors d'études expérimentales, il peut arriver que les individus forment des
séries appariées. Par exemple, on peut imaginer réaliser une mesure sur 120
individus répartis dans trois traitements, ces 120 individus étant issus de 12
mères différentes (10 individus étant utilisés par mère). On peut
classiquement analyser l'influence du traitement sur la mesure, mais il faut
également tenir compte des séries appariées, c'est-à-dire en terme
biologique de la corrélation génétique qui existe entre les frères et sœurs
issus d'une même mère. La méthode à utiliser dans ce cas est la méthode
d'Estimation des Equations Généralisées (GEE), qui consiste en un GLM
tenant compte des séries appariées. Elle nécessite l'installation du package
geepack.
Le
modèle
s'écrit
de
la
façon
suivante
:
modele=geeglm(variable~facteur,family=loi,id=famille,
corstr='exch') où famille est un vecteur contenant la famille de
chaque individu (dans le même ordre que variable et facteur) et
corstr='exch' signifie qu'on considère que les corrélations qui lient les
individus d'une même série appariée sont égales.
L'analyse de déviance est réalisée grâce à la fonction
anova.geeglm(modele,test='Chi') et, dans le cas d'un p-value
significative, les comparaisons deux à deux se font par la méthode des
contrastes de la même façon que pour un GLM classique.
Test de Kruskal-Wallis (non paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs échantillons à la fois ; la
distribution des valeurs dans tous les échantillons doit avoir la même forme
(peu importe celle-ci).
Pour réaliser le test : kruskal.test(variable~facteur)
Si la p-value est significative, les comparaisons deux à deux sont réalisées
grâce à la fonction pairwise.wilcox.test(variable,facteur,
p.adjust.method=methode) (voir fiche 35 pour choisir la méthode de
correction du seuil de rejet α).
Ce test est très sensible à la similitude des distributions des échantillons. Il
faut donc toujours rester prudent quant à son interprétation.
54. Comparaison de plusieurs moyennes - deux facteurs
A partir de deux facteurs, la comparaison de plusieurs moyennes devient
complexe. Le seul cas étudié ici est celui des plans d'expérience
orthogonaux, i.e. qui possèdent le même nombre de répétitions dans
chaque traitement, sans séries appariées. Dans la mesure du possible
l'orthogonalité est recommandée car elle facilite l'analyse des données.
La construction du modèle représentant les données est elle aussi plus
complexe car elle nécessite que les facteurs soient préalablement identifiés
comme fixes ou aléatoires, ce qui est souvent difficile sans expérience (voir
fiche 3). Leur interprétation est en effet différente : un facteur fixe a une
influence sur la moyenne de la variable mesurée, tandis qu'un facteur
aléatoire a une influence sur sa variance. De plus, leur effet n'est pas calculé
de la même façon.
La construction du modèle nécessite également que le plan d'expérience soit
bien retranscrit. Ici seuls les modèles croisés (où toutes les combinaisons des
modalités des deux facteurs sont réalisées) et hiérarchisés (où un facteur est
subordonné à l'autre ; ex : un facteur population dans un facteur région)
sont présentés.
Les moyennes peuvent être visualisées en fonction des deux facteurs grâce à
la fonction interaction.plot(facteur1,facteur2,variable) où
facteur1 et facteur2 sont des vecteurs contenant la classe de chaque
individu pour les deux facteurs (dans le même ordre), déterminant donc les
échantillons à comparer, et variable est un vecteur contenant les valeurs
de la variable mesurée (dans le même ordre que facteur1 et facteur2).
Les trois vecteurs ne doivent pas contenir de données manquantes (NA).
Analyse de variance (ANOVA) en Modèle Linéaire (LM) (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs échantillons à la fois ; la
distribution des valeurs dans chaque échantillon doit être normale ; la
distribution des résidus du modèle doit être normale (voir ci-dessous pour
tester cette hypothèse) ; la variance doit être égale entre tous les
échantillons.
Pour réaliser le test, les fonctions à utiliser sont aov() pour réaliser l'ANOVA
et summary() pour en extraire le tableau de synthèse. La syntaxe varie
selon le type de modèle :
• Modèle croisé :
modele=
 fixe
(deux
facteurs
fixes)
:
variable~facteur1*facteur2 puis summary(aov(modele))
Le symbole * signifie que l'influence des deux facteurs et de leur
interaction est testée (un modèle additif, sans interaction, s'écrit
en remplaçant ce symbole par un +)
 aléatoire (deux facteurs aléatoires) : l'ANOVA doit être réalisée en
deux temps :
 modele1=variable~facteur1*facteur2
puis
summary(aov(modele1)) Dans ce tableau, seul le test de
l'interaction entre les deux facteurs est à retenir
 modele2=variable~facteur1+facteur2+Error(
facteur1:facteur2)
puis
summary(aov(modele2))
Dans ce tableau, le test des deux facteurs est à retenir
 mixte (un facteur fixe et un aléatoire) : l'ANOVA doit être réalisée
en deux temps :
 modele1=variable~facteurfixe*facteuraléa
puis
summary(aov(modele1)) Dans ce tableau, seuls les tests du
facteur aléatoire et de l'interaction sont à retenir
Error(
 modele2=variable~facteurfixe+facteuraléa+
facteurfixe:facteuraléa)
puis
summary(aov(modele2)) Dans ce tableau, seul l'effet du
facteur fixe est à retenir
• Modèle hiérarchisé :
 aléatoire : l'ANOVA doit être réalisée en deux temps :
 modele1=variable~facteursup/facteurinf
puis
summary(aov(modele1)) Dans ce tableau, seul le test du
facteur inférieur est à retenir
 modele2=variable~facteursup+Error(facteurinf) puis
summary(aov(modele2)) Dans ce tableau le test du facteur
supérieur est à retenir
 mixte : identique au modèle hiérarchisé aléatoire.
Pour tester l'hypothèse de normalité des résidus du modèle, utiliser
l'observation graphique via qqnorm(residuals(modele)) et/ou le test de
Shapiro-Wilk via shapiro.test(residuals(modele)) (voir fiche 42).
Lorsque deux modèles doivent être écrits, le modèle à utiliser est le
modele1
Ce test étant assez robuste, il peut être utilisé lorsque la distribution des
valeurs ne suit pas une loi normale, à condition qu'elle ne s'en éloigne pas
trop et que l'échantillon soit de grande taille (> 30 individus). Il est
cependant très sensible à la condition d'homoscédasticité. De plus prendre
garde aux individus extrêmes qui ont une grande influence sur la moyenne.
Une p-value significative pour un facteur indique qu'au moins une classe de
ce facteur a une moyenne qui diffère des autres, sans préciser
la(es)quelle(s). Il est donc dans ce cas nécessaire de réaliser des
comparaisons deux à deux pour identifier la (les) classe(s) en question. Pour
cela
utiliser
la
fonction
pairwise.t.test(variable,facteur,p.adjust.method=methode)
(voir fiche 35 pour choisir la méthode de correction du seuil de rejet α).
Lorsque le plan d'expérience n'est pas orthogonal, utiliser la fonction lm() si
le modèle est croisé fixe (voir fiche 53), lmer() (package lme4) dans tous
les autres cas. Attention, l'ordre des facteurs dans le modèle a une
importance dans ce cas (mais pas si le plan est orthogonal).
Analyse de déviance en Modèle Linéaire Généralisé (GLM) (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les individus ne
doivent pas pouvoir être décomptés dans plusieurs échantillons à la fois.
Les GLMs sont en fait utilisés lorsque les variances ne sont pas égales entre
tous les échantillons à comparer et/ou les résidus du modèle linéaire ne sont
pas distribués normalement. Ils doivent être utilisés en particulier lorsque les
données sont des dénombrements ou des proportions.
Si
le
modèle
est
croisé
fixe,
il
s'écrit
modele=glm(variable~facteur1*facteur2,family=loi)
où loi
décrit la distribution suivie par les résidus du modèle. Les lois les plus
classiques sont gaussian pour une distribution normale (cas où une ANOVA
n'est pas possible car l'homoscédasticité n'est pas respectée), poisson
lorsque les données sont des dénombrements et binomial lorsque les
données sont des proportions (dans ce cas la variable doit être codée sous
forme binaire, 0 si l'individu appartient à une classe et 1 lorsqu'il appartient
à l'autre). L'analyse de déviance est réalisée grâce à la fonction
anova.glm(modele,test='Chisq')
Dans tous les autres cas, utiliser la fonction glmer() (package lme4).
Une p-value significative pour un facteur indique qu'au moins une classe de
ce facteur a une moyenne qui diffère des autres, sans préciser
la(es)quelle(s). Il est donc dans ce cas nécessaire de réaliser des
comparaisons deux à deux pour identifier la (les) classe(s) en question. Pour
cela utiliser la méthode des contrastes (voir fiche 53).
Les fonctions glm() et glmer() gèrent aussi bien les plans d'expériences
orthogonaux que non orthogonaux. Attention cependant, l'ordre des
facteurs dans le modèle a une importance si le plan est non orthogonal.
55. Coefficient de corrélation linéaire entre deux variables
La détermination du coefficient de corrélation linéaire ne peut se passer
d'une analyse graphique (à l'aide de la fonction plot(), voir fiche 9),
notamment pour observer si la relation entre les deux variables est linéaire.
Coefficient de corrélation de Pearson (paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les deux
variables doivent être quantitatives (continues ou discrètes) ; chaque
individu doit posséder une valeur pour les deux variables ; chaque variable
doit avoir une distribution normale ; pour chaque valeur d'une variable, la
distribution des valeurs possibles de la seconde doit suivre une loi normale
(voir ci-dessous pour tester cette hypothèse, dite de binormalité) ; la relation
entre les deux variables doit être linéaire.
Pour
réaliser
le
test
:
cor.test(variable1,variable2,
method='pearson') où variable1 et variable2 sont des vecteurs
contenant les valeurs de chaque individu pour chaque variable (dans le
même ordre). R renvoie la valeur du coefficient de corrélation et son
intervalle de confiance à 95 %.
Pour tester l'hypothèse de binormalité, tester la normalité des résidus de la
régression de la 1ère variable sur la 2ème et inversement, en utilisant les
fonctions qqnorm() et shapiro.test() (voir fiche 42) sur
residuals(lm(variable1~variable2))
et
residuals(lm(
variable2~variable1))
Ce test étant assez robuste, la condition de binormalité est peu
contraignante lorsque l'échantillon est de grande taille (> 20 individus). Il
peut dans ces conditions être aussi utilisé pour des variables qualitatives
ordinales codées sous forme numérique. Prendre garde aux individus
extrêmes qui ont une grande influence sur le coefficient de corrélation.
Coefficient de corrélation de Spearman (non paramétrique)
Conditions : l'échantillonnage doit être aléatoire et simple ; les deux
variables doivent être quantitatives (continues ou discrètes) ou qualitatives
ordinales (codées numériquement) ; chaque individu doit posséder une
valeur pour les deux variables ; la relation entre les deux variables doit être
monotone (ascendante ou descendante, mais pas forcément linéaire).
Pour
réaliser
le
test
:
cor.test(variable1,variable2,
method='spearman') R ne calcule pas l'intervalle de confiance du
coefficient de corrélation, pour l'obtenir utiliser la fonction
spearman.limit(variable1,variable2) à rentrer manuellement :
spearman.limit=function(var1,var2){
if (length(var1)!=length(var2)) {stop("Les deux
vecteurs n'ont pas la même taille")}
coeff=NULL
for (i in 1:1000) {
ech=sample(x=c(1:length(var1)),size=length(var1),replac
e=T)
var1_2=var1[ech];var2_2=var2[ech]
coeff=c(coeff,as.numeric(suppressWarnings(cor.test(var1
_2,var2_2,method='spearman')$estimate)))}
coeff.sort=sort(coeff)
cat(paste("Intervalle de confiance à 95
%\n",round(coeff.sort[25],7),round(coeff.sort[975],7
),"\n"))}
Cette fonction étant basée sur un bootstrap avec 1000 répétitions, elle peut
nécessiter quelques secondes de calcul.
Coefficient d'association de Cramer
Conditions : l'échantillonnage doit être aléatoire et simple ; les deux
variables doivent être qualitatives (ordinales ou nominales) ; chaque individu
doit posséder une valeur pour les deux variables ; chaque classe des deux
variables doit contenir au moins 5 % du nombre total d'individus.
Pour
réaliser
le
test
:
utiliser
la
fonction
cramer.cor(variable1,variable2) à rentrer manuellement :
cramer.cor=function(var1,var2){
if (length(var1)!=length(var2)) {stop("Les deux
vecteurs n'ont pas la même taille")}
v=as.numeric(sqrt(suppressWarnings(chisq.test(table(var
1,var2))$statistic)/(sum(table(var1,var2))*(min(dim(
table(var1,var2)))-1))))
data=data.frame(var1,var2)
vtot=NULL
for (i in 1:1000) {
ech=sample(x=c(1:length(data[,1])),size=length(data[,1]
),replace=T)
var1_2=var1[ech];var2_2=var2[ech]
vtot=c(vtot,as.numeric(sqrt(suppressWarnings(chisq.test
(table(var1_2,var2_2))$statistic)/(sum(table(var1_2,
var2_2))*(min(dim(table(var1_2,var2_2)))-1)))))}
vtot.sort=sort(vtot)
cat(paste("\nV de Cramer\n",round(v,7),"\n\nIntervalle
de confiance à 95
%\n",round(vtot.sort[25],7),round(vtot.sort[975],7),
"\n\n"))}
Cette fonction étant basée sur un bootstrap avec 1000 répétitions, elle peut
nécessiter quelques secondes de calcul.
56. Conformité d'un coefficient de corrélation avec une valeur
théorique
Dans la pratique, un coefficient de corrélation est le plus souvent
comparé à la valeur nulle 0, ce qui permet de conclure s'il y a corrélation ou
pas entre les deux variables.
La fonction cor.test() réalise systématiquement ce test et en revoie la pvalue lorsqu'elle calcule un coefficient de corrélation de Pearson ou de
Spearman (voir fiche 55).
De façon plus générale, on peut tester la conformité d'un coefficient de
corrélation ou d'association avec une valeur théorique quelconque
simplement en regardant si celle-ci est contenue dans l'intervalle de
confiance du coefficient (le niveau de précision de cet intervalle étant le plus
souvent de 95 %).
57. Comparaison de deux coefficients de corrélation
Ce test ne s'applique qu'aux coefficients de corrélation linéaire de
Pearson (voir fiche 55).
Conditions : identiques à celles du coefficient de corrélation de Pearson (voir
fiche 55).
Pour
réaliser
le
test
:
cor.2comp(variable1,variable2,
variable3,variable4) où variable1 et variable2 sont des vecteurs
contenant les valeurs de chaque individu pour les deux variables définissant
la première corrélation (dans le même ordre), tandis que variable3 et
variable4 sont des vecteurs contenant les valeurs de chaque individu pour
les deux variables définissant la seconde corrélation (dans le même ordre).
La fonction cor.2comp() est à rentrer manuellement :
cor.2comp=function(var1,var2,var3,var4){
r1=as.numeric(cor.test(var1,var2)$estimate)
r2=as.numeric(cor.test(var3,var4)$estimate)
z1=0.5*log((1+r1)/(1-r1));z2=0.5*log((1+r2)/(1-r2))
u=abs(z1-z2)/sqrt(1/(length(var1)-3)+1/(length(var3)3))
p=min(pnorm(u,0,1),pnorm(u,0,1,lower.tail=F))*2
if(p>0.1){p.sign='NS'};if(p<0.1
&
p>0.05){p.sign='.'};if(p<0.05
&
p>0.01){p.sign='*'};if(p<0.01
&
p>0.001){p.sign='**'};if(p<0.001){p.sign='***'}
tab=data.frame(round(r1,5),round(r2,5),round(u,3),round
(p,7),p.sign,row.names='')
names(tab)=c('r1','r2','u','p-value','sign')
cat("\n Comparaison de 2 coefficients de corrélation
linéaire de Pearson\n\n")
print(tab);cat("---\nSignif : 1 'NS' 0.5 '.' 0.1 '*'
0.01 '**' 0.01 '***'\n\n")
if(p>0.05){z.moy=sum((length(var1)-3)*z1,(length(var3)3)*z2)/sum(length(var1)-3,length(var3)-3)
r.com=(exp(2*z.moy)-1)/(exp(2*z.moy)+1)
z.moy.inf=z.moy-qnorm(0.975,0,1)/sqrt(sum(length(var1),
length(var3))-6);z.moy.sup=z.moy+qnorm(0.975,0,1)/
sqrt(sum(length(var1),length(var3))-6)
r.com.inf=(exp(2*z.moy.inf)-1)/(exp(2*z.moy.inf)+1)
r.com.sup=(exp(2*z.moy.sup)-1)/(exp(2*z.moy.sup)+1)
cat(paste("Coefficient
de
corrélation
commun
:",round(r.com,7),"\nIntervalle de confiance à 95 %
:",round(r.com.inf,7),round(r.com.sup,7),"\n\n"))}}
Si les deux coefficients de corrélation ne sont significativement pas
différents, la fonction renvoie la valeur et l'intervalle de confiance à 95 % du
coefficient de corrélation commun.
58. Comparaison de plusieurs coefficients de corrélation
Ce test ne s'applique qu'aux coefficients de corrélation linéaire de
Pearson (voir fiche 55).
Conditions : identiques à celles du coefficient de corrélation de Pearson (voir
fiche 55).
Pour réaliser le test : cor.multcomp(variable1,variable2,facteur)
où variable1 et variable2 sont des vecteurs contenant les valeurs de
chaque individu pour les deux variables à corréler (dans le même ordre), et
facteur un vecteur contenant les valeurs de chaque individu pour le
facteur définissant les classes à comparer (dans le même ordre que les deux
premiers vecteurs). La fonction cor.multcomp() est à rentrer
manuellement :
cor.multcomp=function(var1,var2,fact,graphe=FALSE){
if (length(var1)!=length(var2) |
length(var2)!=length(fact) |
length(var1)!=length(fact)) {stop("Les vecteurs
n'ont pas la même taille")}
n=NULL;r=NULL;z=NULL;liste=list(NULL)
for (i in 1:nlevels(fact)) {
n=c(n,length(var1[fact==levels(fact)[i]]))
r=c(r,as.numeric(cor.test(var1[fact==levels(fact)[i]],v
ar2[fact==levels(fact)[i]])$estimate))}
for (i in 1:nlevels(fact)) {
liste[[i]]=round(r[i],5)
z=c(z,0.5*log((1+r[i])/(1-r[i])))}
z.moy=sum((n-3)*z)/sum(n-3)
chi2=sum((n-3)*(z-z.moy)^2)
p=min(pchisq(chi2,length(levels(fact))1),pchisq(chi2,length(levels(fact))1,lower.tail=F))*2
if(p>0.1){p.sign='NS'};if(p<0.1 &
p>0.05){p.sign='.'};if(p<0.05 &
p>0.01){p.sign='*'};if(p<0.01 &
p>0.001){p.sign='**'};if(p<0.001){p.sign='***'}
tab=data.frame(liste,round(chi2,3),round(p,7),p.sign,ro
w.names='')
names(tab)=c(levels(fact),'chi2','p-value','sign')
cat(paste("\n Comparaison
de",length(levels(fact)),"coefficients de
corrélation linéaire de Pearson\n\n"))
print(tab)
cat("---\nSignif : 1 'NS' 0.5 '.' 0.1 '*' 0.01 '**'
0.01 '***'\n\n")
if (p>0.05) {
r.com=(exp(2*z.moy)-1)/(exp(2*z.moy)+1)
z.moy.inf=z.moy-qnorm(0.975,0,1)/sqrt(sum(n)3*length(levels(fact)))
z.moy.sup=z.moy+qnorm(0.975,0,1)/sqrt(sum(n)3*length(levels(fact)))
r.com.inf=(exp(2*z.moy.inf)-1)/(exp(2*z.moy.inf)+1)
r.com.sup=(exp(2*z.moy.sup)-1)/(exp(2*z.moy.sup)+1)
cat(paste("Coefficient de corrélation commun
:",round(r.com,7),"\nIntervalle de confiance à 95 %
:",round(r.com.inf,7),round(r.com.sup,7),"\n\n"))}
if (p<0.05) {
r.inf=NULL;r.sup=NULL
for (i in 1:nlevels(fact)) {
r.inf=c(r.inf,cor.test(var1[fact==levels(fact)[i]],var2
[fact==levels(fact)[i]])$conf.int[1])
r.sup=c(r.sup,cor.test(var1[fact==levels(fact)[i]],var2
[fact==levels(fact)[i]])$conf.int[2])}
mat=matrix(c(round(r.inf,5),round(r,5),round(r.sup,5)),
nrow=length(levels(fact)),dimnames=list(levels(fact)
,c('2.5 %','valeur','97.5 %')))
cat("Coefficients de corrélation par classe et
intervalle de confiance à 95 % :\n")
print(mat);cat("\n")
if (graphe==TRUE) {
liste2=list(NULL)
for (i in 1:nlevels(fact))
{liste2[[i]]=as.numeric(mat[i,])}
stripchart(liste2,group.names=levels(fact),pch='|',col=
c(1:length(levels(fact))),main="Coefficients de
corrélation par classe\net intervalles de confiance
à 95 %",xlab='Valeurs')
segments(mat[,1],c(1:length(levels(fact))),mat[,3],c(1:
length(levels(fact))),col=c(1:length(levels(fact))))
}}}
Si la p-value du test est non significative (i.e. coefficients non différents), la
fonction renvoie la valeur et l'intervalle de confiance à 95 % du coefficient de
corrélation commun.
Si cette p-value est significative, cela indique qu'au moins un coefficient est
différent des autres, sans préciser le(s)quel(s). La fonction renvoie alors la
valeur et l'intervalle de confiance à 95 % de chaque coefficient de corrélation
afin de les comparer. L'argument facultatif graphe=TRUE permet d'obtenir
une aide graphique pour ces comparaisons.
59. La régression linéaire simple au sens des moindres carrés
Ce type de régression est utilisé lorsque l'on a une variable à expliquer et
une variable explicative, la relation entre les deux étant linéaire.
Il est indispensable d'observer graphiquement la relation entre les deux
variables avant d'envisager une régression linéaire, ne serait-ce que pour
contrôler si cette relation est effectivement linéaire (fonction plot(), voir
fiche 9)
Conditions : l'échantillonnage doit être aléatoire et simple ; chaque individu
doit posséder une valeur pour les deux variables ; pour chaque valeur de la
variable explicative la distribution des résidus de la régression doit suivre
une loi normale, de plus toutes ces lois normales doivent avoir la même
variance (hypothèse d'équivariance) ; les résidus de la régression doivent
être indépendants des deux variables (voir ci-dessous pour tester les deux
conditions précédentes) ; la relation entre les deux variables doit être
linéaire.
La régression s'écrit lm(à_expliquer~explicative), lm() signifiant
Modèle Linéaire, à_expliquer et explicative étant des vecteurs
contenant les valeurs de chaque individu pour les deux variables (dans le
même ordre). Il est utile de la stocker dans un objet, ici regression
Validation de la régression par l'analyse graphique
Analyse des résidus
La normalité des résidus est testée grâce au graphe quantile-quantile (voir
fiche 42) réalisé automatiquement via plot(regression,2)
L'équivariance et l'indépendance des résidus sont testées grâce au graphe
réalisé via plot(regression,1) Sur ce graphe, la ligne rouge représente la
tendance du nuage de points. L'équivariance et l'indépendance sont
acceptées lorsque cette ligne ne s'éloigne pas trop de l'horizontale. Plus
précisément, l'équivariance est acceptée quand la dispersion verticale des
résidus est à peu près constante sur toute la longueur de l'axe des abscisses ;
l'indépendance est acceptée quand l'orientation du nuage de points est
horizontale.
Que ce soit pour la normalité ou l'équivariance, la régression est d'autant
plus robuste que le nombre d'individus est élevé. Il y a donc toujours un
caractère subjectif dans la validation d'une régression.
Analyse des contributions individuelles
La régression linéaire étant sensible aux individus extrêmes, l'influence de
chaque individu doit être analysée. Cela peut être fait en observant les
distances de Cook individuelles, qui sont d'autant plus grandes que les
individus ont une influence sur les paramètres de la régression. Utiliser la
cook.dist(explicative,à_expliquer)
à
rentrer
fonction
manuellement :
cook.dist=function(x,y){
if (length(x)!=length(y)) {stop("Les deux vecteurs
n'ont pas la même taille")}
seuil=qf(0.5,2,length(y)-2)
plot(ls.diag(lsfit(x,y))$cooks,cex=0,ylim=range(0,max(l
s.diag(lsfit(x,y))$cooks*1.125),(seuil*1.125)),main=
'',xlab="Numéro de l'individu",ylab="Distance de
Cook")
segments(1:length(x),0,1:length(x),ls.diag(lsfit(x,y))$
cooks)
for (i in 1:length(x)) {if
(ls.diag(lsfit(x,y))$cooks[i]>0.6*seuil)
{text(i,1.1*ls.diag(lsfit(x,y))$cooks[i],as.characte
r(i),cex=0.6)}}
abline(h=seuil,lty=2)
text(length(x)/5,seuil*1.05,"Distance
théorique",font=3,cex=0.9)}
Une attention particulière doit être portée aux individus dont la distance est
proche ou supérieure à la distance théorique. On peut notamment observer
le changement dans les paramètres de la régression lorsqu'il sont retirés.
Cependant, une grande influence sur ces paramètres n'est pas un critère
suffisant pour les supprimer de l'étude (voir fiche 37).
Paramètres de la régression
Valeurs, erreurs standards et intervalles de confiances
La plupart des informations de la régression sont données par la fonction
summary(regression) En particulier, la ligne (Intercept) de la partie
Coefficients donne la valeur (Estimate) et l'erreur standard (Std.
Error) de l'ordonnée à l'origine de la droite de régression, tandis que la
ligne ayant le nom de la variable explicative donne la valeur et l'erreur
standard du coefficient directeur (ou pente) de la droite.
Les intervalles de confiance de l'ordonnée à l'origine et du coefficient
directeur sont obtenus grâce à la fonction confint(regression)
Tests de conformité avec la valeur nulle
Lorsque la fonction summary(regression) est appelée, R réalise
automatiquement les tests de conformité des paramètres de la droite par
rapport à zéro. Les p-values de ces tests sont données dans la partie
Coefficients, sur la ligne (Intercept) pour l'ordonnée à l'origine et sur
la ligne correspondant à la variable explicative pour le coefficient directeur.
Pouvoir explicatif de la régression
Le coefficient de détermination R² représente la part de la variance de la
variable à expliquer qui est expliquée par la variable explicative. Il varie entre
0 (la variable explicative n'apporte aucune information) et 1 (la variable à
expliquer est totalement expliquée par la variable explicative).
Graphiquement, plus R² est élevé plus les points sont proches de la droite de
régression. Dans le cas de la régression linéaire simple, R² est égal au carré
du coefficient de corrélation linéaire de Pearson (voir fiche 55).
Sa valeur est donnée lorsque la fonction summary(regression) est
appelée. Il se nomme Multiple R-Squared et R le compare
automatiquement à la valeur nulle. La p-value de ce test est donnée sur la
ligne suivante de la valeur de R².
Prédiction à partir de la régression
Le but d'une régression linéaire est souvent de déterminer l'équation de la
droite, qui sert ensuite à prédire les valeurs prises par la variable à expliquer
à partir de valeurs connues de la variable explicative.
Cette prédiction peut être réalisée grâce à la fonction
predict(regression,list(explicative=valeur)) où valeur est
soit un nombre, soit un vecteur de nombres correspondant aux valeurs de la
variable explicative pour lesquelles on souhaite obtenir la valeur de la
variable à expliquer.
Il faut toutefois être vigilant car l'équation de la droite de régression est
établie à partir d'une certaine gamme de valeurs de la variable explicative. Il
est donc d'autant plus hasardeux de prédire une valeur de la variable à
expliquer à partir d'une valeur de la variable explicative que celle-ci est
éloignée de cette gamme. Rien ne dit par exemple que la relation entre les
deux variables est toujours linéaire en dehors de la gamme de valeurs qui a
servi à définir la régression.
60. La régression linéaire simple au sens des moindres
rectangles
Ce type de régression est utilisé lorsque l'on a deux variables considérées
sur un même pied d'égalité, aucune n'étant expliquée par l'autre. On dit ces
variables interdépendantes.
En pratique la régression linéaire au sens des moindres rectangles est
surtout utilisée en allométrie, où sont comparées plusieurs caractéristiques
physiques d'un même organe ou organisme (en général l'une des deux
variables est la taille ou la masse, ce qui permet d'utiliser ces mesures
simples comme reflet de mesures plus difficiles à réaliser).
Il est indispensable d'observer graphiquement la relation entre les deux
variables avant d'envisager une régression linéaire, ne serait-ce que pour
contrôler si cette relation est effectivement linéaire (fonction plot(), voir
fiche 9)
Conditions : l'échantillonnage doit être aléatoire et simple ; chaque individu
doit posséder une valeur pour les deux variables ; chaque variable doit avoir
une distribution normale ; pour chaque valeur d'une variable, la distribution
des valeurs possibles de la seconde doit suivre une loi normale (voir cidessous pour tester cette hypothèse, dite de binormalité) ; la relation entre
les deux variables doit être linéaire.
Pour tester la condition de binormalité des variables, tester la normalité des
résidus de la régression de la 1ère variable sur la 2ème et inversement en
utilisant les fonctions qqnorm() et shapiro.test() (voir fiche 42) sur
residuals(lm(variablex~variabley))
et
residuals(lm(
variabley~variablex)) où variablex et variabley sont des vecteurs
contenant les valeurs de chaque individu pour chaque variable (dans le
même ordre). Les noms variablex et variabley n'ont qu'une valeur
graphique et non explicative.
Paramètres de la régression
Valeurs et intervalles de confiance
Toutes les informations disponibles sur la régression sont données par la
fonction least.rect(variablex,variabley) à rentrer manuellement :
least.rect=function(x,y,theo=1){
if (length(x)!=length(y)) {stop("Les deux vecteurs
n'ont pas la même taille")}
r=cov(x,y)/(sd(x)*sd(y))
k=qt(0.975,length(x)-2)^2*(1-r^2)/(length(x)-2)
b=sqrt(var(y)/var(x))*sign(cov(x,y))
b.inf=b*sqrt(1+2*k-sqrt(((1+2*k)^2)-1))
b.sup=b*sqrt(1+2*k+sqrt(((1+2*k)^2)-1))
a=mean(y)-b*mean(x)
a.inf=mean(y)-b.sup*mean(x)
a.sup=mean(y)-b.inf*mean(x)
t.obs=abs(b^2-theo^2)*sqrt(length(x)2)/(2*b*theo*sqrt(1-r^2))
p=min(pt(t.obs,length(x)-2),pt(t.obs,length(x)2,lower.tail=F))*2
if(p>0.1){p.sign='NS'};if(p<0.1
&
p>0.05){p.sign='.'};if(p<0.05
&
p>0.01){p.sign='*'};if(p<0.01
&
p>0.001){p.sign='**'};if(p<0.001){p.sign='***'}
tab=data.frame(round(b,5),length(x)2,round(t.obs,3),round(p,7),p.sign,row.names='');nam
es(tab)=c('valeur','ddl','t','p-value','sign')
cat("\n
Régression linéaire simple au sens des
moindres rectangles\n\n")
cat(paste("Formule
:",deparse(substitute(y)),"=",round(a,5),"+",round(b
,5),deparse(substitute(x)),"\n\n"))
cat("Intervalles de confiance à 95 % :\n")
print(matrix(c(a.inf,b.inf,a.sup,b.sup),nrow=2,dimnames
=list(c("Ordonnée
à
l'origine","Coefficient
directeur"),c("Inf","Sup"))))
cat(paste("\nConformité du coefficient directeur à la
valeur théorique",theo,":\n"))
print(tab)
cat("---\nSignif : 1 'NS' 0.5 '.' 0.1 '*' 0.01 '**'
0.01 '***'\n")
cat(paste("\nCoefficient de corrélation linéaire de
Pearson :",round(r,7),"\n\n"))}
La fonction renvoie l'équation de la droite de régression (donc la valeur de
ses paramètres : ordonnée à l'origine et coefficient directeur), ainsi que leurs
intervalles de confiance à 95 %.
Test de conformité du coefficient directeur avec une valeur théorique
Le coefficient directeur est généralement comparé à la valeur 1, qui
correspond en allométrie à une relation d'isométrie entre les deux
caractéristiques
comparées.
Par
défaut
la
fonction
least.rect(variablex,variabley) utilise cette valeur 1 pour le test
(dont elle renvoie le résultat), mais la valeur théorique peut être modifiée
grâce à l'argument theo=valeur lorsque la fonction est appelée.
Précision de la régression
En comparaison à la méthode des moindres carrés et son coefficient de
détermination (voir fiche 57), il n'y a pas pour la régression linéaire au sens
des moindres rectangles de quantification de cette précision. Cependant on
peut utiliser le coefficient de corrélation linéaire de Pearson (voir fiche 55)
pour s'en faire une idée : plus ce coefficient est proche de 1, plus la précision
est grande. La fonction least.rect(variablex,variabley) renvoie ce
coefficient de corrélation.
Prédiction à partir de la régression
Le but d'une régression au sens des moindres rectangles n'est généralement
pas de prédire les valeurs d'une variable, puisqu'aucune des deux variables
n'est explicative (et donc contrôlée). Cependant, s'il en est besoin, il suffit
simplement d'utiliser l'équation de la droite renvoyée par la fonction
least.rect(variablex,variabley)
61. La régression non linéaire simple
Ce type de régression s'envisage lorsque que la relation entre une
variable à expliquer et une variable explicative n'est pas linéaire, mais que
l'on connaît le type d'équation qui peut la représenter.
Paramètres de la régression
Régression polynomiale
Elle s'écrit lm(à_expliquer~explicative+I(explicative^2)) où
à_expliquer et explicative sont des vecteurs contenant les valeurs de
chaque individu pour les deux variables (dans le même ordre), et I() une
fonction indiquant que ce qui est situé entre ses parenthèses est une
formule mathématique. Si la régression est stockée dans l'objet
regression, elle est analysée grâce à summary(regression) de la même
façon qu'une régression linéaire simple au sens des moindres carrés (valeur,
erreur standard et conformité à la valeur nulle des paramètres, pouvoir
explicatif et prédiction ; voir fiche 59).
Autres régressions non linéaires
Leur syntaxe est toujours de la forme nls(à_expliquer~équation) où
nls() est la fonction décrivant la régression et équation une fonction
dépendante de l'équation choisie, la plupart du temps parmi les suivantes :
Type de régression
Equation
équation
Asymptotique
Michaelis-Menten
Exponentielle à 2 paramètres
Exponentielle à 3 paramètres
Sigmoïde
Logistique à 3 paramètres
Logistique à 4 paramètres
Weibull
Gompertz
En cloche
Biexponentielle
𝑦=
𝑎𝑥
1 + 𝑏𝑥
SSmicmen(explicative,a,b)
𝑦 = 𝑎(1 − 𝑒 −𝑏𝑥 )
𝑦 = 𝑎 − 𝑏𝑒 −𝑐𝑥
𝑦=
𝑎
1 + 𝑏𝑒 −𝑐𝑥
𝑏−𝑎
𝑦=𝑎+
1 + 𝑒 (𝑐−𝑥)/𝑑
𝑦 = 𝑎 − 𝑏𝑒 −(𝑐𝑥
𝑦 = 𝑎𝑒 −𝑏𝑒
𝑑)
−𝑐𝑥
𝑦 = 𝑎𝑒 𝑏𝑥 − 𝑐𝑒 −𝑑𝑥
SSasympOrig(explicative,a,b)
SSasymp(explicative,a,b,c)
SSlogis(explicative,a,b,c)
SSfpl(explicative,a,b,c,d)
SSweibull(explicative,a,b,c,d)
SSgompertz(explicative,a,b,c)
SSbiexp(explicative,a,b,c,d)
Si la régression est stockée dans l'objet regression la valeur, l'erreur
standard et le test de conformité à la valeur nulle des paramètres de
l'équation sont donnés par la fonction summary(regression) L'intervalle
de confiance à 95 % des paramètres est donné par la fonction
confint(regression)
Prédiction à partir de la régression
Quelle que soit la régression, la syntaxe est toujours de la forme
predict(regression,list(explicative=valeur)) où valeur est
soit un nombre, soit un vecteur de nombres correspondant aux valeurs de la
variable explicative pour lesquelles on souhaite obtenir la valeur de la
variable à expliquer.
Il faut toutefois être vigilant car l'équation de la droite de régression est
établie à partir d'une certaine gamme de valeurs de la variable explicative. Il
est donc d'autant plus hasardeux de prédire une valeur de la variable à
expliquer à partir d'une valeur de la variable explicative que celle-ci est
éloignée de cette gamme.
Ajouter une courbe sur un graphe
Pour tracer la courbe de régression sur le nuage de points, utiliser la
procédure suivante :
>
>
>
>
x=seq(min(explicative),max(explicative),0.01)
y=predict(regression,list(explicative=x))
plot(à_expliquer~explicative)
lines(x,y)
62. L'analyse de la covariance (ANCOVA) - un facteur
Ce type d'analyse est utilisé :
• pour comparer des moyennes (via un facteur de classification) tout
en tenant compte d'une variable auxiliaire quantitative (ou
covariable). Le but est ici d'éliminer l'influence de la covariable, qui
peut être une variable différente de la variable à expliquer ou une
mesure antérieure (ex : en début d'expérience) de la variable à
expliquer
• pour comparer des régressions linéaires simples (au sens des
moindres carrés, voir fiche 59), i.e. comparer les ordonnées à
l'origine et les coefficients directeurs entre eux.
Quel que soit l'objectif, la covariable ne doit pas être influencée par le
facteur. Si elle l'est, il convient d'utiliser l'analyse de la covariance avec
beaucoup de prudence (surtout au moment de conclure).
Conditions : identiques à celles de l'analyse de la variance (voir fiche 52), de
plus la relation entre la variable à expliquer et la covariable doit être linéaire.
Pour réaliser le test : commencer par écrire le modèle
ancova=lm(à_expliquer~facteur*covariable) où à_expliquer,
facteur et covariable sont des vecteurs contenant la valeur de chaque
individu pour chacune des trois variables (dans le même ordre). Selon
l'objectif
de
l'analyse,
il
peut
être
préférable
d'écrire
covariable*facteur, les deux syntaxes n'étant pas équivalentes.
L'analyse est ensuite réalisée grâce à la fonction anova(ancova) Le tableau
renvoyé par R donne l'effet du facteur, celui de la covariable et celui de leur
interaction. Selon l'objectif de l'analyse, ce tableau est utilisé différemment :
Comparaison de moyennes
Si la p-value associée au facteur est significative, cela indique qu'au moins
une moyenne diffère des autres, sans préciser la(es)quelle(s). Il est donc
dans ce cas nécessaire de réaliser des comparaisons deux à deux pour
identifier la (les) moyenne(s) en question. Pour réaliser ces comparaisons
utiliser la fonction scheffe.test(ancova,trt='facteur') contenue
dans le package agricolae (attention, le facteur doit être écrit entre
guillemets).
Comparaison de plusieurs régressions linéaires simples
Si la p-value associée à la covariable est significative, cela indique que les
coefficients directeurs des droites de régression sont différents de la valeur
nulle.
Si la p-value associée à l'interaction entre le facteur et la covariable est
significative, cela indique qu'au moins un coefficient directeur est différent
des autres, sans préciser le(s)quel(s). Pour identifier ce(s) coefficient(s),
utiliser la fonction reg.dircomp(à_expliquer, facteur,covariable)
à rentrer manuellement, qui renvoie la valeur et l'intervalle de confiance à
95 % de chaque coefficient directeur :
reg.dircomp=function(var,fact,covar,graphe=FALSE){
if (length(var)!=length(fact) |
length(fact)!=length(covar) |
length(var)!=length(covar)) {stop("Les vecteurs
n'ont pas la même taille")}
SCE=NULL;SCEr=NULL;dir=NULL;dir.int=NULL
for (i in 1:nlevels(fact)) {
SCE=c(SCE,sum((covar[fact==levels(fact)[i]]mean(covar[fact==levels(fact)[i]]))^2))
SCEr=c(SCEr,sum(resid(lm(var[fact==levels(fact)[i]]~cov
ar[fact==levels(fact)[i]]))^2))
dir=c(dir,as.numeric(lm(var[fact==levels(fact)[i]]~cova
r[fact==levels(fact)[i]])$coefficients[2]))}
for (i in 1:nlevels(fact))
{dir.int=c(dir.int,qt(0.975,length(var[fact==levels(
fact)[i]])2)*sqrt((SCEr[i]/(length(var[fact==levels(fact)[i]])
-2))/SCE[i]))}
mat=matrix(c(round(dirdir.int,5),round(dir,5),round(dir+dir.int,5)),nrow=n
levels(fact),dimnames=list(levels(fact),c('2.5
%','valeur','97.5 %')))
cat("\nCoefficients directeurs par classe et
intervalles de confiance à 95 % :\n")
print(mat);cat("\n")
if (graphe==TRUE) {
liste=list(NULL)
for (i in 1:nlevels(fact))
{liste[[i]]=as.numeric(mat[i,])}
stripchart(liste,group.names=levels(fact),pch='|',col=c
(1:nlevels(fact)),main="Coefficients directeurs des
régressions linéaires\npar classe et intervalles de
confiance à 95 %",xlab='Valeurs')
segments(mat[,1],c(1:nlevels(fact)),mat[,3],c(1:nlevels
(fact)),col=c(1:nlevels(fact)))}}
L'argument facultatif graphe=TRUE permet d'obtenir une aide graphique
pour les comparaisons. Dans le cas de coefficients directeurs différents (i.e.
droites non parallèles), les régressions doivent être étudiées séparément
(voir fiche 59).
Si la p-value associée à l'interaction facteur-covariable n'est pas significative,
cela signifie que les coefficients directeurs ne sont pas différents (i.e. droites
de régression parallèles). On peut dans ce cas calculer la valeur du
coefficient commun et comparer les ordonnées à l'origine des différentes
droites
de
régressions
en
utilisant
la
fonction
reg.ordcomp(à_expliquer,facteur,covariable)
à
rentrer
manuellement :
reg.ordcomp=function(var,fact,covar,graphe=FALSE){
if
(length(var)!=length(fact)
|
length(fact)!=length(covar)
|
length(var)!=length(covar))
{stop("Les
vecteurs
n'ont pas la même taille")}
SPE=NULL;SCE=NULL;SCEr=NULL;ord=NULL;ord.int=NULL
for (i in 1:nlevels(fact)) {
SPE=c(SPE,sum((var[fact==levels(fact)[i]]mean(var[fact==levels(fact)[i]]))*(covar[fact==level
s(fact)[i]]-mean(covar[fact==levels(fact)[i]]))))
SCE=c(SCE,sum((covar[fact==levels(fact)[i]]mean(covar[fact==levels(fact)[i]]))^2))
SCEr=c(SCEr,sum(resid(lm(var[fact==levels(fact)[i]]~cov
ar[fact==levels(fact)[i]]))^2))
ord=c(ord,as.numeric(lm(var[fact==levels(fact)[i]]~cova
r[fact==levels(fact)[i]])$coefficients[1]))}
sum.SPE=sum(SPE);sum.SCE=sum(SCE);sum.SCEr=sum(SCEr)
b=sum.SPE/sum.SCE
b.int=qt(0.975,length(var)2*length(levels(fact)))*sqrt((sum.SCEr/(length(var)2*length(levels(fact))))/sum.SCE)
for
(i
in
1:nlevels(fact))
{ord.int=c(ord.int,qt(0.975,length(var[fact==levels(
fact)[i]])2)*sqrt((SCEr[i]/(length(var[fact==levels(fact)[i]])
2))*(1/length(var[fact==levels(fact)[i]])+mean(covar
[fact==levels(fact)[i]])^2/SCE[i])))}
mat=matrix(c(round(ordord.int,5),round(ord,5),round(ord+ord.int,5)),nrow=n
levels(fact),dimnames=list(levels(fact),c('2.5
%','valeur','97.5 %')))
cat(paste("\nCoefficient
directeur
commun
:",round(b,5),"\nIntervalle de confiance à 95 %
:",round(b-b.int,5),round(b+b.int,5),"\n\nOrdonnées
à l'origine par classe et intervalles de confiance à
95 % :\n"))
print(mat);cat("\n")
if (graphe==TRUE) {
liste=list(NULL)
for
(i
in
1:nlevels(fact))
{liste[[i]]=as.numeric(mat[i,])}
stripchart(liste,group.names=levels(fact),pch='|',col=c
(1:nlevels(fact)),main="Ordonnées à l'origine des
régressions linéaires\npar classe et intervalles de
confiance à 95 %",xlab='Valeurs')
segments(mat[,1],c(1:nlevels(fact)),mat[,3],c(1:nlevels
(fact)),col=c(1:nlevels(fact)))}}
L'argument facultatif graphe=TRUE permet d'obtenir une aide graphique
pour les comparaisons.
63. La régression linéaire multiple
Conditions : l'échantillonnage doit être aléatoire et simple ; chaque individu
doit posséder une valeur pour toutes les variables ; la distribution des
résidus de la régression doit suivre une loi normale, de plus toutes ces lois
normales doivent avoir la même variance (hypothèse d'équivariance) ; les
résidus de la régression doivent être indépendants des variables (voir cidessous pour tester les deux conditions précédentes) ; la relation entre la
variable à expliquer et les variables explicatives doit être linéaire.
La régression s'écrit lm(à_expliquer~explicative1+explicative2),
lm() signifiant Modèle Linéaire et à_expliquer, explicative1 et
explicative2 étant des vecteurs contenant les valeurs de chaque individu
pour les différentes variables (dans le même ordre ; il peut bien sûr y avoir
plus de variables explicatives). Il est utile de la stocker dans un objet, ici
regression
Validation de la régression par l'analyse graphique
Analyse des résidus
La normalité des résidus est testée grâce au graphe quantile-quantile (voir
fiche 42) réalisé automatiquement via plot(regression,2)
L'équivariance et l'indépendance des résidus sont testées grâce au graphe
réalisé via plot(regression,1) Sur ce graphe, la ligne rouge représente la
tendance du nuage de points. L'équivariance et l'indépendance sont
acceptées lorsque cette ligne ne s'éloigne pas trop de l'horizontale. Plus
précisément, l'équivariance est acceptée quand la dispersion verticale des
résidus est à peu près constante sur toute la longueur de l'axe des abscisses ;
l'indépendance est acceptée quand l'orientation du nuage de points est
horizontale.
Que ce soit pour la normalité ou l'équivariance, la régression est d'autant
plus robuste que le nombre d'individus est élevé. Il y a donc toujours un
caractère subjectif dans la validation d'une régression.
Analyse des contributions individuelles
La régression linéaire étant sensible aux individus extrêmes, l'influence de
chaque individu doit être analysée. Cela peut être fait en observant les
distances de Cook individuelles, qui sont d'autant plus grandes que les
individus ont une influence sur les paramètres de la régression. Utiliser la
fonction plot(regression,4) pour les obtenir. Une attention particulière
doit être portée aux individus dont la distance est très supérieure aux autres.
On peut notamment observer le changement dans les paramètres de la
régression lorsqu'il sont retirés. Cependant, une grande influence sur ces
paramètres n'est pas un critère suffisant pour les supprimer de l'étude (voir
fiche 37).
Paramètres de la régression
Valeurs, erreurs standards et intervalles de confiances
La plupart des informations de la régression sont données par la fonction
summary(regression) En particulier, la ligne (Intercept) de la partie
Coefficients donne la valeur (Estimate) et l'erreur standard (Std.
Error) de l'ordonnée à l'origine de la droite de régression, tandis que la
ligne associée à chaque variable explicative donne la valeur et l'erreur
standard de son coefficient dans l'équation de la droite.
Les intervalles de confiance de l'ordonnée à l'origine et des coefficients sont
obtenus grâce à la fonction confint(regression)
Tests de conformité avec la valeur nulle
Lorsque la fonction summary(regression) est appelée, R réalise
automatiquement les tests de comparaison des paramètres de la droite par
rapport à zéro. Les p-values de ces tests sont données dans la partie
Coefficients, sur la ligne (Intercept) pour l'ordonnée à l'origine et sur
la ligne correspondant à chaque variable explicative pour son coefficient
associé.
Pouvoir explicatif de la régression
Le coefficient de détermination R² représente la part de la variance de la
variable à expliquer qui est expliquée par la régression. Il varie entre 0 (la
régression n'apporte aucune information) et 1 (la variable à expliquer est
totalement expliquée par la régression). Graphiquement, plus R² est élevé
plus les points sont proches de la droite de régression.
Sa valeur (ajustée dans le cas de la régression multiple) est donnée lorsque la
fonction summary(regression) est appelée. Il se nomme Adjusted RSquared et R le compare automatiquement à la valeur nulle. La p-value de
ce test est donnée sur la ligne suivante de la valeur de R².
Prédiction à partir de la régression
Le but d'une régression linéaire est souvent de déterminer l'équation de la
droite, qui sert ensuite à prédire les valeurs prises par la variable à expliquer
à partir de valeurs connues de la variable explicative.
Cette prédiction peut être réalisée grâce à la fonction
predict(regression,list(explicative1=valeur1,explicative2=v
aleur2)) où valeur est soit un nombre, soit un vecteur de nombres
correspondant aux valeurs des variables explicatives pour lesquelles on
souhaite obtenir la valeur de la variable à expliquer.
Il faut toutefois être vigilant car l'équation de la droite de régression est
établie à partir d'une certaine gamme de valeurs des variables explicatives. Il
est donc d'autant plus hasardeux de prédire une valeur de la variable à
expliquer à partir de valeurs des variables explicatives que celles-ci sont
éloignées de cette gamme. Rien ne dit par exemple que la relation entre les
variables est toujours linéaire en dehors de la gamme de valeurs qui a servi à
définir la régression.
Index des fonctions à rentrer manuellement
Ces fonctions peuvent être obtenues directement en téléchargeant le fichier suivant :
http://maximerv.free.fr/Fichiers/Fonctions_maison.R
Autour de l'Analyse mixte de Hill et Smith
scatter.mix.numeric() (Stéphane Champely) : trace le cercle des corrélations
pour les variables quantitatives, à la manière d'une ACP (fiche 14)
scatter.mix.categorical() (Stéphane Champely modifié par Maxime Hervé) :
représente sur le même plan factoriel les individus et les variables qualitatives, à la
manière d'une AFC (fiche 14)
Autour de la corrélation entre deux variables
spearman.limit() (Maxime Hervé) : donne les limites de confiance à 95 % d'un
coefficient de corrélation de Spearman (fiche 55)
cramer.cor() (Maxime Hervé) : donne la valeur et les limites de confiance à 95 % du
coefficient d'association de Cramer (fiche 55)
cor.2comp() (Maxime Hervé) : réalise le test de comparaison de deux coefficients
de corrélation linéaire de Pearson (fiche 57)
cor.multcomp() (Maxime Hervé) : réalise le test de comparaison de plusieurs
coefficients de corrélation linéaire de Pearson (fiche 58)
Autour de la régression linéaire
frect() (François Bonnot) : permet de tracer une droite de régression au sens des
moindres rectangles (fiches 9 et 10)
cook.dist() (Maxime Hervé d'après Gaël Millot) : trace le graphe des distances de
Cook pour une régression linéaire simple au sens des moindres carrés (fiche 59)
least.rect() (Maxime Hervé) : donne un résumé d'une régression au sens des
moindres rectangles, à la manière de celui obtenu pour une régression au sens des
moindres carrés (fiche 60)
reg.dircomp() (Maxime Hervé) : permet de comparer les coefficients directeurs de
plusieurs droites de régression au sens des moindres carrés (fiche 62)
reg.ordcomp() (Maxime Hervé) : donne la valeur et les limites de confiance à 95 %
du coefficient directeur commun à plusieurs droites de régressions linéaires au sens
des moindres carrés et permet de comparer les ordonnées à l'origine de ces droites
(fiche 62)
Divers
bootstrap() (Maxime Hervé d'après Denis Poinsot) : réalise un bootstrap pour
donner l'intervalle de confiance (à un niveau choisi) de n'importe quoi (fiche 38)
eff.theo() (Maxime Hervé) : donne le tableau des effectifs théoriques dans le cas
d'un test de conformité de plusieurs proportions avec des valeurs théoriques (fiche
48)
Pour améliorer ses graphiques (G. Millot 2008)
Pour obtenir l'aide sur une fonction taper ?fonction
Ajout d'éléments sur un graphique
points() : points
lines() : points reliés par une ligne
abline() : ligne droite sans limites
segments() : segment de droite
arrows() : flèche
rect() : rectangle
polygon() : polygone
legend() : légende
rug() : marques secondaires sur les axes
axis() : échelle sur l'un des côtés du graphique (si celle-ci n'existe pas déjà)
text() : texte
mtext() : texte dans les marges de la figure ou de la fenêtre graphique
title() : texte dans le titre, le sous-titre, les légendes des axes, etc
qqline() : droite sur le graphe de qqnorm() qui passe par les quantiles 25 % et 75 %
approx() : interpolation linéaire d'un nuage de points. Utiliser lines() pour
l'afficher
Autres fonctions graphiques
locator() : pour obtenir les coordonnées approximatives de points sur un graphe.
Chaque clic gauche de la souris enregistre les valeurs d'abscisse et d'ordonnée.
Utiliser le clic droit sur la fenêtre graphique pour faire apparaître les valeurs
identify() : permet d'obtenir le nom d'un point (s'il en possède un) d'après ses
coordonnées. Les coordonnées approximatives ou exactes d'abscisse et d'ordonnée
doivent être spécifiées (voir la fonction locator()). Utiliser le clic gauche de la souris
pour rechercher le point et le clic droit pour arrêter le processus
colors() : donne les 657 couleurs utilisables dans les graphiques
par() : modifie les paramètres d'une fenêtre graphique (découpage, marges, etc)
Paramètres graphiques (arguments de la fonction par() et/ou des fonctions
traçant des graphiques)
cex : taille des éléments tracés (1 par défaut)
cex.axis : taille des valeurs pour les échelles des abscisses et des ordonnées (1 par
défaut)
cex.lab : taille des caractères pour les légendes des abscisses et des ordonnées (1
par défaut)
cex.main : taille des caractères du titre (1 par défaut)
main : titre
xlab : légende de l'axe des abscisses
ylab : légende de l'axe des ordonnées
pch : type de points tracés (voir l'aide de points())
bty : type de cadre entourant la région du tracé
lty : type de ligne tracée
lwd : largeur de la ligne tracée
col : couleur des éléments tracés
mar : largeur des marges entre le tracé et la figure. Par défaut
mar=c(5.1,4.1,4.1,2.1), les quatre chiffres étant attribués aux quatre côtés du
tracé, en commençant par le bas et en tournant dans le sens des aiguilles d'une
montre
mgp : distance, par rapport au tracé, (1) de la légende des axes, (2) de l'échelle des
axes et (3) de l'axe. Par défaut mgp=c(3,1,0)
mfrow : découpe la fenêtre graphique en plusieurs régions de figure (ex :
mfrow=c(1,2) donne une ligne et deux colonnes soit deux régions côte à côte)
xpd : restreint les tracés, les textes, les légendes, etc, aux différentes régions d'une
fenêtre graphique (xpd=FALSE pour la région de tracé, xpd=TRUE pour la région de
figure, xpd=NA pour la fenêtre graphique). Si xpd=FALSE par exemple, la légende
ajoutée sur un graphique ne sera affiché que si elle est définie dans la région de tracé
xlim : valeurs minimales et maximales de l'axe des abscisses
ylim : idem à xlim pour l'axe des ordonnées
xaxt='n' : supprime l'échelle de l'axe des abscisses (pratique pour ensuite
personnaliser l'abscisse avec la fonction axis())
xaxt='s' : permet à nouveau l'affichage de l'axe des abscisses lorsque xaxt='n' a
été précédemment utilisé
xaxs='i' : supprime le fait que l'axe des abscisses dépasse de 4 % par défaut la
limite posée
yaxt='n' : idem à xaxt='n' pour l'axe des ordonnées
yaxt='s' : idem à xaxt='s' pour l'axe des ordonnées
yaxs='i' : idem à xaxs='i' pour l'axe des ordonnées
Bibliographie et ouvrages/documents recommandés
Champely, S. (2005) Introduction à l'analyse multivariée (factorielle) sous R.
Crawley, M.J. (2007) The R Book. Editions John Wiley & Sons, inc.
Dagnelie, P. (2006a) Statistique théorique et appliquée. 1. Statistique
descriptive et base de l'inférence statistique. 2ème édition. Editions De
Boeck.
Dagnelie, P. (2006b) Statistique théorique et appliquée. 2. Inférence
statistique à une et à deux dimensions. 2ème édition. Editions de Boeck.
Millot, G. (2008) Comprendre et réaliser les test statistiques à l'aide de R.
Editions De Boeck.
Paradis, E. (2002) R pour les débutants. [en ligne : http://cran.rproject.org/doc/contrib ; fichier Paradis-rdebuts_fr.pdf]
Poinsot, D. (2004) Statistiques pour statophobes.
http://perso.univ-rennes1.fr/denis.poinsot]
[en
ligne
:
Poinsot, D. (2005) R pour les statophobes. [en ligne : http://perso.univrennes1.fr/denis.poinsot]
R Development Core Team (2009) R: A language and environment for
statistical computing. R Foundation for Statistical Computing, Vienna,
Austria. ISBN 3-900051-07-0, URL http://www.R-project.org
Les nombreux cours en ligne de D. Chessel, A.B. Dufour, J.R. Lobry et M.
Royer : http://pbil.univ-lyon1.fr/R/enseignement.html
Les cours en ligne de M.-L. Delignette-Muller : http://www2.vetlyon.fr/ens/biostat/accueil.html
Et le forum du groupe des utilisateurs
http://forums.cirad.fr/logiciel-R/index.php
du
logiciel
R
: