Lexique des commandes R utilisées dans le MOOC FUN - avril/mai 2014

Première semaine

smp <- read.csv2(fichier) : importe un fichier de données dans R

View(smp) : affiche le contenu du dataFrame

dim(smp) : donne les dimensions du tableau

names(smp) : affiche la liste des variables

str(smp) : aperçu du dataframe, avec les types de variables et les 10 premières valeurs

summary(smp) : affiche les données statistiques de base : min, max, médiane et quartiles, nb de valeurs nulles

summary(smp$age) : idem, mais uniquement pour la variable age

smp$age : affiche l'ensemble des valeurs de la variable age

smp$age[c(1,2)] : affiche les observations 1 et 2

smp$age[c(1 : 20)] : affiche les observations 1 à 20

head(smp$age, n=10) : affiche les 10 premières observations

min(smp$age, na.rm=TRUE) : calcule la valeur minimale, en excluant les valeurs nulles

range(smp$age, na.rm=TRUE) : renvoie le minimum et le maximum

unique(smp2$abus) : retourne le nombre de valeurs différentes

length(smp2$abus) : retourne la longueur de la variable

nrows(smp2$abus) : nombre de lignes

table(smp2$abus) : affiche le nombre d'occurrences de chaque valeur, sans les valeurs nulles

table(smp$n.enfant> 4) : affiche le nombre de valeurs vraies et fausses pour l'assertion

table(smp2$abus,useNA = 'always') : avec les valeurs nulles

sum(!is.na(smp2$abus)) : compte le nombre de valeurs non nulles

sum(complete.cases(smp2$abus)) : identique à la commande précédente

print ( describe (var, num.desc = c ( "mean", "median", "sd", "min", "max", "valid.n" ) ) $ Numeric ) : affiche les infos demandées de manière synthétique

Création de proportions ou de catégories dans une série

tabSexe <- prop.table ( table ( satisf $ sexe.c ) ) : crée la variable tabSexe contenant les pourcentages de chacune des classes de la série considérée

table(cut (smp$age, breaks=c(10,20,30,40,50,100), include.lowest=TRUE)) : affiche les données regroupées par catégorie, sous la forme : > val <= , sauf pour la première catégorie : >= val <=

commande factor et labellisation

factor(smp2$abus, labels=c("non","oui")) : affiche les valeurs factorisées, en remplaçant les 0 et les 1 par non et oui

smp$n.enfant.cat <-factor(smp$n.enfant) : crée une nouvelle variable contenant les nombres d'occurrence par nombre d'enfants

levels(smp$n.enfant.cat)[6:13] <-"5+" : crée une catégorie 5+ pour regrouper tous les niveaux 6 à 13

nlevels(smp$n.enfant.cat) : affiche le nombre de niveaux pour la variable considérée

Gestion des variables

rm(abus) : supprime une variable

save(smp,file="smp_v1.rda") : sauvegarde la variable au format interneR

load ("smp_v1.rda") : recharge lavariable smp précédemment sauvegardée

Diagrammes

plot(serie) : diagramme de points

plot(serie1, serie2) : diagramme de points xy

plot(jitter(serie1), jitter(serie2)) : diagramme de points xy, avec décalage pour éviter les superpositions

boxplot(shop$score.relation~shop$sexe, ylab="score relationnel", xlab="sexe") : comparaison dans un diagramme à moustaches de la relation en fonction du sexe

plotmeans : diagramme temporel. Nécessite la librairie gplots(library(gplots))

Seconde semaine

Chargement d'une librairie

install.packages('binom') : charge le paquetage adéquat

library (binom) : charge la librairie considérée

Intervalles de confiance, corrélation, risque relatif, odd-ratio

binom.confint(3,10, method='all') : affiche l'intervalle de confiance pour 3 résultats dans une sélection aléatoire de 10, selon toutes les méthodes (exact : à utiliser par défaut)

cor(smp$age,smp$n.enfant,use="complete.obs") : calcule le coefficient de corrélation de Pierson (corrélation linéaire sur loi normale)

