logique formula -niveau

publicité
Ceci est un extrait électronique d'une publication de
Diamond Editions :
http://www.ed-diamond.com
Ce fichier ne peut être distribué que sur le CDROM offert
accompagnant le numéro 100 de GNU/Linux Magazine France.
La reproduction totale ou partielle des articles publiés dans Linux
Magazine France et présents sur ce CDROM est interdite sans accord
écrit de la société Diamond Editions.
Retrouvez sur le site tous les anciens numéros en vente par
correspondance ainsi que les tarifs d'abonnement.
Pour vous tenir au courant de l'actualité du magazine, visitez :
http://www.gnulinuxmag.com
Ainsi que :
http://www.linux-pratique.com
et
http://www.miscmag.com
sciences/techno
statistiques
 R : Programmer avec des données*
Yves Croissant
EN DEUX MOTS R est un Logiciel libre, qui est un
dialecte de S, langage de programmation pour les
analyses statistiques développé dans les années
80 aux laboratoires Bell, en particulier par John
Chambers. R a été écrit initialement par Ross
Ihaka et Robert Gentleman et est actuellement
développé par une petite équipe de développeurs
(R Core Development Team). Il est distribué sous
les termes de la GNU public licence.
est disponible sous la forme de
fichiers exécutables pour tous les
systèmes d’exploitation courants :
Linux (Debian, Red Hat, Mandrake
et Suse),Windows et MacOS. Il est également
disponible sous forme de sources.
Le site de R est : http://www.r-project.
org.
Les liens suivants sont particulièrement
intéressants :
 CRAN : pour télécharger R. Il faut d’abord
choisir un site miroir, puis télécharger
le logiciel.
D
ocumentation : les manuels de R sont
un peu austères pour les débutants. Dans
la section Other, on trouve plusieurs
documents plus accessibles. Notons
en particulier « R pour les débutants »
d’Emmanuel Paradis.
L
e lien Search est également très utile
afin de trouver comment une fonction
particulière est implantée dans R.
Une fois le logiciel installé, il peut être lancé
à partir d’un terminal en entrant simplement
R. Une ligne débutant par le signe > apparaît
alors. Une expression écrite après ce signe
suivie d’un retour chariot est alors évaluée
par R.
Cette manière de procéder permet de
travailler en mode interactif. Pour un usage
régulier, il est préférable de travailler avec
un éditeur de texte. emacs (http://www.
gnu.org/software/emacs/ ) dispose d’une
librairie appelée ess (emacs speaks statistics)
permettant de travailler avec R (ainsi qu’avec
d’autres logiciels de statistique).
Les commandes sont alors entrées
dans un fichier et peuvent être évaluées
88
individuellement ou par bloc dans la console de R. Le site
de cette librairie est : http://ess.r-project.org.
1. Les différents objets
R est un langage fonctionnel.Toute fonction crée un résultat
qui est stocké dans un objet, c’est-à-dire une structure
de donnée dotée de différentes fonctions permettant de
manipuler ces données de manière appropriée. Chaque fonction
dispose d’une aide en ligne, que l’on peut consulter en tapant
help(fonction) ou plus simplement ?fonction.
Une fonction admet en général un ou plusieurs arguments,
certains obligatoires, d’autres facultatifs, qui peuvent être
renseignés en respectant l’ordre de ces arguments, ou à l’aide
d’une syntaxe clé-valeur. Par exemple, la fonction lm, que l’on
verra ultérieurement, a pour deux premiers arguments formula
et data. Les trois syntaxes ci-dessous sont équivalentes :
> lm(formula=x,data=y)
> lm(x,y)
> lm(data=y,formula=x)
Même si R n’est pas réellement un langage orienté objet,
il en possède certaines caractéristiques qui facilitent la
programmation. Nous présenterons dans cette section les
principaux objets utilisés par R.
1.1 Les vecteurs
L’objet de base est le vecteur. La fonction c() permet de
créer un vecteur.
> c(1, 2, 3, 4)
[1] 1 2 3 4
Le résultat de la commande précédente crée un vecteur
numérique et l’imprime.
> w <- c(1, 2, 3, 4, 2, 6, 4)
> w
[1] 1 2 3 4 2 6 4
La commande ci-dessus est quasiment équivalente. La différence
est que le résultat de la commande est stocké dans un nouvel
objet appelé w au moyen de l’opérateur d’assignation <- (qui
peut être remplacé par le signe =).
La seconde commande w (équivalente à print(w)), imprime
cet objet. Chaque objet est caractérisé par un certain nombre
d’attributs. Pour l’objet de base (le vecteur), ils sont au nombre
de deux : le mode et la longueur. Ces attributs peuvent être
extraits à l’aide de fonctions homonymes.
> mode(w)
[1] «numeric»
> length(w)
[1] 7
 GNU Linux Magazine France
