Uso di ~ (tilde) nel linguaggio di programmazione R


187

Ho visto in un tutorial sulla modellazione della regressione il seguente comando:

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

Cosa fa esattamente questo comando e qual è il ruolo di ~(tilde) nel comando?


Vuoi condividere il link al tutorial? Sembra interessante.
cheesus,

1
@cheeesus ... Stavo attraversando il data mining di ebook in R con case study ... lì puoi trovare molti altri esempi così interessanti.
Ankita,

Risposte:


193

La cosa a destra di <-è un formulaoggetto. Viene spesso usato per indicare un modello statistico, in cui la cosa a sinistra della ~è la risposta e le cose a destra della ~sono le variabili esplicative. Quindi in inglese diresti qualcosa del tipo "Le specie dipendono da Lunghezza sepale, Larghezza sepale, Lunghezza petalo e Larghezza petalo" .

La myFormula <-parte di quella riga memorizza la formula in un oggetto chiamato in myFormulamodo da poterla utilizzare in altre parti del codice R.


Altri usi comuni degli oggetti formula in R

Il latticepacchetto li usa per specificare le variabili da tracciare .
Il ggplot2pacchetto li utilizza per specificare i pannelli per la stampa .
Il dplyrpacchetto li usa per l'evaulazione non standard .



La sezione "formule" della lazyevalvignetta offre una buona introduzione a ciò che è una formula
RobinL

82

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")ti insegnerà di più.

@Spacedman ha trattato le basi. Discutiamo come funziona.

Innanzitutto, essendo un operatore, nota che si tratta essenzialmente di un collegamento a una funzione (con due argomenti):

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

Ciò può essere utile da sapere, ad esempio apply, per i comandi familiari.

In secondo luogo, puoi manipolare la formula come testo :

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

Terzo, puoi manipolarlo come un elenco :

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

Infine, ci sono alcuni trucchi utili con le formule (vedi help("formula")di più):

myFormula <- Species ~ . 

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


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

9
@Ankita, "non ancora utilizzato" in questo contesto significa non riferito. In Species~., la specie è l'unica variabile che è stata utilizzata. Pertanto, dipende da ogni altra variabile in data.frame.
x4nd3r

Non capisco myFormula <- Species ~ . . Quando il punto sarà ancora sostituito con variabili da data.frame? Potresti fornire un esempio
srghma
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.