library(Epi)

twoby2(1-smp$ed.b,1-smp$dep.cons) : calcule le risque relatif et le odd-ratio de deux variables binaires (1 - : indispensable pour transformer les 0 - risque avéré dans la fonction en 1, et inversement)

Fonctions de manipulation de variables

smp$ed.b <- ifelse(smp$ed > 2, 1, 0) : test binaire, permettant de transformer toutes les valeurs de ed > 2 en valeur 1, les autres en 0, le tout stocké dans smp$ed.b

table (smp$ed.b,smp$ed,deparse.level=2,useNA = 'always') : compare les valeurs de ed.b avec ed, pour afficher le nombre de valeurs se retrouvant ensemble

which(smp$prof == "agriculteur") : affiche les enregistrements qui correspondent à la requête

smp$age[which(smp$prof == "agriculteur")] : affiche l'age des agriculteurs

subset (smp, prof=="agriculteur", age) : idem, en colonne

round(prop.table(tab),3) : affiche les proportions de chacune des occurrences d'une variable, arrondis à la 3ème décimale

Création d'un rapport (markdown)

install.packages('knitr')

purl("rapport.Rmd") : récupère les commandes R contenues dans le rapport

Définition des options par défaut

```{r setup, include=FALSE}
opts_knit$set(progress=FALSE, verbose=FALSE, width=90)
opts_chunk$set(message=FALSE, tidy=TRUE, hightlight = TRUE, fig.align="center")
```

Diagrammes (suite)

barplot(prop.table(var)*100, ylab="proportion", col="blue", border=NA, ylim=c(0,40)) : affiche un diagramme en barres avec une échelle Y de 0 à 40

hist(smp$age, nclass=8, prob=TRUE, col="cornflowerblue", border="white", xlim=c(0,100))
lines(density(smp$age, no.rm=TRUE), lwd=2, col="red")

text(65, 0.025, poste("N =", sum(complete.cases(smp$age))),cex=1.2) : affiche un histogramme des ages en 8 classes, en affichant la densité, et une ligne avec le nombre d'individus, et enfin la valeur N

Troisième semaine

tab <- table (smp$ed.b, smp$dep.cons, deparse.level=2) : crée un tableau avec les deux variables considérées, en conservant le nom des variables (deparse.level = 2)

prop.table(tab, 1) : donne la proportion de chaque croisement entre les deux séries de tab, par rapport au premier paramètre (valeur 1)

chisq.test(smp$ed.b, smp$dep.cons, correct=FALSE) : lance le test de Chi-2

fisher.test(smp$ed.b, smp$dep.cons) : Test exact de Fisher, dans le cas où le test de Chi-2 ne peut être utilisé (% trop faible ou trop fort, nb échantillons trop faible)

by (smp$age, smp$ed.b, sd, na.rm=TRUE) : calcule l'écart-type (sd) de l'age par rapport à l'évitement du danger. Permet de comparer les écarts-types entre eux (approximation de la variance)

t.test(variable_à_étudier~variable_déterminant_les_sous_groupes, var.equal=TRUE) : test t de Student (comparaison de moyennes)

t.test(QI, mu=100) : Comparaison d'une moyenne à une référence