Le mode de w est numeric. Les autres modes possibles pour
un vecteur sont character et logical.
> z <- c(«un», «deux», «trois»)
> y <- c(F, T, F, F)
> z
[1] «un» «deux» «trois»
> y
[1] FALSE TRUE FALSE FALSE
> mode(z)
[1] «character»
> mode(y)
[1] «logical»
Des vecteurs peuvent être également créés au moyen de
séquences (fonction seq), ou par répétition d’un même
vecteur (fonction rep) :
> seq(1, 4, 0.5)
[1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0
> seq(1, 4)
[1] 1 2 3 4
> rep(c(1, 2), 5)
[1] 1 2 1 2 1 2 1 2 1 2
La fonction seq prend comme arguments la valeur initiale
de la séquence, la valeur finale et le pas d’incrémentation. Si
ce dernier argument est manquant, il est par défaut égal à 1.
Le même résultat peut alors être plus simplement obtenu à
l’aide de la commande 1:4.
R dispose d’un puissant mécanisme d’indiçage qui permet
d’extraire aisément certains éléments d’un vecteur. Dans
l’exemple ci-dessous, on extrait successivement les éléments
1, 4 et 5, puis les éléments de 1 à 3 et enfin les éléments 1,
2,3 et 5.
> w[c(1, 4, 5)]
[1] 1 4 2
> w[1:3]
[1] 1 2 3
> w[c(1:3, 5)]
[1] 1 2 3 2
Dans tous les cas, on indique entre crochets un vecteur dans
lequel figurent les indices des éléments du vecteur initial que
l’on souhaite sélectionner.
On peut également indiquer entre crochets un vecteur
logique de même longueur que le vecteur d’intérêt. Dans ce
cas, seront extraits les éléments du vecteur pour lesquels les
éléments du vecteur logique correspondant sont vrais.
> w > 3
[1] FALSE FALSE FALSE TRUE FALSE TRUE TRUE
> w[w > 3]
[1] 4 6 4
> w == 2
[1] FALSE TRUE FALSE FALSE TRUE FALSE FALSE
> w[w == 2]
[1] 2 2
Numéro 83 / Mai 2006
L’expression w>3 crée un vecteur logique
de même longueur que w dont les valeurs
sont vraies si l’élément correspondant de
w est supérieur à 3. De la même manière,
w==2 crée un vecteur logique dont les
valeurs sont vraies pour les éléments de
w égaux à 2. w[w>3] et w[w==2] extraient
respectivement du vecteur w un vecteur
contenant les valeurs de w supérieures à 3
et égales à 2.
On peut également nommer les éléments d’un
vecteur en ajoutant un attribut supplémentaire,
les noms, à ce vecteur.
> x <- c(1, 4, 3, 8)
> names(x) <- c(«dupont», «durand», «martin», «jourdain»)
> x
dupont durand martin jourdain
1
4
3
8
La commande attributes(x) permet
d’imprimer les attributs de x. On vérifie
que cet objet est bien doté d’un attribut
supplémentaire appelé names.
Une dernière méthode d’extraction consiste
à indiquer entre crochets un vecteur de
noms.
> x[c(«dupont», «martin»)]
dupont martin
1
3
1.2 Les tableaux et les
matrices
Un tableau (array) est un vecteur qui
dispose d’un attribut supplémentaire, la
dimension.
Une matrice (matrix) est un tableau à deux
dimensions. Les différentes commandes
ci-dessous permettent d’obtenir la même
matrice.
> x = 1:9
> dim(x) = c(3, 3)
> x
[1,]
[2,]
[3,]
[,1] [,2] [,3]
1
4
7
2
5
8
3
6
9
> mode(x)
[1] «numeric»
> class(x)
[1] “matrix”
> x = 1:9
> matrix(x, 3, 3)
[,1] [,2] [,3]
[1,]
1
4
7
[2,]
2
5
8
[3,]
3
6
9
> matrix(x, 3, 3, byrow = T)
[,1] [,2] [,3]
89
sciences/techno
statistiques
[1,]
[2,]
[3,]
1
4
7
2
5
8
3
6
9
Dans le premier cas, on ajoute au vecteur x
un attribut dim. On obtient alors une matrice
3X3. Le mode de x est toujours numeric.
En revanche, la classe de x est désormais
une matrice.
Dans le second cas, on utilise la fonction
matrix qui a pour arguments les éléments
de la matrice, le nombre de lignes et le
nombre de colonnes (et éventuellement
byrow qui est FALSE par défaut et qui indique
si la matrice doit être remplie ligne par ligne
ou colonne par colonne).
On peut ensuite appliquer aux matrices
différentes opérations. +,-,/,* réalisent
des opérations élément par élément. La
multiplication matricielle est réalisée au
moyen de l’opérateur %*%.
La transposition et l’inverse de la matrice x
s’écrivent respectivement t(x) et solve(x).
Comme pour les vecteurs, on peut attribuer
des noms aux lignes et aux colonnes d’une
matrice, à l’aide des fonctions rownames et
colnames.
> attributes(z)
$levels
[1] «jamais» «rarement» «souvent»
$class
[1] «factor»
1.4 Les listes et les data.frame
Une liste permet de stocker dans un objet un ensemble d’objets
qui peuvent être de modes et de longueurs différentes.
> logic <- c(F, T, T, F, F, T)
> char <- c(«bonjour», «aurevoir»)
> num <- 4
> z <- list(logic, char, num)
> class(z)
[1] “list”
On peut extraire les différents éléments de la liste en indiçant
celle-ci entre crochets. De simples crochets définissent une
sous-liste, des crochets doubles rétablissent la classe de
l’élément concerné.
> z[c(1, 3)]
[[1]]
[1] FALSE TRUE TRUE FALSE FALSE TRUE
[[2]]
[1] 4
> x <- matrix(1:9, 3, 3)
> z[2]
[[1]]
[1] “bonjour” “aurevoir”
> rownames(x) <- c(«un», «deux», «trois»)
> class(z[2])
[1] «list»
> colnames(x) <- c(«a», «b», «c»)
> z[[2]]
[1] “bonjour” “aurevoir”
> x
> class(z[[2]])
[1] «character»
a
un
1
deux 2
trois 3
b
4
5
6
c
7
8
9
1.3 Les facteurs
Un facteur est un vecteur avec un attribut
supplémentaire, les niveaux (levels). Il
permet de définir une variable catégorielle,
en utilisant la commande factor.
> x <- c(1, 2, 2, 1, 0, 2, 1, 0)
> z <- factor(x)
> z
[1] 1 2 2 1 0 2 1 0
Levels: 0 1 2
> attributes(z)
$levels
[1] “0” “1” “2”
$class
[1] “factor”
On peut également donner un nom plus
explicite aux niveaux de la variable en
utilisant l’argument labels.
90
> z <- factor(x, labels = c(«jamais», «rarement», «souvent»))
Les listes peuvent être plus aisément manipulées si leurs
différents éléments sont nommés. On peut alors extraire
un élément de z en utilisant le nom de cet élément préfixé
de z$.
> names(z) <- c(«a», «b», «c»)
> z$a
[1] FALSE TRUE TRUE FALSE FALSE TRUE
On peut aussi nommer les éléments de la liste au moment
de sa création au moyen de la commande suivante :
> z <- list(a = logic, b = char, c = num)
Un tableau de données (data.frame) est une liste qui contient
un ensemble de vecteurs ayant tous la même longueur (mais
pas forcément le même mode). C’est le format d’objet que
l’on utilise pour stocker des données.
> nom <- c(«durand», «dupont», «dupond», «martin», «pinault»,
«vaillant»)
> marie <- c(T, F, T, T, F, F)
> age <- c(40, 28, 41, 58, 35, 32)
> csp <- c(«artisan», «ouvrier», «ouvrier», «employé», «artisan»,
+
«artisan»)
 GNU Linux Magazine France
R : Programmer avec des données
> base <- list(nom = nom, marie = marie, age = age, csp = csp)
> base
$nom
[1] «durand» «dupont» «dupond» «martin» «pinault» «vaillant»
$marie
[1] TRUE FALSE TRUE TRUE FALSE FALSE
$age
[1] 40 28 41 58 35 32
$csp
[1] “artisan” “ouvrier” “ouvrier” “employé» «artisan» «artisan»
> base$marie
[1] TRUE FALSE TRUE TRUE FALSE FALSE
Un tableau de données peut être obtenu à partir de la
fonction data.frame, qui prend pour argument une liste ou
un ensemble de vecteurs.
> summary(cars)
speed dist
Min. : 4.0 Min. : 2.00
1st Qu.:12.0 1st Qu.: 26.00
Median :15.0 Median : 36.00
Mean :15.4 Mean : 42.98
3rd Qu.:19.0 3rd Qu.: 56.00
Max. :25.0 Max. :120.00
Pour visualiser la distribution de la variable de
distance (dist) au moyen d’un histogramme,
on utilise la commande hist :
> hist(cars$dist)
> base2 <- data.frame(base)
> class(base2)
[1] “data.frame”
> base2
nom marie
1 durand TRUE
2 dupont FALSE
3 dupond TRUE
4 martin TRUE
5 pinault FALSE
6 vaillant FALSE
age
40
28
41
58
35
32
csp
artisan
ouvrier
ouvrier
employé
artisan
artisan
Notons que les tableaux de données, contrairement aux
listes ordinaires, sont dotés d’une méthode d’impression
tabulaire.
1.5 Les fonctions de regroupement
La fonction table permet d’obtenir une table de fréquence
pour une variable catégorielle.
> table(base2$csp)
artisan employé ouvrier
3
1
2
La fonction tapply permet d’appliquer une opération à
une variable numérique, conditionnellement à une variable
catégorielle. Par exemple, pour connaître l’âge moyen dans
notre échantillon selon la csp :
> tapply(base2$age, base2$csp, mean)
artisan employé ouvrier
35.66667 58.00000 34.50000
2. Un exemple d’utilisation de R
Nous utiliserons ici des données indiquant la vitesse (en
miles par heure) et la distance de freinage (en pieds) de
différentes voitures. Ces données sont fournies avec R, on
peut donc obtenir un data.frame appelé cars simplement
avec la commande :
> data(cars)
Comme les fonctions, les données disposent d’une aide en
ligne et on peut donc obtenir davantage d’informations sur
ces données avec la commande ?cars. Commençons par
afficher des statistiques descriptives :
Numéro 83 / Mai 2006
La relation entre les deux variables peut être
appréhendée par une droite de régression
linéaire.
Le calcul des paramètres de la droite est
réalisé à l’aide de la fonction lm. x où print(x)
indique des résultats sommaires sur le
modèle estimé, la commande summary(x)
calcule (et imprime si ces résultats ne sont
pas stockés dans un objet) des résultats
détaillés sur le modèle.
> x = lm(dist ~ speed, data = cars)
> print(x)
Call:
lm(formula = dist ~ speed, data = cars)
Coefficients:
(Intercept)
speed
-17.579 3
.932
> summary(x)
Call:
lm(formula = dist ~ speed, data = cars)
Residuals:
Min
1Q Median
3Q
Max
-29.069 -9.525 -2.272 9.215 43.201
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -17.5791
6.7584 -2.601 0.0123 *
speed
3.9324
0.4155 9.464 1.49e-12 ***
---
91
sciences/techno
statistiques
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ‘ 1
Residual standard error: 15.38 on 48 degrees of freedom
Multiple R-Squared: 0.6511, Adjusted R-squared: 0.6438
F-statistic: 89.57 on 1 and 48 DF, p-value: 1.490e-12
Le premier argument de la commande
lm est une formule (formula). Il s’agit
d’une description symbolique du modèle
d’intérêt : « dist en fonction de speed »
s’écrit dist~speed.
Le second argument est le tableau de données
contenant les données. Le résultat est
stocké dans un objet x de classe lm. Il s’agit
d’une liste contenant différents résultats
du modèle.
On peut imprimer les différents éléments
de cette liste en tapant names(x) et extraire,
par exemple, les paramètres de la droite
de régression linéaire avec la commande
x$coefficients.
Notons l’utilisation de la commande summary :
il s’agit d’une fonction générique permettant
d’obtenir un résumé de l’objet indiqué en
argument. Son comportement s’adapte au
type d’objet considéré.
On a vu précédemment que s’il s’agit d’un
data.frame, elle calcule des statistiques
descriptives alors qu’ici, elle calcule différents
indicateurs statistiques concernant le
modèle estimé. Les résultats indiquent
qu’une augmentation de 1 mile par heure
de la vitesse se traduit en moyenne par une
augmentation de la distance de freinage de
3.9 pieds. Cette relation peut également
être visualisée à l’aide d’un graphique de
type (x,y) :
De nombreux paramètres peuvent être spécifiés pour
personnaliser un graphique, soit à l’aide de la commande par
(modification globale des paramètres), soit en argument de la
commande graphique (modification locale). Des renseignements
peuvent être obtenus sur les différents paramètres graphiques
en affichant la page d’aide de par.
La figure ci-dessous présente le résultat de l’utilisation
de différents paramètres graphiques : un fond bleu clair
(par(bg=»lightsteelblue»)), des axes « en L » (bty) un titre
principal et pour les axes (main, xlab et ylab), des étiquettes
positionnées verticalement (las), des points en diamant
(pch), des tailles de caractères personnalisées (cex.main et
cex.lab), etc.
> par(bg = «lightsteelblue»)
> plot(dist ~ speed, data = cars, bty = «l», main = «Distance et
vitesse»,
+ fg = «blue», xlab = «vitesse», ylab = «distance», las = 1,
+ pch = 9, col.lab = «navy», cex.main = 2, cex.lab = 1.5, xlim = c(0,
+ 25), xaxs = «i», ylim = c(0, 120), yaxs = «i»)
> abline(x, lty = «dashed», col = «sienna»)
> plot(dist ~ speed, data = cars)
La commande plot est une commande
graphique primaire, qui ouvre une nouvelle
fenêtre graphique. Des commandes graphiques
secondaires peuvent être utilisées, qui
permettent d’ajouter des éléments graphiques
supplémentaires sur le graphique existant.
Par exemple, la commande abline permet
de tracer une droite.
Différentes syntaxes sont possibles, par
exemple abline(1,2) trace une droite
d’ordonnée à l’origine égale à 1 et de pente
égale à 2. Cette commande peut également
avoir comme argument un objet renvoyé par
la commande lm. La droite de régression
est alors tracée.
> plot(dist ~ speed, data = cars)
> abline(x)
92
3. Programmer avec R
Pour illustrer la programmation avec R, nous reprenons le
même exemple que dans la section précédente. Nous voulons
écrire des fonctions qui permettent de calculer les coefficients
d’une droite de régression linéaire et d’afficher le nuage de
points et la droite de régression. En notant classiquement
y la variable expliquée et x la variable explicative, les deux
paramètres de la droite sont donnés par :
 GNU Linux Magazine France
R : Programmer avec des données
On obtient alors le code initial suivant :
> y <- cars$dist
> x <- cars$speed
> n <- length(y)
> xbar <- mean(x)
> ybar <- mean(y)
> b <- (sum(x * y) - n * xbar * ybar)/(sum(x^2) - n * xbar^2)
> a <- ybar - b * xbar
> c(a, b)
[1] -17.579095 3.932409
> plot(y ~ x)
> abline(a, b)
Listing 2 : La fonction mco avec attribut de classe
Listing 3 : Une fonction print pour mco
Listing 1 : La fonction mco
Le nombre de décimales imprimées peut être
contrôlé en utilisant la fonction round.
La version de la fonction print.mco présentée
dans le listing 4 utilise cette possibilité en
ajoutant en plus decimales comme argument
optionnel.
On utilise les fonctions lenght, mean et sum qui renvoient
respectivement la longueur, la moyenne et la somme des
éléments d’un vecteur. Les deux paramètres de la droite sont
ensuite rassemblés dans un vecteur et imprimés.
3.1 Écriture d’une fonction simple
Écrivons maintenant une fonction permettant de calculer les
paramètres de la droite (voir listing 1). L’objet res renvoyé
par la fonction est une liste.
> z <- mco(cars$dist, cars$speed)
> z
$a
[1] -17.57909
$b
[1] 3.932409
On constate que l’impression de z correspond à celui d’une
liste classique.
3.2 Classe et méthode générique
Pour obtenir une impression personnalisée, on peut créer
une classe pour l’objet renvoyé par la fonction mco et écrire
une méthode d’impression personnalisée.
Cette méthode sera écrite dans une fonction appelée print.
mco. Plus généralement, le nom de la fonction contenant une
méthode générique methode pour un objet de classe classe
s’appellera methode.classe. La nouvelle fonction mco est
présentée dans le listing 2.
La seule modification est qu’un attribut class est ajouté.
La fonction print.mco (listing 3) utilise la commande paste
afin de créer une chaîne de caractère à partir de chaînes de
caractère ou de variables numériques. La fonction cat permet
d’imprimer une chaîne de caractère (la chaîne \n correspond
à un retour à la ligne).
Numéro 83 / Mai 2006
Listing 4 : Une fonction print pour mco (2)
On vérifie que z ou print(z) réalisent
l’impression par défaut (3 chiffres après la
virgule) alors que print(z,decimales=5)
affiche les paramètres avec 5 décimales.
> z <- mco(cars$dist, cars$speed)
> z
ordonnee à l’origine : -17.579
pente : 3.932
> print(z, decimales = 5)
ordonnee à l’origine : -17.57909
pente : 3.93241
plot est au même titre que print une
fonction générique. On peut donc écrire
une méthode graphique spécifique pour les
objets de classe mco.
Cependant, si l’on souhaite que sur ce
graphique figure le nuage de point, il est
nécessaire de redéfinir l’objet mco, puisqu’il
ne contient pour l’instant que les paramètres
de la droite.
93
sciences/techno
statistiques
> z
moyennes de x et de y : 15.4 et 42.98
ordonnee à l’origine : -17.579
pente
: 3.932
On peut désormais écrire la fonction graphique, présentée
dans le listing 7. Notons l’utilisation de .... Cela permet
d’utiliser dans la fonction plot des arguments supplémentaires
permettant de personnaliser le graphique. Par exemple, pour
modifier les points et ajouter un titre, on pourra utiliser :
Listing 5 : Fonction mco renvoyant les données et les paramètres
> plot(z, pch = 10, main = «distance et vitesse»)
Listing 6 : Une fonction print pour mco (3)
Listing 7 : Une fonction plot pour mco
Un objet de classe mco sera désormais
une liste de deux listes, l’une contenant les
paramètres estimés, l’autre les données
(voir listing 5).
On a également ajouté un attribut à cet
objet, les moyennes des deux variables. La
fonction print doit prendre en compte ces
modifications de structure (voir listing 6).
Nous lui ajoutons l’impression des moyennes
des deux variables.
> z <- mco(cars$dist, cars$speed)
> z$param
$a
[1] -17.57909
$b
[1] 3.932409
> z$donnees$x[1:5]
[1] 4 4 7 7 8
> attr(z, “moyennes”)
$xbar
[1] 15.4
$ybar
[1] 42.98
94
3.3 Écrire une fonction générique
La fonction mco prend pour arguments deux vecteurs, la
variable expliquée et la variable explicative. Avec R, il est en
général préférable lorsque l’on programme un estimateur
d’utiliser une formule (y~x).
Nous souhaitons désormais étendre les possibilités de la
fonction mco de manière à ce qu’elle permette d’utiliser comme
argument soit une formule, soit deux vecteurs. L’idée est de
commencer par écrire une fonction spécifique qui permet de
traiter correctement le cas où le premier argument de mco
est une formule, d’extraire de la formule x et y et d’utiliser
ensuite la fonction mco initiale.
mco est désormais une fonction générique (voir listing 8), dont
le comportement s’adapte à la classe de son premier argument :
s’il s’agit d’une formule, c’est la fonction mco.formula qui est
appelée, sinon il s’agit de la fonction mco.default. Détaillons
les différentes lignes de la fonction mco.formula :
 mf <- model.frame(x,data=data) : la fonction model.frame
prend comme argument une formule et un tableau de
données. Elle renvoie un tableau de données contenant
toutes les variables nécessaires pour utiliser la formule.
 t m <- attr(mf,»terms») : l’attribut terms de mf est extrait
: il contient toutes les informations nécessaires sur les
 GNU Linux Magazine France
R : Programmer avec des données
Listing 8 : Une fonction mco générique
variables explicatives (classe de ces variables, effets
interactifs etc.).
 y <- model.response(mf) : cette fonction prend pour
argument un objet model.frame et renvoie un vecteur
contenant la variable expliquée.
 x <- model.matrix(tm,mf)[,2] : la fonction model.matrix
prend pour argument deux objets terms et model.frame
et renvoie la matrice des variables explicatives. Celle-ci
est ici composée de deux colonnes : un vecteur de 1
(par défaut, une constante est ajoutée à la formule) et la
variable d’intérêt. On sélectionne ici la seconde colonne
de cette matrice.
 r es <- mco(y,x) : on appelle la fonction mco avec comme
arguments deux vecteurs. C’est donc la fonction mco.
default qui est utilisée.
On vérifie ci-dessous que les deux syntaxes sont désormais
acceptées :
> mco(dist ~ speed, data = cars)
moyennes de x et de y : 15.4 et 42.98
ordonnee à l’origine : -17.579
pente
: 3.932
> mco(cars$dist, cars$speed)
moyennes de x et de y : 15.4 et 42.98
ordonnee à l’origine : -17.579
pente
: 3.932
4. Pour aller plus loin
L
e document de Pascal Paradis « R pour les débutants »,
cité en introduction, présente en détail les éléments
essentiels du langage R.
 Il existe de nombreux livres (en anglais) concernant S ou R.
On trouvera les références de ces ouvrages en suivant les
liens Documentation Books sur le site de R. S Programming
Numéro 83 / Mai 2006
de W.N. Venables et B.D. Ripley (2000,
éditions Springer) est particulièrement
intéressant pour une utilisation avancée
de R.
 Les pages d’aide des fonctions contiennent
une rubrique examples. On peut apprendre
beaucoup en évaluant ces exemples et en
analysant le résultat, en particulier pour
les commandes graphiques.
L
e lien CRAN Packages permet d’accéder
à la liste des librairies écrites par des
utilisateurs qui permettent d’accroître les
possibilités de R. Il y a plusieurs moyens
d’installer des librairies. Par exemple, si
l’on dispose d’une connexion internet,
l’installation de la librairie abind, peut être
obtenue en lançant R d’un terminal en
tant que super-utilisateur et en entrant la
commande library.install(abind). Une
fois que la librairie est installée, on accède
à ses fonctionnalités avec la commande
library(abind).
R
dispose de fonctionnalités permettant
de l’utiliser avec LaTeX. En particulier, un
graphique peut être sauvegardé au format
postscript pour une insertion ultérieure
dans un document LaTeX à l’aide de la
commande suivante :
postscript(«mongraphique.ps»)
plot(...
dev.off()
La librairie xtable permet de transformer
un tableau issu de R en un tableau au format
LATEX ou html.
Enfin, Sweave (voir ?Sweave) permet de
rassembler dans un même document le code
R et les commentaires en LaTeX.
R
dispose également de librairies (RMySQL
et RSQLite) permettant d’interfacer les
systèmes de gestion de bases de données
MySQL et SQLite. On peut alors lancer
une requête à partir de R et récupérer les
résultats dans un tableau de données.

note
*Titre de l’ouvrage de référence sur le
langage S : Programming with data de John
Chambers.
Yves Croissant,
95
Téléchargement