2015-09-09 1 views
3

Je voudrais tracer un CDF pondéré en utilisant ggplot. Certaines anciennes discussions non-SO (par exemple this à partir de 2012) suggèrent que ce n'est pas possible, mais je pensais que je relancerais.R ggplot: CDF pondéré

Par exemple, tenez compte de ces données:

df <- data.frame(x=sort(runif(100)), w=1:100) 

je peux montrer un CDF avec non pondérée

ggplot(df, aes(x)) + stat_ecdf() 

enter image description here

Comment puis-je poids par ce w? Pour cet exemple, je m'attendrais à une fonction de visualisation x^2, car les plus grands nombres ont un poids plus élevé.

Répondre

8

Vous pouvez calculer la distribution cumulative dans le cadre de données elles-mêmes, à savoir:

df <- df[order(df$x), ] # Won't change anything since it was created sorted 
df$cum.pct <- with(df, cumsum(x * w)/sum(x * w)) 
ggplot(df, aes(x, cum.pct)) + geom_line() 

enter image description here

+1

Pour référence ultérieure, vous pouvez utiliser, par exemple, 'df CumPct de $ <-avec (df, cumsum (x * w)/sum (x * w)) '. Cela n'affecte cependant pas votre réponse. – jlhoward

+0

Merci @jlhoward, édité. J'utilise principalement 'data.table' donc j'ai oublié' with' :) –