2016-03-20 1 views
0

Voici quelques exemples de données réalisable, je voudrais tracer:a créé un cdf imbriquée qui n'atteint 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) 

Je veux tracer la fequency overal de z sur x.

contrairement à un cdf typique, la fonction ne doit pas atteindre 1,0, mais

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

un ymax de 0,36 (721/2000).

utilisant ggplot2 nous pouvons créer une fonction de répartition de x avec la commande suivante:

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

Mais je veux étendre cette parcelle pour montrer le pourcentage cumulé de z (en fonction de « x »)

Le résultat final doit aimer comme

enter image description here

EDIT

avec une certaine manipulation de données très pauvre, je suis en mesure de générer quelque chose de similaire à un complot cdf, mais il doit y avoir une plus belle et la méthode facile en utilisant différents packages et ggplot

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

simplement multiplier par .35? – MichaelChirico

Répondre

1

Vous pouvez utiliser le empaqueter dplyr pour traiter les données comme suit:

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

Cela donne le même résultat que le traitement des données que vous décrivez dans votre édition. Notez cependant que j'obtiens sum(df1$z) = 796 et que la valeur y maximale est donc 796/2000 = 0.398.

Pour l'intrigue, vous pouvez utiliser geom_step() d'avoir une fonction d'étape et ajoutez la ligne horizontale avec geom_hline():

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

Super, utilisation fantastique de la gestion des données – user08041991