2016-03-20 10 views
0

Hier einige praktikable Beispiel für Daten, die ich zeichnen wollen nicht erreicht:erstellt eine verschachtelte CDF, die nicht 1

set.seed(123) 

x <- rweibull(n = 2000, shape = 2, scale = 10) 
x <- round(x, digits = 0) 
x <- sort(x, decreasing = FALSE) 

y <- c(rep(0.1, times = 500),rep(0.25, times = 500),rep(0.4, times = 500),rep(0.85, times = 500)) 

z <- rbinom(n=2000, size=1, prob=y) 

df1 <- data.frame(x,z) 

ich die overal fequency von z über x darstellen möchten.

Im Gegensatz zu einem typischen CDF, sollte die Funktion nicht 1,0 erreichen, sondern

sum(df1$z)/length(df1$z) 

a ymax von 0,36 (721/2000).

mit ggplot2 wir eine CDF von x mit dem folgenden Befehl erstellen:

library(ggplot2) 
ggplot(df1, aes(x)) + stat_ecdf() 

Aber ich mag dieses Grundstück erweitern den kumulativen prozentualen Anteil von z zu zeigen (in Abhängigkeit von ‚x‘)

Das sollte Endergebnis wie

wie

enter image description here

EDIT

mit einiger sehr schlechten Datenmanipulation Ich bin in der Lage, die etwas ähnlich zu einem CDF Grundstück zu erzeugen, aber es muss eine schönere und einfache Methode, mit verschiedenen Paketen und ggplot seiner

mytable <- table(df1$x, df1$z) 

mydf <- as.data.frame.matrix(mytable) 
colnames(mydf) <- c("z_no", "z_yes") 
mydf$A <- 1:length(mydf$z_no) 

mydf$sum <- cumsum(mydf$z_yes) 
mydf$dis <- mydf$sum/length(z) 

plot(mydf$A, mydf$dis) 
+1

von .35 nur multiplizieren? – MichaelChirico

Antwort

1

Sie das verwenden können, verpacken dplyr die Daten zu verarbeiten, wie folgt:

library(dplyr) 
plot_data <- group_by(df1, x) %>% 
       summarise(z_num = sum(z)) %>% 
       mutate(cum_perc_z = cumsum(z_num)/nrow(df1)) 

Dies ergibt das gleiche Ergebnis wie die Datenverarbeitung, die Sie in Ihrem bearbeiten beschreiben. Beachten Sie jedoch, dass ich sum(df1$z) = 796 bekomme und der maximale y-Wert somit 796/2000 = 0.398 ist.

Für das Grundstück, können Sie geom_step() verwenden, um eine Sprungfunktion zu haben und die horizontale Linie mit geom_hline() hinzufügen:

ggplot(plot_data, aes(x = x, y = cum_perc_z)) + 
    geom_step(colour = "red", size = 0.8) + 
    geom_hline(yintercept = max(plot_data$cum_perc_z)) 

enter image description here

+0

Toller, fantastischer Umgang mit Datenmanagement – user08041991

Verwandte Themen