Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Introduction à R
Ce document est extrêmement succinct. Vous pouvez facilement trouver des
informations plus détaillées sur internet, comme les quelques documents mis à votre
disposition sur le site de l'UE.
NB : dans R il y a de multiples façons de faire la même chose, à travers la syntaxe
qui peut être utilisée de différentes façons, ou les mêmes analyses qui existent dans
des packages variés. Si vous êtes habitués à une autre façon de faire que ce qui est
présenté, vous pouvez bien sûr l'utiliser.
Attention, la syntaxe de R est sensible à la casse (majuscules ou minuscules) !
Ne mettez pas de caractères spéciaux dans les noms (accents, espace,
parenthèses, virgule, slash, etc.), et utilisez le point comme séparateur décimal
(PAS la virgule).
Commandes/fonctions
Il est possible de réaliser dans R des opérations (mean, sqrt, … voir plus bas), qui
génèrent un résultat immédiat à l’écran, mais on utilise plus souvent des fonctions
([Link], boxplot, lm, …) qui sont toujours suivies de leurs arguments entre
parenthèses. Les arguments permettent d’indiquer à la fonction les données et les
options choisies. On peut ajouter des commentaires (ignorés) après #.
Entrer des données
Pour aller chercher un fichier en format texte (.txt) n'importe où sur l'ordinateur,
avec des en-têtes de colonnes (sinon h ou header=F) :
donnees=[Link]([Link](),h=T)
On a ici créé un objet nommé donnees auquel on a assigné les données du fichier
choisi. On a utilisé pour ça l’opérateur =, mais on aurait pu utiliser <- (ou ->, plus
rare).
On peut aussi simplement créer un vecteur (1 colonne de données val1… valn) :
X=c(val1,val2,…) # ou X<-c(val1,val2,…)
Pour créer un objet avec plusieurs colonnes, il faut utiliser la fonction matrix avec
nrows lignes et ncol colonnes dont les noms sont donnés par dimnames :
X=matrix(c(val1,val2,val3,val4,val5,val6), nrow=2, ncol=3,
byrow=TRUE, dimnames=list(c("L1","L2"),c("C1","C2","C3")))
Un tableau de données, avec des lignes (objets : individus, observations,
prélèvements, …) et des colonnes (variables), qui ont éventuellement des
identifiants, est dans R un dataframe.
1/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
On peut modifier le tableau avec la fonction edit, qui ouvre l’éditeur de R :
donnees2=edit(donnees) # pour enregistrer les modifications
dans un nouvel objet
?nom_de_la_fonction donne l’aide sur une fonction (connue)
[Link]("mot_cle") liste tous les packages où le mot apparaît
Pour "attacher" les variables du fichier à l'espace de travail. Permet ensuite
d'accéder aux variables par leurs noms (colonnes) :
attach(donnees)
On peut annuler cette opération par :
detach(donnees)
Il est sinon possible de créer des objets correspondants aux variables, par exemple
pour les variables 1 et 2 (e.g. X1 et X2) dans les colonnes 1 et 2 du fichier
donnees :
X1=donnees[,1]
X2=donnees[,2]
ou encore (au cours de l’utilisation d’une fonction)
(X1,X2,data=donnees)
ou
(donnees$X1,donnees$X2)
Pour appliquer à une variable X divisée en groupes une fonction (moyenne (ici),
variance, test de normalité…) :
tapply(X,groupe,mean)
Pour créer un sous-jeu X1 des données X correspondant à une modalité d’un
facteur (ici A pour un facteur Fact, par exemple à 2 niveaux A et B) :
X1=subset(X,Fact=="A")
On a parfois besoin de vider la mémoire de R :
rm(list=ls())
Statistiques descriptives
moyenne mean(X)
variance estimée var(X)
somme sum(X)
effectif (n) length(X)
écart-type estimé sd(X)
médiane median(X)
erreur-type sqrt(var(X)/length(X))
2/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Quelques transformations de données
Logarithme népérien : log(X)
Logarithme en base 10 : log10(X)
Racine : sqrt(X)
Inverse : 1/X
Arcsinus : asin(X)
Diagramme quantile normale
qqnorm(X)
qqline(X) #pour tracer une ligne
Graphiques
La fonction plot() ouvre une nouvelle fenêtre graphique, qui s’effacera quand un
autre graphique sera créé. Pour créer une nouvelle fenêtre en plus de la précédente,
il faut utiliser la fonction windows(). Il est aussi possible de diviser une fenêtre pour
faire apparaître plusieurs graphiques sur une même page :
par(mfrow=c(3,2)) # partage la page en 3 lignes et 2 colonnes
La fonction plot génère un graphique différent en fonction de l’objet qu’elle
contient, et donc des analyses réalisées.
Par exemple, pour générer un nuage de points entre 2 variables X et Y, taper :
plot(X,Y) # ou plot(Y~X)
On peut ajouter des éléments (facultatifs) aux graphiques, entre autres :
main ajoute un titre (entre "") en haut du graphique
xlab et ylab ajoutent des noms (entre "") aux axes des abscisses et des
ordonnées
type permet de modifier les symboles (p pour des points, 1 pour des lignes)
pch permet de modifier les types de symboles (de nombreux types sont disponibles
et correspondent à des nombres : 0 = carré, 1 = rond, 2 = triangle, etc.)
col modifie la couleur ("black", …) des symboles
cex modifie la taille des symboles (1 est la taille par défaut)
Boxplot
boxplot(X)
boxplot(X1,X2,…) # permet de faire apparaître plusieurs
boxplots dans le même repère
boxplot(X~groupe) # ~ signifie "en fonction de"
Histogramme
hist(X) # nombre de classes m à partir de la règle de Sturge
Si on désire entrer ses propres limites de classes (l1, l2, etc.) :
hist(X,breaks=c(l1,l2,l3,…,…))
3/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
"Sourcer" une fonction
Cela permet d’utiliser des fonctions permettant de réaliser des analyses en plus des
fonctions de base de R. On le fait via le menu
Fichier -> Sourcer du code R… # sur Mac : Sourcer Fichier…
Permet ensuite de l'appliquer tel que décrit à la première ligne du fichier.
Packages
Il est souvent nécessaire d’installer des packages (« librairies ») dans R, qui sont
des ensembles de fonctions permettant de réaliser des analyses non disponibles
dans la version de base :
Menu Packages & Données -> Installeur de Packages
Il faut d’abord acquérir la liste des packages, puis les installer/mettre à jour en
installant les dépendances (c’est-à-dire les éventuels autres packages nécessaires).
Pour charger le package nom_package, entrez :
library(nom_package)
4/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Test de comparaisons de 2 moyennes
Pour 2 groupes x1 et x2 (même variable).
[ou avec un vecteur "groupe" à 2 niveaux, G, et une variable x : x~G]
Pour un test bilatéral : alternative = "[Link]" # Par défaut. Voir
aide des fonctions
Pour un test unilatéral : alternative = "less" ou "greater"
Tests de normalité
Shapiro-Wilk : [Link](x)
Données non appariées
Comparaison de variances :
Test F
[Link](x1,x2) # ou [Link](x~G) avec une variable
identifiant 2 groupes [idem pour les autres tests]
Test de Fligner-Killeen (non paramétrique)
[Link](x1,x2) # ou [Link](x~G)
Comparaison de moyennes :
Test t
[Link](x1,x2,[Link]=TRUE)
Avec correction de Welch
[Link](x1,x2) # par défaut : [Link]=FALSE
Test de Mann-Whitney
[Link](x1,x2,paired=FALSE) # par défaut
Test t par permutation
Sourcer fonction [Link].R
[Link](x1,x2,nperm=999) # valeur par défaut, modifiable
Données appariées
Test t
[Link](x1,x2,paired=TRUE)
Test de Wilcoxon
[Link](x1,x2,paired=TRUE)
Test t par permutation
Sourcer fonction [Link].R
[Link](x1,x2,nperm=999)
5/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Test de comparaison de 2 proportions
Pour 2 groupes comportant des nombres de succès x1 et x2 sur des populations
d’effectifs n1 et n2.
On peut tester l’égalité des proportions de plus de 2 groupes.
Pour tester l’égalité des proportions x1/n1 et x2/n2, on peut entrer :
[Link](c(x1,x2),c(n1,n2))
Il est également possible d’entrer les données dans une matrice 2X2 (x) contenant
une colonne pour les succès et une pour les échecs, par :
[Link](x)
Pour un test bilatéral : alternative = "[Link]" # par défaut
Pour un test unilatéral : alternative = "less" # ou "greater"
La correction de continuité s’applique ou non par correct=TRUE # or FALSE
Avec p = [valeur] # ou prob = [valeur]
il est possible de tester si une proportion est égale à une valeur donnée p (entre 0 et
1) ou si plusieurs proportions observées sont égales à p.
Avec p = NULL # par défaut
on teste l’égalité des proportions observées.
6/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Puissance et n optimal
Il s’agit de déterminer la puissance (power) d’un test à déclarer comme significatif
un écart donné entre des moyennes pour un nombre d’observations donné n
associé à une dispersion donnée, pour un niveau de signification ([Link]) fixé.
On peut également calculer un paramètre, comme n, pour obtenir une puissance
fixée, par rapport à un écart ou une dispersion donné(e) entre les moyennes.
Les conditions d’indépendance, de normalité, et d’homoscédasticité doivent être
respectées.
Comparaison de moyennes de 2 groupes
Il est nécessaire d’indiquer la valeur de l’écart-type moyen des 2 groupes (en
prenant la racine carrée de la variance pondérée si nécessaire) sd, et l’écart attendu
delta entre les moyennes, sauf si c’est un de ces paramètres qu’on désire estimer
en fixant tous les autres.
La fonction
[Link](n=NULL, delta=[valeur], sd=[valeur],
power=[valeur], [Link] = 0.05)
retourne la valeur du paramètre déclaré comme NULL (ici n) si les autres ont des
valeurs fixées. Le n éventuellement calculé est la valeur dans chaque groupe. Le
niveau de significativité peut être modifié ou estimé à partir des autres paramètres.
On peut aussi ne pas mettre le paramètre à estimer dans les arguments.
Il faut aussi spécifier le type de données, appariées ou non via
type = c("[Link]", "[Link]", "paired")
ainsi que si le test est bilatéral ou unilatéral :
alternative = c("[Link]", "[Link]")
Comparaison de moyennes de > 2 groupes
Il est nécessaire d’indiquer les valeurs des dispersions inter-groupes [Link]
et intra-groupes [Link], sauf si c’est une de celles-ci qu’on désire estimer en
fixant tous les autres paramètres.
Pour un facteur F et une variable X, on peut calculer ces dispersions comme suit :
Variance inter-groupes : var(tapply(X,F,mean))
Variance intra-groupes : mean(tapply(X,F,var))
La fonction
[Link](groups=[valeur], n=[valeur],
[Link]=[valeur], [Link]=[valeur], power=NULL,
[Link] = 0.05)
retourne la valeur du paramètre déclaré comme NULL (ici power) si les autres ont
des valeurs fixées. Le niveau de significativité peut être modifié ou estimé à partir
des autres paramètres.
7/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Analyses de variance
Pour les analyses de variance, les fonctions anova(lm(…)) et aov peuvent être
utilisées. Nous allons utiliser cette dernière, qui présente les résultats (via summary)
de la façon la plus classique, qui réclame que le critère de classification (s’il est
identifié par des chiffres) soit déclaré [Link] (par exemple pour un facteur A :
A=[Link](A))
ANOVA à 1 facteur (Fact ; la variable est X)
paramétrique
Calcul des moyennes (facultatif) et test de normalité (Shapiro-Wilk)
tapply(X,Fact,mean)
tapply(X,Fact,[Link])
Calcul des variances (facultatif) et test de Bartlett
tapply(X,Fact,var)
[Link](X~Fact)
ANOVA
summary(aov(X~Fact))
ou
anova1=aov(X~Fact) # idem pour les autres types d’ANOVA
summary(anova1)
par permutation
Test d'homogénéité des variances
Sourcer la fonction [Link].R
[Link](X,Fact,nperm=999) # ou un autre nombre de
permutations
ANOVA
Sourcer la fonction anova.1way.R
anova.1way(X~Fact,nperm=999)
non paramétrique
Test de Fligner-Killeen
[Link](X~Fact)
Test de Kruskal-Wallis
[Link](X~Fact)
ANOVA à 2 facteurs croisés (Fact1 et Fact2 ; la variable est X)
Calcul des moyennes (facultatif) et test de normalité
tapply(X,interaction(Fact1,Fact2),mean)
8/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
tapply(X,interaction(Fact1,Fact2),[Link])
ou
tapply(X,Fact1:Fact2,mean)
tapply(X,Fact1:Fact2,[Link]) # pour effectuer le test de
normalité sur les groupes identifiés par les croisements de
modalités (= les cases du tableau)
Calcul des variances (facultatif) et test de Bartlett
tapply(X,interaction(Fact1,Fact2),var)
ou
tapply(X,Fact1:Fact2,var)
[Link](split(X,list(Fact1,Fact2)))
ou
[Link](X,Fact1:Fact2)
paramétrique
sans répétitions
summary(aov(X~Fact1+Fact2))
avec répétitions
summary(aov(X~Fact1*Fact2)) # "*" signifie que les 2 facteurs
et leur interaction doivent être calculées
ou
summary(aov(X~Fact1+Fact2+Fact1:Fact2))
Diagramme d'interactions
[Link](Fact1,Fact2,X) # le premier facteur (ici
Fact1) sera en abscisse
par permutation
Sourcer la fonction anova.2way.R
anova.2way(X~Fact1*Fact2,model=1,nperm=999) # pour une ANOVA
de modèle 1 (2 facteurs fixes)
non paramétrique
Test de Friedman (2 facteurs croisés sans répétitions)
[Link](X~Fact)
Test de Sheirer-Ray-Hare (2 facteurs croisés avec répétitions)
Sourcer la fonction SRH.R
SRH(X,Fact1,Fact2)
ANOVA hiérarchique (avec le facteur principal A et le sous-facteur b)
paramétrique
Test du sous-facteur (par rapport à la variation due aux erreurs)
anovaH=aov(X~A/b)
summary(anovaH) # ou summary(aov(X~A/b))
9/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
# Dans le summary, seule la ligne A:b est valide
Test du facteur principal
anovaH2=aov(X~A+Error(A:b))
summary(anovaH2) # ou summary(aov(X~A+Error(b)))
# Dans le summary, la ligne A est correcte
par permutation
Sourcer la fonction [Link].R
[Link](X,A,b,nperm=999)
Tests post-hoc
Test HSD de Tukey
avec 1 facteur
anova1=aov(X~Fact)
TukeyHSD(anova1) # ou TukeyHSD(aov(X~Fact))
avec 2 facteurs
anova2=aov(X~Fact1*Fact2)
TukeyHSD(anova2,"Fact1") # ou "Fact2", bien sûr.
On peut aussi utiliser des tests 2 à 2 avec correction pour l'inflation de l'erreur
de Type 1 (comme la correction de Bonferroni) :
[Link](X,Fact,[Link]="bonf")
Non paramétriques
Conover-Iman
Il faut installer le package [Link]
[Link](X,Fact)
Dunn
Il faut installer le package [Link]
[Link](X,Fact)
10/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Corrélation et régression linéaire simple
Corrélation et covariance (2 variables X1 et X2)
Calcul de la covariance :
cov(X1,X2)
Corrélation paramétrique et non paramétrique
Calcul de la corrélation :
cor(X1,X2)
Test de la corrélation :
paramétrique
[Link](X1,X2) # avec calcul de l’intervalle de confiance
Il est bon (mais pas toujours suffisant) de tester avant la normalité de chaque
variable avec [Link]. Les conditions peuvent être vérifiées de la même
façon avec le même diagnostic que pour la régression.
Par défaut, l’argument method est pearson (corrélation paramétrique). Pour
calculer/tester une corrélation non paramétrique, il suffit de le changer pour
spearman ou kendall :
cor(X1,X2,method="spearman")
[Link](X1,X2,method="kendall")
par permutations
Sourcer la fonction corPerm.R
corPerm1(X1,X2,nperm) # nperm = nombre de permutations. Le
test est bilatéral
Test de H0 r ≠ 0 (soit r = r0) :
Sourcer la fonction [Link].R
[Link](r,r0,n) # n = nombre d’observations
11/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Régression linéaire simple
On a ici une variable Y (variable réponse ou dépendante) qui dépend de X (variable
explicative ou indépendante)
Tracé du diagramme de dispersion :
plot(X,Y)
Calcul de la droite de régression et test des coefficients :
reg=lm(Y~X)
summary(reg) # ou summary(lm(Y~X))
Tableau d’ANOVA du modèle :
anova(reg) # ou anova(lm(Y~X))
Tracé de la droite de régression de modèle 1 dans le diagramme :
plot(X,Y) # plot doit être appelé avant le tracé de la droite
abline(reg) # ou abline(lm(Y~X))
Diagnostic et évaluation du modèle de régression via l’examen des résidus :
plot(reg) # ou plot(lm(Y~X))
Cette fonction produit 4 graphiques séquentiellement, qui peuvent être affichés
simultanément sur la même page en entrant avant :
par(mfrow=c(2,2)) # partage la page en 2 lignes et 2 colonnes
Il est possible de récupérer les résidus de cette régression via
resid(reg)
On peut tester la normalité des résidus via un test de Shapiro-Wilk.
Calcul d’intervalles de confiance
Paramètres du modèle
confint(reg) donne par défaut l’estimation à 95 % de tous les paramètres, le
niveau peut être modifié via l’argument level (= 0.95 par défaut)
Estimation pour une valeur Xi de X
nouvX=[Link](X=Xi) # Xi est un chiffre, bien sûr
predict(lm(Y~X),nouvX,interval="confidence") # intervalle de
confiance d’une estimation de Yi pour un Xi, le niveau peut
être modifié via level (=0.95 par défaut)
ou directement
predict(lm(Y~X),[Link](X=Xi),interval="confidence")
Calcul d’un intervalle de prédiction :
predict(lm(Y~X),nouvX,interval="prediction") # intervalle de
prédiction d’une estimation de Yi pour un nouveau Xi
12/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Lien entre variables qualitatives
On considère 2 variables qualitatives W et Z, avec respectivement les modalités W1
et W2, et Z1 et Z2.
Test du Khi-2
Ce test permet d’analyser des tableaux plus grands que 2X2 si besoin.
La première étape est de réaliser un tableau de contingence (ici tabcont) qui va
lister les fréquences des croisements de modalités des variables considérées. C’est
ce que fait la fonction table, à partir d’une matrice contenant pour plusieurs
observations les modalités de W et Z dans 2 colonnes :
tabcont=table(W,Z)
On peut bien sûr directement créer la matrice si on dispose des fréquences, par
exemple via la fonction matrix.
Pour effectuer le test du Khi-2 :
[Link](tabcont)
Il possible de calculer et visualiser les effectifs théoriques par :
[Link](tabcont)$expected
La correction de continuité s’applique ou non par correct=TRUE # or FALSE
Attention, les effectifs théoriques absolus doivent être d’au moins 5, sinon un
message d’erreur est produit.
Test exact de Fisher
Ce test est ordinairement réservé aux tableaux de contingence 2X2, et doit
également être effectué sur un tableau de contingence. Il est valide pour toutes les
tailles d’échantillons, donc avec les faibles effectifs. La probabilité exacte d’obtenir
les données observées est calculée, avec une durée qui augmente rapidement avec
le nombre de lignes et de colonnes. Le test s’effectue comme suit :
[Link](tabcont)
13/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Analyse de covariance
Analyse de covariance
- une variable dépendante Y
- une variable indépendante quantitative X
- une variable indépendante qualitative Z, qui doit être déclarée [Link] si
nécessaire (niveaux identifiés par des chiffres = groupes)
Tracé du diagramme de dispersion :
par exemple pour un facteur Z à 3 niveaux Z1, Z2, Z3 :
plot(X,Y,type='n')
symbols=c(1,2,3) # vous pouvez choisir d’autres symboles
points(X,Y,pch=symbols[[Link](Z)])
legend(locator(1),c('Z1','Z2','Z3'),pch=c(1,2,3)) # cliquez
sur le graphique pour placer la légende
Approche paramétrique :
anc=lm(Y~X*Z)
anova(anc) # ou anova(lm(Y~X*Z))
Dans le tableau d’ANOVA, on aura :
l’effet de X sur Y, qui doit d’abord être évalué pour chaque niveau du facteur Z
l’effet de Z sur Y
l’effet de l’interaction de X et Z sur Y, notée X:Z
Ou (suit pas à pas l’approche montrée en cours) :
Sourcer la fonction ancova.R
ancova(Y,Z,X)
14/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Régression multiple
Régression polynomiale
Régression multiple
On a une variable Y (variable réponse ou dépendante) qui dépend de plusieurs
variables X1, X2, … Xn (variables explicatives ou indépendantes).
On considèrera arbitrairement ci-dessous un modèle avec 3 variables
indépendantes.
Calcul du modèle de régression et test des coefficients :
regm=lm(Y~X1+X2+X3)
summary(regm) # ou summary(lm(Y~X1+X2+X3))
Sélection des variables
On peut effectuer cette sélection « à la main » en retirant ou en ajoutant des
variables Xn selon la procédure choisie.
Il est également possible d’utiliser une procédure automatique :
regm=lm(Y~X1+X2+X3)
step(regm) # la procédure par défaut est une élimination
descendante, modifiable via "direction"
La fonction step sélectionne le meilleur modèle en se basant sur l’AIC (Akaike
Information Criterion)
Elimination descendante (backward elimination)
step(regm,direction="backward")
Sélection ascendante (forward selection)
step(regm,direction="forward")
Procédure pas à pas (stepwise procedure)
step(regm,direction="both")
Diagnostic et test du modèle de régression via l’examen des résidus :
plot(regm)
Cette fonction produit 4 graphiques séquentiellement, qui peuvent être affichés
simultanément sur la même page en entrant avant :
par(mfrow=c(2,2))
Il est possible de récupérer les résidus de cette régression via
resid(regm)
15/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Régression polynômiale
Il s’agit ici d’ajuster un modèle non linéaire aux données. Cela peut se faire dans un
contexte de régression simple ou multiple, nous allons nous cantonner à la
régression simple Y = f(X), dans laquelle la variable indépendante X sera élevée à
différents ordres ≥ 2 en fonction du modèle choisi à travers l’examen du nuage de
points.
Pour un modèle d’ordre 2 (e.g. regpol2) :
regpol2=lm(Y~X+I(X^2))
ou
regpol2=lm(Y~poly(X,2,raw=TRUE)) # plus pratique si on veut
utiliser un polynôme d’ordre élevé
Pour un modèle d’ordre 3 (e.g. regpol3) :
regpol3=lm(Y~X+I(X^2)+I(X^3))
ou
regpol3=lm(Y~poly(X,3,raw=TRUE))
etc.
Test des coefficients :
summary(regpol)
Les mêmes procédures de sélection des variables qu’en régression linéaire multiple
peuvent être utilisées.
Tracé du diagramme de dispersion avec la courbe de régression :
plot(X,Y)
x=min(X):max(X) # attention à la casse ici
y=predict(regpol,list(X=x))
lines(x,y)
16/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
Analyse multivariable
De nombreux packages permettent de faire les analyses présentées ici dans R
(vegan, ADE4, FactoMineR, etc.). Nous allons utiliser ici vegan pour certaines
analyses non disponibles dans la version de base de R.
Il faut donc installer le package vegan (Packages & Données).
L’analyse se fait sur une matrice de données (dataframe), ici X.
Ordination
Analyse en composantes principales (ACP)
Avec la version basique de R :
ACP=prcomp(X,center=TRUE,scale=TRUE) # scale=TRUE permet
d’utiliser une matrice de corrélation
Attention à la situation par défaut (scale=FALSE) qui réalise l’analyse sur une
matrice de covariance
Le résultat affiché montre les coordonnées des objets sur chaque composante
principale.
Afficher le résumé et l’histogramme des valeurs propres
summary(ACP) # ou plot(prcomp(X,center=TRUE,scale=TRUE))
plot(ACP)
Tracer le diagramme d’ordination (biplot)
biplot(ACP)
NB : la fonction princomp fait en gros la même chose avec un calcul de l’ACP par
une autre méthode, moins recommandée.
Avec vegan :
library(vegan)
ACP=rda(X,scale=TRUE) # afin d’utiliser une matrice de
corrélation
ACP
Attention à la situation par défaut (scale=FALSE) qui réalise l’analyse sur une
matrice de covariance
NB : la fonction rda effectue une analyse canonique de redondance, qui revient une
ACP lorsqu’on n’a qu’une seule matrice de données.
vegan permet d’effectuer les calculs de projection de l’ACP en préservant les
distances Euclidiennes entre les objets (scaling=1) ou les corrélations entre
descripteurs (scaling=2).
17/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
ACP avec cadrage de type 1 préservant la distance euclidienne entre les objets :
summary(ACP,scaling=1)
biplot(ACP,scaling=1)
ACP avec cadrage de type 2 préservant la corrélation entre les descripteurs:
summary(ACP,scaling=2)
biplot(ACP,scaling=2)
Vous pouvez également tracer les biplots avec la fonction [Link].R, qui
génère en même temps les 2 cadrages :
Sourcer la fonction [Link].R
[Link](ACP,point=TRUE) # point=TRUE ajoute des points
pour les objets
Analyse factorielle des correspondances (AFC)
Avec vegan :
library(vegan)
AFC=cca(X)
AFC
NB : la fonction cca effectue une analyse canonique des correspondances, qui
revient une AFC lorsqu’on n’a qu’une seule matrice de données.
vegan permet d’effectuer les calculs de projection de l’AFC en préservant les
distances du Khi-2 entre les lignes (sites, objets) (scaling=1) ou les entre les
colonnes (espèces) (scaling=2).
AFC avec cadrage de type 1 préservant la distance entre les lignes :
summary(AFC,scaling=1)
plot(AFC,scaling=1)
AFC avec cadrage de type 2 préservant la distance entre les colonnes :
summary(AFC,scaling=2)
plot(AFC,scaling=2)
Groupements
Matrice de distance
La fonction dist dans R permet de calculer des matrices de distance, mais elle offre
un choix assez limité. Nous allons à nouveau utiliser vegan, avec la fonction
vegdist, pour cela.
Pour des données quantitatives classiques (pas de problème du double-zéro) dans
une matrice X, on peut utiliser une distance Euclidienne.
Il est souvent judicieux de standardiser les données avant de calculer cette distance
18/19
Yves Desdevises, Observatoire Océanologique de Banyuls, Sorbonne Université
(fonction decostand de vegan) :
decostand(X,method="standardize")
D=dist(X) # la distance Euclidienne est le choix par défaut,
sinon ajouter l’argument method="euclidean"
ou
D=vegdist(X,method="euclidean") # la distance de Bray-Curtis
est le choix par défaut
Pour des données d’abondance (problème du double-zéro) dans une matrice X, on
peut utiliser une distance de Bray-Curtis.
D=vegdist(X) # la distance de Bray-Curtis est le choix par
défaut, sinon ajouter l’argument method="bray"
Pour des données binaires, il suffit d’ajouter l’argument binary=TRUE (FALSE par
défaut), et de choisir une méthode appropriée (e.g. "jaccard").
Pour un indice de simple concordance, la fonction dist de R peut être utilisée :
D=dist(X,method="binary")
Groupement hiérarchique
Lien simple
gptls=hclust(D,method="single")
plot(gptls) # ou plot(hclust(D,method="single"))
Lien complet
gptlc=hclust(D,method="complete")
plot(gptlc)
Lien moyen
gptlm=hclust(D,method="average")
plot(gptlm)
Test de Mantel
Le test se fait sur 2 matrices de distances, D1 et D2.
mantel(D1,D2)
On peut changer le coefficient de corrélation utilisé via l’argument method
("pearson" (par défaut), ou "spearman" ou "kendall"). Le nombre de
permutations, 999 par défaut, est contrôlé par l’argument permutations.
Il est possible de contrôler l’effet d’une troisième matrice D3 à l’aide d’un test de
Mantel partiel :
[Link](D1,D2,D3) # même options
19/19