wilcox.test(variable_à_étudier~variable_déterminant_les_sous_groupes) : Test de Mann-Whitney ou de Wilcoxon (comparaison de moyenne quand le test t de student n'est pas utilisable

cor.test(var1, var2) : test de nullité de corrélation de Pearson

cor.test(var1, var2, method="spearman") : Test de Spearman dans le cas d'absence de loi normale (comparaison rang à rang)

mcnemar.test(b.debut, b.fin) : Test de comparaison de l'évolution de moyenne pour une même population, sur une donnée qualitative

t.test(x.debut, x.fin, paired=TRUE) : comparaison de l'évolution d'une moyenne pour une même population, pour une donnée quantitative

Diagramme de normalité

qqnorm(smp$age); qqline(smp$age) : les points doivent être alignés sur la ligne

Tests de régression

plot(jitter(smp.c$age), jitter(smp.c$dur.interv, factor=4)) : crée un diagramme de points avec l'age en X, et la durée en Y, avec un facteur de dispersion de 4

abline(lm(smp.c$dur.interv~smp.c$age),lwd=2) : crée les coordonnées de la ligne de régression (lm, valeur Y en premier), et trace la ligne dans le diagramme (lwd=2 : épaisseur de la ligne)

modl <- lm(dur.interv~age,data=smp.c) : stocke le calcul de la ligne de régression dans la variable

summary(modl) : affiche le contenu de la régression simple. La colonne Estimate donne la valeur b, c (quantité à additionner à Y pour chaque "pas" considéré), et Pr(>|t|) le t-factor (doit être inférieur à 5 % pour être considéré significatif)

mod2 <- lm(dur.interv~age+dep.cons+subst.cons+scz.cons,data=smp.c) : analyse l'évolution de la durée de l'intervention avec l'age et les autres variables considérées

drop1(mod3,.~.,test="F") : si une des variables est qualitative (profession par exemple), la commande permet d'afficher les informations globales pour chaque variable qualitative "explosée" lors de la commande lm ; on obtient ainsi les données globales d'effet de la profession sur la durée

.hist (resid(mod2), col="grey", main="Histogramme du bruit") : affiche l'histogramme du bruit de la fonction de régression - test visuel de la "normalité" du bruit, et donc vérification de la condition d'utilisation de la fonction de régression.

Divers

tab <-table (smp.c$subst.cons, smp.c$abus)

barplot(tab, beside=TRUE, legend=c("abus=0", "abus=1"), xlab="Consommation substance", ylab="Effectifs") : crée un diagramme en batons avec légende, en comparant la consommation de substances et le facteur abus

res <- chisq.test(tab) : stocke les variables du test de chi2 dans res

res$observed : affiche les valeurs obtenues dans le test

res$expected : calcule la valeur probable en tenant compte des tests statistiques

plot(density(smp.c$age[smp.c$subst.cons==1], na.rm=TRUE), lwd=2, col="red",xlim=c(19,83)) : Crée un diagramme avec une ligne permettant de visualiser l'âge des personnes ayant consommé des substances, colorée en rouge

lines(density(smp.c$age[smp.c$subst.cons==0], na.rm=TRUE), lwd=2, col="blue") : rajoute sur le schéma la ligne correspondant à ceux n'ayant pas consommé de substances

round(with(smp.c, tapply(age,subst.cons, mean, na.rm=TRUE)),1) : affiche la moyenne de l'age, avec ou sans consommation de substances (tapply). with permet de ne pas indiquer le nom du tableau pour chaque variable, et round arrondit les résultats

smp.c$subst.cons <- factor (smp.c$subst.cons, levels=c(0,1), labels=c("non", "oui")) : renomme les valeurs 0 et 1 en non et oui dans la variable, pour faciliter la lecture

t.test(smp.c$age[smp.c$subst.cons == 'non'], smp.c$age[smp.c$subst.cons == 'oui']) : test de student

aggregate (age ~ subst.cons, data=smp.c, mean) : affiche la moyenne pour chacune des catégories

aggregate (age ~ subst.cons, data=smp.c, var) : idem, mais pour la variance

cor (smp.c$n.enfant, smp.c$age, use="pairwise") : calcul du coefficient de corrélation avec des valeurs nulles

cor (smp.c$n.enfant, smp.c$age, use="pairwise", method="spearman") : idem, mais test de Spearman

plot(jitter(n.enfant) ~ jitter(age), data=smp.c, pch=19, col=rgb(0,0,0.7,0.5)) : diagramme de points avec taille du point (pch) et couleur, associée en RGB avec le facteur de transparence (ici 0.5)

Semaine 4 - Introduction à la régression logistique

mod1 <- glm (suicide.hr~abus, data=smp, family="binomial") : general binary model - régression logistique

exp(mod1$coefficients) : odd-ratio du (ou des) coefficient(s). Si valeur 2, le risque lié à l'abus est multiplié par 2

drop1(mod1,.~.,test="Chisq") : effet global d'une variable catégorielle ("explosée en k-1 variables, comme dans la fonction lm. Attention : le test n'est pas F comme avec lm, mais Chisq.

Fonction de survie

plot(survfit(Surv(alc$t,alc$SEVRE)~1), main="Courbe de maintien dans l'abstinence") : calcule la survenance de l'événement sur une variable censurée (t)

plot(survfit(Surv(alc$t,alc$SEVRE)~alc$SEXE),col=c('black','red'), main="Courbe de maintien dans l'abstinence") : affiche les courbes pour deux groupes de sujets (sexe).

survfit(Surv(alc$t, alc$SEVRE)~1) : calcule les indicateurs, dont la médiane de survie

survdiff(Surv(alc$t,alc$SEVRE)~alc$SEVRE, data=alc) : calcule les différences entre deux sous-groupes

coxph(Surv(alc$t, alc$SEVRE)~alc$AGE, data=alc) : vérifie l'association de la survie à une variable quantitative (modèle de Cox)

coxph(Surv(alc$t, alc$SEVRE)~alc$AGE+alc$SEXE+alc$EDVNEG, data=alc) : idem, mais en combinant plusieurs causes explicatives (vérifier la valeur du p-value)

par(mfrow=c(2,2)) : fragmente la fenêtre graphique de R pour pouvoir représenter 2x2 graphiques

plot(cox.zph(mod2)) : affiche les graphiques pour chacune des variables testées (conditions de vérification du modèle de Cox - les points doivent être alignés sur le plan horizontal

Divers

head(subset(smp, prof == 'sans emploi' | prof == 'prof.interm?diaire'|prof == 'cadre', c(age, n.enfant, prof))) : affiche le sous-ensemble des données pour les professions sélectionnées, avec les variables age, n.enfant, et prof

smpb <- subset(smp, prof == 'sans emploi' | prof == 'prof.intermediaire'|prof == 'cadre', c(age, n.enfant, prof)) : idem, mais stockage dans une variable

smpb$prof <- factor(smpb$prof) : suppression des valeurs non renseignées (refactorisation de prof). Par défaut, prof contient également les professions non sélectionnées

aggregate(n.enfant ~ prof, data=smpb, mean) : calcule la moyenne du nbre d'enfants par profession

boxplot(n.enfant ~ prof, data=smpb) : affiche un diagramme "boite à moustache" pour les données considérées

m <- lm(n.enfant ~ prof, data=smp, subset=prof %in% c('sans emploi', 'prof.interm?diaire', 'cadre') : calcule la régression linéaire correspondante, ent stockant le résultat dans la variable m

drop1(m, test="F") : affiche les différents coefficients correspondants

anova(m) : affiche l'analyse de variance

m <-lm(n.enfant ~ age, data=smp) : calcule la corrélation linéaire correspondante

coef(m)[2] ou coef(m)['age'] : affiche le coefficient pour l'age

confint(m) : affiche l'intervalle de confiance à 95 %

plot(n.enfant ~ age, data=smp)

abline(m) : affiche les points et la droite de régression dans le même schéma

head(fitted(m)) : affiche les valeurs exactes de la régression

head(resid(m)) : affiche les valeurs résiduelles

smp$n.enfant.bin <- factor(ifelse(smp$n.enfant > 2, 1, 0)) : crée une variable binomiale sur le nbre d'enfants

m <- glm(n.enfant.bin ~ age, data=smp, family=binomial("logit")) : calcule la régression logistique à partir d'une variable binomiale

head(predict(m)) : calcule les prédictions pour la régression logistique

head(predict(m, type="response")) : calcule la probabilité pour la régression logistique

exp(5*coef(m)[2]) : calcule le coefficient à 5 ans