2013-02-20 22 views
127

ho visto in un tutorial sulla regressione modellare il seguente comando:L'utilizzo di ~ (tilde) nella programmazione R Lingua

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

Che cosa fa esattamente questo comando fare, e qual è il ruolo di ~ (tilde) in il comando?

+0

Cura di condividere il collegamento all'esercitazione? Sembra interessante. – cheeesus

+1

@cheeesus ... Stavo esaminando il data mining di ebook in R con casi studio ... lì puoi trovare molti altri esempi così interessanti. – Ankita

risposta

145

L'elemento a destra di <- è un oggetto formula. Viene spesso utilizzato per indicare un modello statistico, in cui la cosa sulla sinistra di ~ è la risposta e le cose a destra dello ~ sono le variabili esplicative. Quindi in inglese diresti qualcosa come "Le specie dipendono dalla lunghezza di Sepal, dalla larghezza delle seppie, dalla lunghezza dei petali e dalla larghezza dei petali".

La parte myFormula <- della riga memorizza la formula in un oggetto denominato myFormula in modo da poterlo utilizzare in altre parti del codice R.


Altri usi comuni di oggetti in formula R

Il pacchetto lattice li utilizza per specify the variables to plot.
Il pacchetto ggplot2 li utilizza su specify panels for plotting.
Il pacchetto dplyr li utilizza per non-standard evaulation.

+0

Per una discussione leggermente più ampia: http://stackoverflow.com/questions/8055508/the-tilde-operator-in-r/8055683#8055683 –

+0

La sezione "formule" della vignetta ['lazyeval'] (https: //cran.r-project.org/web/packages/lazyeval/vignettes/lazyeval.html) fornisce una buona introduzione a cosa è una formula – RobinL

61

R definisce un operatore ~ (tilde) da utilizzare nelle formule. Le formule hanno tutti i tipi di usi, ma forse il più comune è per la regressione:

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

help("~") o help("formula") vi insegnerà più.

@Spacedman ha coperto le nozioni di base. Discutiamo di come funziona.

Innanzitutto, essendo un operatore, si noti che è essenzialmente una scorciatoia ad una funzione (con due argomenti):

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

Questo può essere utile sapere per uso in es apply comandi di famiglia.

In secondo luogo, è possibile manipolare la formula come testo:

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

In terzo luogo, si può manipolare come lista:

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

Infine, ci sono alcuni trucchi utili con formule (vedi help("formula") per ulteriori informazioni):

myFormula <- Species ~ . 

Ad esempio, la versione precedente è la stessa della versione originale, poiché il punto indica "tutte le variabili non ancora utilizzate". Questo guarda il data.frame che usi nella tua eventuale call del modello, vede quali variabili esistono nel data.frame ma non sono menzionate esplicitamente nella tua formula e sostituisce il punto con quelle variabili mancanti.

+0

Grazie per la risposta @ Ari B. Friedman ma l'ultima riga è un po 'ambigua dove dici "punto significa" tutte le variabili non ancora utilizzate "". Se tu potessi illustrarlo ulteriormente. – Ankita

+4

@Ankita, "non ancora usato" in questo contesto significa non riferito. In 'Specie ~ .', la specie è l'unica variabile che è stata utilizzata. Pertanto, dipende da ogni altra variabile nel data.frame. – voidHead