2016-08-04 7 views
2

Sowohl geoms als auch stats können verwendet werden, um Diagramme in dem R-Paket ggplot2 zu erstellen, und sie ergeben oft ähnliche Ergebnisse (z. B. geom_area und stat_bin). Sie haben oft auch leicht unterschiedliche Argumente, z.B. in 2-D density plots:Was ist der Unterschied zwischen Geom und Statistik in ggplot2?

geom_density_2d (Mapping = NULL, Daten = NULL, stat = "density2d" Position = "Identität", ..., LineEnd = "butt", linejoin = "rund", linemitre = 1, na.rm = FALSE, show.legend = Na, inherit.aes = TRUE)

stat_density_2d (Mapping = NULL, Daten = NULL, geom = "density_2d" Position = "Identität", .. ., contour = TRUE, n = 100, h = NULL, na.rm = FALSE, show.legend = Na, inherit.aes = TRUE)

Gibt es grundlegende Unterschiede zwischen den beiden Arten von Objekten?

Antwort

7

Geome stehen für "geometrische Objekte". Dies sind die Kernelemente, die Sie in der Zeichnung sehen, Objekte wie Punkte, Linien, Flächen, Kurven.

Statistiken stehen für "statistische Transformationen". Diese Objekte fassen die Daten auf unterschiedliche Weise zusammen, z. B. das Zählen von Beobachtungen, das Erstellen einer Lösslinie, die am besten zu den Daten passt, oder das Hinzufügen eines Konfidenzintervalls zur Lösslinie.

Da Geome der "Kern" der Handlung sind, sind diese Objekte erforderlich. Auf der anderen Seite, Statistiken sind nicht erforderlich, um eine Handlung zu erzeugen, aber kann die endgültige Handlung erheblich verbessern.

Wie @ eipi10 in den Kommentaren bemerkt, sind diese Unterscheidungen etwas konzeptuell, da die Mehrheit der Geome vor der Aufzeichnung eine statistische Transformation erfährt. Diese umfassen geom_bar, geom_smooth und geom_quantile. Einige häufige Ausnahmen, bei denen die Daten in mehr oder weniger "roher" Form vorliegen, sind geom_point und geom_line und die weniger häufig verwendete geom_rug.

+7

