224 votes

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

J'ai vu dans un tutoriel sur la modélisation par 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 la ~ (tilde) dans la commande ?

0 votes

Vous pouvez partager le lien vers le tutoriel ? Cela semble intéressant.

1 votes

@cheeesus...J'ai parcouru l'ebook data mining in R with case studies...vous pouvez y trouver beaucoup d'autres exemples aussi intéressants.

228voto

Spacedman Points 33792

La chose à droite de <- est un objet "formule". Il est souvent utilisé pour désigner un modèle statistique, où la chose située à gauche de l'objet "formule" est un objet de type "formule". ~ est la réponse et les choses à droite de la ~ sont les variables explicatives. En anglais, vous diriez donc quelque chose comme "Species depends on Sepal Length, Sepal Width, Petal Length and Petal Width".

Ce n'est pas la seule utilisation des objets de formule dans R. Certaines fonctions les utilisent simplement pour spécifier les colonnes d'un cadre de données.

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

Pour en savoir plus, lisez help(formula) ou toute autre documentation R de base sur la modélisation linéaire.

1 votes

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

0 votes

La section "formules" de l'application lazyeval vignette donne une bonne introduction à ce qu'est une formule

92voto

Ari B. Friedman Points 24940

R définit un ~ (tilde) à utiliser dans les formules. Les formules ont toutes sortes d'utilisations, mais la plus courante est sans doute celle de la régression :

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

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

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

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

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

Il peut être utile de le savoir pour l'utiliser, par exemple, dans les cas suivants apply les commandes de la famille.

Deuxièmement, vous pouvez manipuler la formule en tant que texte :

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

Troisièmement, vous pouvez le manipuler en tant que liste :

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

Enfin, il existe quelques astuces utiles avec les formules (voir help("formula") pour en savoir plus) :

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

0 votes

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

9 votes

@Ankita, "non encore utilisé" dans ce contexte signifie non référencé. Dans Species~. L'espèce est la seule variable qui a été utilisée. Par conséquent, elle dépend de toutes les autres variables du data.frame.

0 votes

Je ne comprends pas. myFormula <- Species ~ . . Quand le point peut encore être remplacé par des variables provenant de data.frame ? Pourriez-vous fournir un exemple

6voto

ashraful16 Points 2132

En un mot,

The tilde (~) separates the left side of a formula with the right side of the formula.

Par exemple, dans une fonction linéaire, il séparerait la variable dépendante des variables indépendantes et peut être interprété comme disant "en fonction de". Ainsi, lorsque le salaire d'une personne (wages) est fonction de ses années d'études (years_of_education), nous faisons quelque chose comme,

wages ~ years_of_education

Ici,

 Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width

Ça veut dire, Species est une fonction de Sepal Length, Sepal Width, Petal Length and Petal Width .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X