Próbuję użyć stat_ecdf()
, aby narysować skumulowane sukcesy jako funkcję wyniku rankingu utworzonego przez model predykcyjny.W R ggplot2 uwzględnij punkty końcowe stat_ecdf() (0,0) i (1,1)
#libraries
require(ggplot2)
require(scales)
# fake data for reproducibility
set.seed(123)
n <- 200
df <- data.frame(model_score= rexp(n=n,rate=1:n),
obs_set= sample(c("training","validation"),n,replace=TRUE))
df$model_rank <- rank(df$model_score)/n
df$target_outcome <- rbinom(n,1,1-df$model_rank)
# Plot Gain Chart using stat_ecdf()
ggplot(subset(df,target_outcome==1),aes(x = model_rank)) +
stat_ecdf(aes(colour = obs_set), size=1) +
scale_x_continuous(limits=c(0,1), labels=percent,breaks=seq(0,1,.1)) +
xlab("Model Percentile") + ylab("Percent of Target Outcome") +
scale_y_continuous(limits=c(0,1), labels=percent) +
geom_segment(aes(x=0,y=0,xend=1,yend=1),
colour = "gray", linetype="longdash", size=1) +
ggtitle("Gain Chart")
Wszystko co chcę zrobić, to zmusić ECDF rozpocząć się (0,0) i na koniec (1,1), tak że nie ma przerw na początku lub na końcu krzywa. Jeśli to możliwe, chciałbym zrobić to w ramach składni ggplot2
, ale zadowalałoby mnie sprytne obejście tego problemu.
@Henrik to nie jest duplikatem this question, bo już zdefiniowane swoje granice z scale_x_
i _y_continuous()
i dodanie expand_limits()
nic nie robi. Nie jest to początek PLOT, ale punkty końcowe stat_ecdf(), które wymagają naprawy.
@Henrik - przeczytaj pytanie. Spójrz na moją fabułę. Oczywiście siatka zawiera już (0,0) i (1,1), punkty, które są zawarte w 'geom_segment()', więc nie jest * * kwestią ustalania granic obiektu wydruku. Pytanie dotyczy domeny obiektu "stat_ecdf()", jak podano w tytule mojego pytania. Zobacz, co uważasz za duplikat postu. W ogóle nie jest spokrewniony. – C8H10N4O2
Czy możesz mi powiedzieć, jak to się stało, że masz procent na osi Y? –
@MostafaRifi '+ scale_y_continuous (labels = percent)' i nie zapomnij 'library (scale)' – C8H10N4O2