Zastosowanie ~ (tylda) w języku programowania R

187

Widziałem w samouczku o modelowaniu regresji następujące polecenie:

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

Co dokładnie robi to polecenie i jaka jest rola ~(tylda) w poleceniu?

Ankita
źródło
Chcesz udostępnić link do samouczka? Brzmi interesująco.
cheesus
1
@cheeesus ... Przechodziłem przez eksplorację danych ebook w R ze studiami przypadków ... tam można znaleźć wiele innych takich interesujących przykładów.
Ankita,

Odpowiedzi:

193

Rzecz po prawej <-to formulaprzedmiot. Jest często używany do oznaczenia modelu statystycznego, w którym rzecz po lewej ~to odpowiedź, a rzecz po prawej ~to zmienne objaśniające. Tak więc w języku angielskim można powiedzieć coś w rodzaju „Gatunek zależy od długości osobników, szerokości osobników, długości płatków i szerokości płatków” .

myFormula <-Częścią tej linii przechowuje formuła w obiekcie o nazwie myFormulawięc można go używać w innych częściach kodu R.


Inne typowe zastosowania obiektów formuł w języku R

latticePakiet używa ich do określenia zmiennych na działce . Pakiet używa ich do określenia panele do kreślenia . Pakiet używa ich do niestandardowych evaulation .
ggplot2
dplyr

Spacedman
źródło
1
Dla nieco bardziej ekspansywnej dyskusji: stackoverflow.com/questions/8055508/the-tilde-operator-in-r/…
IRTFM
Sekcja „formuły” lazyevalwiniety stanowi dobre wprowadzenie do formuły
RobinL
82

R definiuje ~operator (tylda) do użycia w formułach. Formuły mają wiele zastosowań, ale być może najczęstszym jest regresja:

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

help("~")lub help("formula")nauczy cię więcej.

@Spacedman omówił podstawy. Omówmy, jak to działa.

Po pierwsze, będąc operatorem, zauważ, że jest to zasadniczo skrót do funkcji (z dwoma argumentami):

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

Może to być przydatne w przypadku np apply. Poleceń rodzinnych.

Po drugie, możesz manipulować formułą jako tekstem :

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

Po trzecie, możesz nim manipulować jako listę :

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

Wreszcie, istnieje kilka pomocnych sztuczek z formułami (zobacz help("formula")więcej):

myFormula <- Species ~ . 

Na przykład powyższa wersja jest taka sama jak wersja oryginalna, ponieważ kropka oznacza „wszystkie zmienne jeszcze nieużywane”. Spogląda na ramkę data.frame, której używasz w ostatecznym wywołaniu modelu, widzi, które zmienne istnieją w data.frame, ale nie są wyraźnie wymienione w formule, i zastępuje kropkę tymi brakującymi zmiennymi.

Ari B. Friedman
źródło
Dzięki za odpowiedź @Ari B. Friedman, ale ostatni wiersz jest nieco dwuznaczny, gdy mówisz, że „kropka oznacza” wszystkie zmienne, które nie zostały jeszcze wykorzystane ”. Jeśli możesz to zilustrować dalej.
Ankita,
9
@Ankita, „jeszcze nieużywany” w tym kontekście oznacza, że ​​nie jest wymieniony. W Species~., gatunek jest jedyną zmienną, która została użyta. Dlatego zależy to od każdej innej zmiennej w pliku data.frame.
x4nd3r
Nie rozumiem myFormula <- Species ~ . . Kiedy kropka nadal jest zastępowana zmiennymi z data.frame? Czy możesz podać przykład
srghma