AFAIK Statistiken und Geome gehen immer zusammen, aber jeder Geom hat einen Standard stat. Sie müssen also keine Statistik explizit angeben, aber die Statistik wird weiterhin benötigt. Wenn Sie sich die [ggplot help] (http://docs.ggplot2.org/current/) ansehen, können Sie sehen, welcher Status für jeden geom Standard ist. Sie können den Prozess auch umkehren und ein 'geom' innerhalb eines Aufrufs von' stat_xxx() 'angeben. Die meiste Zeit müssen Sie sich nicht um diese Details kümmern, aber es ist gut zu wissen, falls Sie das Standardverhalten ändern möchten. – eipi10

+4

Der wahrscheinlich häufigste Fall, in dem dies eine Rolle spielt, ist in 'geom_bar', wo standardmäßig Zeilen gezählt werden (der Standard stat für' geom_bar' ist 'stat_count'). Wenn Ihre Daten vorverdichtet sind, müssen Sie also stat = "identity" angeben, was bedeutet, dass die Rohdaten nicht umgewandelt werden. – eipi10

+3

Danke für den Link, ich werde eine Notiz hinzufügen, um dieses Gefühl hoffentlich besser zu bedecken. – lmo

7

Dies soll nur die angenommene Antwort ergänzen.

Laut Hadley Wickkam, dem Autor von ggplot2, in seinem Buch 'ggplot2: Elegante Grafik für die Datenanalyse' (link here) auf p. 91 von Abschnitt 5.2 'Erstellen einer Zeichnung Schicht für Schicht':

Sie müssen nur eine von stat und geom: jede geom hat eine Standardstatistik, und jede Statistik hat eine Standardgeom.

Die oben genannte Antwort erklärt gut, warum die beiden unterschiedlich sind. Dies soll erklären, warum sie in der Praxis schwierig zu unterscheiden sind - wenn Sie eine Geom-Ebene verwenden, verwenden Sie auch implizit eine Stat-Ebene (auch wenn es sich nur um die Identitätstransformation handelt). Wenn Sie eine Stat-Ebene verwenden, verwenden Sie ebenfalls implizit eine Geom-Ebene.

Wenn Sie mit den Standardwerten der beiden Layer zufrieden sind, wäre es überflüssig, beide Layer explizit anzugeben. Selbst wenn Sie mit den Standardeinstellungen der beiden Ebenen nicht zufrieden sind, können Sie die Standardeinstellungen als Parameter für jede Ebene ändern (dh Sie können die Standardgeometrie als Parameter für eine beliebige stat_*-Funktion ändern und den Standardstatus ändern als ein Parameter, der an eine beliebige geom_* Funktion übergeben wird).In den Worten von Hadley Wickham (gleiche Quelle wie oben):

können Sie passieren params in ... zu (in diesem Fall stat und geom Parameter werden automatisch gehänselt auseinander)

Dies ist eine Art schwer konzeptionell verstehen, weshalb ich auch diese Frage hatte. In seinem Artikel über die der ggplot2 zugrundeliegende Philosophie, found here, erläutert Hadley Wickham in Abschnitt 4, "Hierarchy of Defaults", die praktischen Überlegungen, die hinter diesem Standardverhalten stehen, was die Vereinfachung des Codes betrifft, der ansonsten unnötig lang wäre.

Zum Beispiel ohne Standardspezifikationen und mit der Grammatik von Grafiken allein, der Code für eine einfache Streudiagramm könnte wie folgt aussehen:

ggplot() + 
layer(
data = diamonds, mapping = aes(x = carat, y = price), 
geom = "point", stat = "identity", position = "identity" 
) + 
scale_y_continuous() + 
scale_x_continuous() + 
coord_cartesian() 

Standardwerte für die Waage und Koordinaten, wir etwas stattdessen schreiben wie:

ggplot(data = Diamonds, aes(x = carat, y = price)) + 
layer(
geom = "point", stat = "identity", position = "identity" 
) 

Aber das ist noch annoyingly lange natürlich, da die Werte von stat und position nur "identity" sind, whic h bedeutet grundsätzlich "tue nichts" - also warum muss ich das explizit sagen?

jedoch die layer() Funktion hat keine Standardwerte für stat oder position - sie müssen explizit auf die layer() Funktion in einem Aufruf angegeben werden.

Um dies zu umgehen, Hadley machte die geom_* Funktionen sowie die stat_* Funktionen wie wrappers an die layer() Funktion, die für Standardwerte haben sowohl die geom und stat Parameter. Der Unterschied zwischen den Funktionen stat_* und geom_* ist, welcher Parameter einen unveränderlichen (unveränderbar) Standardwert hat, stat oder geom.

Quelle: http://ggplot2.tidyverse.org/reference/layer.html

also die geom_* Funktionen können Sie den Standardwert des stat Parameter ändern, aber nicht der Standardwert des geom Parameter, während für die stat_* Funktionen können Sie den Standardwert des geom ändern Parameter, aber nicht der Standardwert des Parameters stat.

Eine Schicht ist eine Kombination aus Daten, Stat und Geom mit einer möglichen Positionseinstellung. Normalerweise werden Layer mit geom_* oder stat_* Aufrufen erstellt, können aber auch direkt mit dieser Funktion [layer() Funktion] erstellt werden.

+1

Vielen Dank für die Erklärung, dass die Funktionen 'stat_ *' und 'geom_ *' Wrapper sind, die sinnvolle Voreinstellungen für die Funktion 'layer()' liefern. Für mich war das der augenöffnendste Aspekt Ihrer Antwort. Meine Schüler werden Ihnen (indirekt) sehr dankbar sein :-) –

+0

Ein guter Punkt, um die innere Philosophie von ggplot zu erwähnen, das hilft zu verstehen, wie es funktioniert – cloudscomputes