Verwendung von ~ (Tilde) in der Programmiersprache R.

187

In einem Tutorial zur Regressionsmodellierung habe ich den folgenden Befehl gesehen:

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

Was genau macht dieser Befehl und welche Rolle spielt ~(Tilde) im Befehl?

Ankita
quelle
Möchten Sie den Link zum Tutorial teilen? Klingt interessant.
Cheesus
1
@cheeesus ... Ich habe das E-Book-Data-Mining in R mit Fallstudien durchlaufen ... dort finden Sie viele weitere interessante Beispiele.
Ankita

Antworten:

193

Das Ding rechts von <-ist ein formulaObjekt. Es wird oft verwendet, um ein statistisches Modell zu bezeichnen, bei dem das Ding links von ~der Antwort und das Ding rechts von ~die erklärenden Variablen sind. Auf Englisch würde man also so etwas wie "Arten hängen von der Länge der Kelchblätter, der Breite der Kelchblätter, der Länge der Blütenblätter und der Breite der Blütenblätter ab" sagen .

Der myFormula <-Teil dieser Zeile speichert die Formel in einem aufgerufenen Objekt, myFormuladamit Sie sie in anderen Teilen Ihres R-Codes verwenden können.


Andere häufige Verwendungen von Formelobjekten in R.

Das latticePaket verwendet sie, um die zu plottenden Variablen anzugeben .
Das ggplot2Paket verwendet sie, um Panels zum Plotten anzugeben .
Das dplyrPaket verwendet sie für nicht standardmäßige Auswertungen .

Spacedman
quelle
1
Für eine etwas ausführlichere Diskussion: stackoverflow.com/questions/8055508/the-tilde-operator-in-r/…
IRTFM
Der Abschnitt 'Formeln' der lazyevalVignette gibt eine gute Einführung in eine Formel
RobinL
82

R definiert einen ~(Tilde-) Operator zur Verwendung in Formeln. Formeln haben alle möglichen Verwendungszwecke, aber die häufigste ist die Regression:

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

help("~")oder help("formula")wird dir mehr beibringen.

@Spacedman hat die Grundlagen abgedeckt. Lassen Sie uns diskutieren, wie es funktioniert.

Beachten Sie als Operator zunächst, dass es sich im Wesentlichen um eine Verknüpfung zu einer Funktion handelt (mit zwei Argumenten):

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

Dies kann hilfreich sein, um z apply. B. Familienbefehle zu verwenden.

Zweitens können Sie die Formel als Text bearbeiten :

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

Drittens können Sie es als Liste bearbeiten :

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

Schließlich gibt es einige hilfreiche Tricks mit Formeln (siehe help("formula")mehr):

myFormula <- Species ~ . 

Die obige Version ist beispielsweise dieselbe wie die Originalversion, da der Punkt "alle Variablen, die noch nicht verwendet wurden" bedeutet. Dabei wird der data.frame betrachtet, den Sie in Ihrem eventuellen Modellaufruf verwenden, welche Variablen im data.frame vorhanden sind, aber in Ihrer Formel nicht explizit erwähnt werden, und der Punkt wird durch diese fehlenden Variablen ersetzt.

Ari B. Friedman
quelle
Vielen Dank für die Antwort @Ari B. Friedman, aber die letzte Zeile ist etwas mehrdeutig, wenn Sie sagen, dass "Punkt" alle noch nicht verwendeten Variablen bedeutet ". Wenn Sie es weiter veranschaulichen könnten.
Ankita
9
@Ankita, "noch nicht verwendet" bedeutet in diesem Zusammenhang nicht bezeichnet. In Species~.ist Spezies die einzige Variable, die verwendet wurde. Daher hängt es von jeder anderen Variablen im data.frame ab.
x4nd3r
Das verstehe ich nicht myFormula <- Species ~ . . Wann wird der Punkt noch durch Variablen aus data.frame ersetzt? Könnten Sie ein Beispiel geben
srghma