Я пытаюсь построить дистрибутив CDF, используя R и ggplot2. Однако у меня возникают трудности с построением функции CDF после того, как я преобразовал ось Y, чтобы получить прямую линию. Этот тип графика часто используется в графиках бумаги Гамбеля, но здесь я буду использовать в качестве примера нормальное распределение.
Я генерирую данные и строю кумулятивную функцию плотности данных вместе с функцией. Они подходят хорошо. Однако, когда я применяю преобразование оси Y, они больше не подходят.
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
И вывод должен быть чем-то вроде: Хорошо!
Теперь я пытаюсь преобразовать ось Y в соответствии с используемым распределением.
#Apply transformation
gg + scale_y_continuous(trans=probability_trans("norm"))
Точки трансформируются правильно (ложатся на прямую), а функция нет!
Однако, похоже, все работает нормально, если я делаю так, вычисляя CDF с помощью ggplot:
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"))
Почему это происходит? Почему расчет CDF вручную не работает с преобразованиями масштаба?