L'opérateur tilde est en fait une fonction qui renvoie une expression non évaluée, un type d'objet du langage. L'expression est ensuite interprétée par les fonctions de modélisation d'une manière différente de l'interprétation des opérateurs opérant sur des objets numériques.
Le problème ici est comment et plus particulièrement les opérateurs "+", " :" et "^" qu'elles contiennent sont interprétés. (Remarque : la procédure statistique correcte serait d'utiliser la fonction poly
lorsqu'on tente de faire des termes d'ordre supérieur dans une formule de régression). Dans les formules R, les opérateurs infixes "+", "*", " :" et "^" ont des significations totalement différentes de celles utilisées dans les calculs avec des vecteurs numériques. Dans une formule, le tilde ( ~
) sépare le côté gauche du côté droit. Le site ^
y :
Les opérateurs sont utilisés pour construire des interactions de sorte que x
= x^2
= x^3
plutôt que de devenir des pouvoirs mathématiques peut-être attendus. (Une variable qui interagit avec elle-même est tout simplement la même variable.) Si vous aviez tapé (x+y)^2
l'interpréteur R aurait produit (pour son propre usage interne), pas un mathématique : x^2 +2xy +y^2
mais plutôt un symbole : x + y +x:y
donde x:y
est un terme d'interaction sans ses effets principaux. (Le ^
vous donne à la fois les effets principaux et les interactions).
?formula
El I()
agit pour convertir l'argument en "tel quel", c'est-à-dire ce que vous attendez. Ainsi, I(x^2) renverrait un vecteur de valeurs élevé à la deuxième puissance.
El ~
doit être considéré comme signifiant "est distribué comme" ou "dépend de" dans les fonctions de régression. Le site ~
est une fonction infixe à part entière. Vous pouvez constater que LHS ~ RHS
est presque un raccourci pour formula(LHS, RHS)
en tapant ceci à la console :
`~`(LHS,RHS)
#LHS ~ RHS
class( `~`(LHS,RHS) )
#[1] "formula"
identical( `~`(LHS,RHS), as.formula("LHS~RHS") )
#[1] TRUE # cannot use `formula` since it interprets its first argument
Dans les fonctions de régression, le terme d'erreur dans les descriptions de modèles sera sous la forme présumée par la fonction de régression ou spécifiquement demandée dans les paramètres de la fonction de régression. family
. La moyenne pour le niveau de base sera généralement étiquetée (Intercept)
. Le contexte et les arguments de la fonction peuvent également déterminer une fonction de liaison, telle que log() ou logit(), à partir de l'ensemble des données de la fonction. family
et il est également possible d'avoir une combinaison famille/lien non canonique.
Le symbole "+" dans une formule n'ajoute pas vraiment deux variables mais est généralement une demande implicite de calculer un ou plusieurs coefficients de régression pour cette variable dans le contexte du reste des variables qui sont sur la droite de la formule. Les fonctions de régression utilisent `model.matrix et cette fonction reconnaît la présence de facteurs ou de vecteurs de caractères dans la formule et construit une matrice qui développe les niveaux des composants discrets de la formule.
Dans les fonctions de plot()-ting, il s'agit essentiellement d'inverser l'habituel ( x, y )
ordre des arguments que la fonction de traçage prend habituellement. Une méthode plot.formula a été écrite pour que les formules puissent être utilisées comme un mode de communication plus "mathématique" avec R. Dans la méthode graphics::plot.formula
, curve
et les fonctions "lattice" et "ggplot", elle régit la manière dont les facteurs multiples ou les vecteurs numériques sont affichés et "facettés".
La surcharge de l'opérateur "+" est discutée dans les commentaires ci-dessous et est également effectuée dans les paquets de traçage : ggplot2 et gridExtra où il sépare les fonctions qui fournissent des résultats d'objets. Là, il agit comme un opérateur de passage et de superposition. Certaines fonctions d'agrégation ont une méthode de formule qui utilise "+" comme opérateur d'arrangement et de regroupement.
8 votes
Toute excellente réponse à cette question s'appuiera largement sur ce qui est contenu dans
?formula
.0 votes
Duplicata ; nous devrions fermer l'un d'entre eux et rendre l'autre canonique : Que signifie la lettre majuscule "I" dans la formule de régression linéaire R ?
0 votes
@smci : Vous avez peut-être raison. Cependant, aucun des deux n'a proposé l'utilisation statistiquement plus correcte de
poly
jusqu'à ce que je remarque cette omission flagrante dans ma réponse et que je l'inclue. C'est un point de vue tellement différent sur le sujet général des formules dans R que je vais ajouter une réponse séparée.0 votes
@IRTFM : ok alors puisque nous ne pouvons pas fermer l'ancien dans le plus récent, soit nous fermons cela dans ceci ou au moins laisser un commentaire là référençant cette question comme connexe/doublon
0 votes
Il existe une meilleure description des problèmes statistiques liés aux modèles polynomiaux dans les procédures de régression par @Achim Zeileis : stackoverflow.com/questions/29999900/