Uso de ~ (tilde) en lenguaje de programación R

187

Vi en un tutorial sobre el modelo de regresión el siguiente comando:

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

¿Qué hace exactamente este comando y cuál es el papel de ~(tilde) en el comando?

Ankita
fuente
¿Te gustaría compartir el enlace al tutorial? Suena interesante.
cheesus
1
@cheeesus ... Estaba revisando la minería de datos de libros electrónicos en R con estudios de casos ... allí puedes encontrar muchos más ejemplos tan interesantes.
Ankita

Respuestas:

193

La cosa a la derecha de <-es un formulaobjeto. A menudo se usa para denotar un modelo estadístico, donde la cosa a la izquierda de ~la respuesta es la respuesta y las cosas a la derecha de la~ variable explicativa. Entonces, en inglés, diría algo como "La especie depende de la longitud del sepal, el ancho del sepal, la longitud del pétalo y el ancho del pétalo" .

los myFormula <- parte de esa línea almacena la fórmula en un objeto llamado myFormulapara que pueda usarla en otras partes de su código R.


Otros usos comunes de objetos de fórmula en R

El latticepaquete los usa para especificar las variables a trazar .
El ggplot2paquete los usa para especificar paneles para el trazado .
El dplyrpaquete los usa para la evacuación no estándar .

Hombre espacial
fuente
1
Para una discusión un poco más expansiva: stackoverflow.com/questions/8055508/the-tilde-operator-in-r/…
IRTFM
La sección 'fórmulas' de la lazyevalviñeta ofrece una buena introducción a lo que es una fórmula
RobinL
82

R define un ~operador (tilde) para usar en fórmulas. Las fórmulas tienen todo tipo de usos, pero quizás el más común es para la regresión:

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

help("~")o help("formula")te enseñaré más.

@Spacedman ha cubierto los conceptos básicos. Discutamos cómo funciona.

Primero, al ser un operador, tenga en cuenta que es esencialmente un acceso directo a una función (con dos argumentos):

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

Puede ser útil saberlo para usar, por ejemplo, en applycomandos familiares.

En segundo lugar, puede manipular la fórmula como texto :

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

Tercero, puedes manipularlo como una lista :

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

Finalmente, hay algunos trucos útiles con fórmulas (ver help("formula")más):

myFormula <- Species ~ . 

Por ejemplo, la versión anterior es la misma que la versión original, ya que el punto significa "todas las variables aún no utilizadas". Esto examina el data.frame que usa en su eventual modelo de llamada, ve qué variables existen en el data.frame pero no se mencionan explícitamente en su fórmula, y reemplaza el punto con esas variables faltantes.

Ari B. Friedman
fuente
Gracias por la respuesta @Ari B. Friedman, pero la última línea es un poco ambigua donde dices 'punto significa "todas las variables aún no utilizadas". Si pudieras ilustrarlo más.
Ankita
9
@Ankita, "aún no utilizado" en este contexto significa que no se hace referencia a él. En Species~., especie es la única variable que se ha utilizado. Por lo tanto, depende de cualquier otra variable en el data.frame.
x4nd3r
No entiendo myFormula <- Species ~ . . Cuando el punto todavía se sustituye con variables de data.frame? ¿Podría dar un ejemplo
Srghma