Utilisation de ~ (tilde) dans le langage de programmation R


196

J'ai vu dans un tutoriel sur la modélisation de régression la commande suivante:

myFormula <- Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

Que fait exactement cette commande et quel est le rôle de ~(tilde) dans la commande?


Vous souhaitez partager le lien vers le tutoriel? Ça semble intéressant.
cheesus

1
@cheeesus ... J'étais en train de parcourir l'exploration de données ebook dans R avec des études de cas ... vous pouvez y trouver beaucoup d'autres exemples intéressants.
Ankita

Réponses:


200

La chose à droite <-est un formulaobjet. Il est souvent utilisé pour désigner un modèle statistique, où l'élément à gauche de ~est la réponse et les éléments à droite de ~sont les variables explicatives. Donc, en anglais, vous diriez quelque chose comme "L'espèce dépend de la longueur du sépale, de la largeur du sépale, de la longueur du pétale et de la largeur du pétale" .

La myFormula <-partie de cette ligne stocke la formule dans un objet appelé myFormulaafin que vous puissiez l'utiliser dans d'autres parties de votre code R.


Autres utilisations courantes des objets formule dans R

Le latticepackage les utilise pour spécifier les variables à tracer .
Le ggplot2package les utilise pour spécifier des panneaux à tracer .
Le dplyrpackage les utilise pour une évacuation non standard .


1
Pour une discussion un peu plus approfondie: stackoverflow.com/questions/8055508/the-tilde-operator-in-r
...

La section `` formules '' de la lazyevalvignette donne une bonne introduction à ce qu'est une formule
RobinL

85

R définit un ~opérateur (tilde) à utiliser dans les formules. Les formules ont toutes sortes d'utilisations, mais la plus courante est peut-être la régression:

library(datasets)
lm( myFormula, data=iris)

help("~")ou help("formula")vous en apprendra plus.

@Spacedman a couvert les bases. Voyons comment cela fonctionne.

Tout d'abord, étant un opérateur, notez qu'il s'agit essentiellement d'un raccourci vers une fonction (avec deux arguments):

> `~`(lhs,rhs)
lhs ~ rhs
> lhs ~ rhs
lhs ~ rhs

Cela peut être utile à savoir pour une utilisation par exemple dans applyles commandes familiales.

Deuxièmement, vous pouvez manipuler la formule sous forme de texte :

oldform <- as.character(myFormula) # Get components
myFormula <- as.formula( paste( oldform[2], "Sepal.Length", sep="~" ) )

Troisièmement, vous pouvez le manipuler sous forme de liste :

myFormula[[2]]
myFormula[[3]]

Enfin, il existe quelques astuces utiles avec des formules (voir help("formula")pour plus d'informations):

myFormula <- Species ~ . 

Par exemple, la version ci-dessus est la même que la version originale, puisque le point signifie «toutes les variables non encore utilisées». Cela examine le data.frame que vous utilisez dans votre appel de modèle éventuel, voit quelles variables existent dans le data.frame mais ne sont pas explicitement mentionnées dans votre formule, et remplace le point par ces variables manquantes.


Merci pour la réponse @Ari B. Friedman mais la dernière ligne est un peu ambiguë où vous dites «point signifie« toutes les variables non encore utilisées »». Si vous pouviez l'illustrer davantage.
Ankita

9
@Ankita, "pas encore utilisé" dans ce contexte signifie non mentionné. En Species~., l'espèce est la seule variable qui a été utilisée. Par conséquent, cela dépend de toutes les autres variables du data.frame.
x4nd3r

Je ne comprends pas myFormula <- Species ~ . . Quand dot encore être remplacé par des variables de data.frame? Pourriez-vous donner un exemple
srghma
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.