105
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

Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

  • Upload
    lamnhu

  • View
    216

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 2: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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é

Page 3: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 4: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 5: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 "passe-partout".

Page 6: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 7: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 8: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 9: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 10: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 11: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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'.

Page 12: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 13: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 des données en fonction d'un facteur : stripchart(données~facteur) où les deux objets sont des vecteurs. Pour représenter 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')

Page 14: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 15: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 des données en fonction d'un facteur : boxplot(donnees~facteur) où les deux objets sont des vecteurs. Pour représenter les boîtes horizontalement, ajouter l'argument horizontal=TRUE

Page 16: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 17: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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)

Page 18: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 19: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 20: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 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'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

Page 21: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 22: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,
Page 23: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Variable A

Classe 1 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 :

Page 24: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

• $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.

Page 25: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,
Page 26: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 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'ACM). Par convention on choisit pour l'axe horizontal celui des deux ayant la

Page 27: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 28: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,
Page 29: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 30: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 graphiquement, utiliser barplot(amix$cr[,num],names.arg= 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

Page 31: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

numéro des variables choisies, i.e. le numéro des colonnes dans le tableau initial.

Page 32: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 33: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 34: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 35: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 36: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 37: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 38: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 39: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 40: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 41: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 42: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 43: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 Fisher-Snedecor 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

Page 44: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 45: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 46: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 47: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 48: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 49: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 50: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 51: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 p-

value 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.

Page 52: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 53: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 54: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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, β dépend 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.

Page 55: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 56: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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'écart-type 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),round(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).

Page 57: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 58: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 59: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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".

Page 60: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 61: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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)

Page 62: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 63: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 ci-dessous 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.

Page 64: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Variable A

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)

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

Page 65: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 66: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 67: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 Classe 2

Variable A (population)

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

Page 68: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 69: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 Classe 2

Variable A (population)

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.

Page 70: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 Classe 2

Variable A (1ère mesure)

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

Page 71: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 Classe 2

Variable A (population)

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 α).

Page 72: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 73: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 74: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 75: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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é).

Page 76: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

Pour réaliser le test : commencer par écrire le modèle modele=glm(variable~facteur,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') 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 :

Classe 1 Classe 2 Classe 3 Contraste 1 1 -1 0 Contraste 2 0 1 -1 Contraste 3 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.

Page 77: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 78: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

fixe (deux facteurs fixes) : modele= variable~facteur1*facteur2 puis summary(aov(modele))

Page 79: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

modele2=variable~facteurfixe+facteuraléa+ Error( 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.

Page 80: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 81: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 :

Page 82: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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(var1,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.

Page 83: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 p-value 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 %).

Page 84: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 85: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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,row.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) {

Page 86: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 87: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 88: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 cook.dist(explicative,à_expliquer) à rentrer 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.character(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)

Page 89: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 90: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 ci-dessous 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))

Page 91: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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='');names(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.

Page 92: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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)

Page 93: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 𝑦 =𝑎𝑥

1 + 𝑏𝑥 SSmicmen(explicative,a,b)

Exponentielle à 2 paramètres 𝑦 = 𝑎(1 − 𝑒−𝑏𝑥) SSasympOrig(explicative,a,b)

Exponentielle à 3 paramètres 𝑦 = 𝑎 − 𝑏𝑒−𝑐𝑥 SSasymp(explicative,a,b,c)

Sigmoïde

Logistique à 3 paramètres 𝑦 =𝑎

1 + 𝑏𝑒−𝑐𝑥 SSlogis(explicative,a,b,c)

Logistique à 4 paramètres 𝑦 = 𝑎 +𝑏 − 𝑎

1 + 𝑒(𝑐−𝑥)/𝑑 SSfpl(explicative,a,b,c,d)

Weibull 𝑦 = 𝑎 − 𝑏𝑒−(𝑐𝑥𝑑) SSweibull(explicative,a,b,c,d)

Gompertz 𝑦 = 𝑎𝑒−𝑏𝑒−𝑐𝑥 SSgompertz(explicative,a,b,c)

En cloche

Biexponentielle 𝑦 = 𝑎𝑒𝑏𝑥 − 𝑐𝑒−𝑑𝑥 SSbiexp(explicative,a,b,c,d)

Page 94: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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)

Page 95: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 96: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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(dir-dir.int,5),round(dir,5),round(dir+dir.int,5)),nrow=nlevels(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).

Page 97: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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==levels(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]]~covar[fact==levels(fact)[i]]))^2))

ord=c(ord,as.numeric(lm(var[fact==levels(fact)[i]]~covar[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(ord-ord.int,5),round(ord,5),round(ord+ord.int,5)),nrow=nlevels(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)

Page 98: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.

Page 99: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 ci-dessous 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

Page 100: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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 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².

Page 101: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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=valeur2)) 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.

Page 102: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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)

Page 103: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 104: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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

Page 105: Aide-mémoire de statistique appliquée à la biologietoulemonde/bobo/Donnees/Documents/... · Aide-mémoire de statistique ... étude passe par des analyses du type régression logistique,

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.r-project.org/doc/contrib ; fichier Paradis-rdebuts_fr.pdf]

Poinsot, D. (2004) Statistiques pour statophobes. [en ligne : http://perso.univ-rennes1.fr/denis.poinsot]

Poinsot, D. (2005) R pour les statophobes. [en ligne : http://perso.univ-rennes1.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.vet-lyon.fr/ens/biostat/accueil.html

Et le forum du groupe des utilisateurs du logiciel R : http://forums.cirad.fr/logiciel-R/index.php