Ich versuche, eine Verteilung CDF mit R und ggplot2 plotten. Ich finde jedoch Schwierigkeiten beim Zeichnen der CDF-Funktion, nachdem ich die Y-Achse transformiert habe, um eine gerade Linie zu erhalten. Diese Art von Plot wird häufig in Gumbel Papier Plots verwendet, aber hier werde ich als Beispiel die Normalverteilung verwenden.ggplot Maßstab Transformation wirkt sich auf Punkte und Funktionen unterschiedlich
Ich erzeuge die Daten und plotten die kumulative Dichtefunktion der Daten zusammen mit der Funktion. Sie passen gut. Wenn ich jedoch eine Y-Achsen-Transformation anwende, passen sie nicht mehr.
sim <- rnorm(100) #Simulate some data
sim <- sort(sim) #Sort it
cdf <- seq(0,1,length.out=length(sim)) #Compute data CDF
df <- data.frame(x=sim, y=cdf) #Build data.frame
library(scales)
library(ggplot2)
#Now plot!
gg <- ggplot(df, aes(x=x, y=y)) +
geom_point() +
stat_function(fun = pnorm, colour="red")
gg
Und die Ausgabe etwas auf den Linien sein sollte: gut!
Jetzt versuche ich die Y-Achse entsprechend der verwendeten Verteilung zu transformieren.
#Apply transformation
gg + scale_y_continuous(trans=probability_trans("norm"))
Die Punkte korrekt umgewandelt werden (sie auf einer Geraden liegen), aber die Funktion ist es nicht!
Allerdings scheint alles in Ordnung zu arbeiten, wenn ich so tun, die CDF mit ggplot Berechnung:
ggplot(data.frame(x=sim), aes(x=x)) +
stat_ecdf(geom = "point") +
stat_function(fun="pnorm", colour="red") +
scale_y_continuous(trans=probability_trans("norm"))
Warum ist das passiert? Warum funktioniert die Berechnung der CDF nicht manuell mit Skalierungstransformationen?
Vielen Dank. Haben Sie eine Hypothese, warum die Verwendung von 'geom_ecdf()' auch ohne 'inherit.aes' funktioniert? – AF7
'stat_ecdf' hat keine ästhetische Vererbungsstruktur, die einzige Option ist das Überschreiben der Ebenenästhetik durch Überschreiben dieser Ebene. 'stat_function' hingegen _überlagert_ eine Funktion auf der Plot-Ebene und' inherit.aes = TRUE' (der Standardwert) wählt ästhetische Zuordnungen von der obersten Ebene des Plots aus. Was mir das eigentliche Problem verraten hat, war der _superimpose_ in 'stat_function'.Es scheint mir, dass "stat_function" entworfen wurde, um den Mappings des tatsächlichen Plots zu folgen, den Sie konstruieren (obere Schicht), ohne von allen niedrigeren Schichtänderungen zu den ästhetischen Abbildungen betroffen zu werden. – Divi