R hist() и qplot(geom=histogram) несовместимы

Я экспериментирую с некоторыми смоделированными распределениями значений p.

При построении моих данных с помощью hist() результат выглядит так, как ожидалось. Значения p равномерно распределены, и есть пик, близкий к нулю («сигнал»).

data = read_tsv("./data_vector.tsv")
hist(data$p_values, breaks = seq(0, 1, by=1/30))

введите здесь описание изображения

Однако, если сделать то же самое с ggplot/qplot, пик слева отсутствует:

qplot(data$p_values, geom="histogram", bins=30)

введите здесь описание изображения

Что я сделал не так? Я ожидал, что эти две команды будут эквивалентны.

Данные и код. Мои входные данные, а также отчет Rmarkdown доступны на этом суть


person Gregor Sturm    schedule 17.05.2017    source источник
comment
Просто укажите также от breaks= до geom_histogram(): ggplot(data, aes(x=p_values)) + geom_histogram(bins=30, breaks = seq(0, 1, by=1/30))   -  person MrFlick    schedule 17.05.2017
comment
Я работаю... но чем это отличается от установки bins=30? А точнее: что происходит с моим пиком слева при использовании параметров по умолчанию?   -  person Gregor Sturm    schedule 17.05.2017
comment
Короткий ответ заключается в том, что бинирование гистограммы гораздо более тонкое и сложное, чем кажется разумным. Что-то вроде вычисления квантиля. (Читать ?quantile.)   -  person joran    schedule 17.05.2017
comment
Это то, что ggplot по умолчанию использует в качестве корзины с вашими данными ggplot2:::bin_breaks_bins(range(data$p_values), 30). он не знает min/mad, поэтому он разбивает самый нижний бин, выходящий за пределы диапазона 0/1. Правая сторона корзины находится на уровне 0,03333 для вашего истории и 0,017227 для ggplot.   -  person MrFlick    schedule 17.05.2017
comment
Спасибо, это объяснение, которое я искал!   -  person Gregor Sturm    schedule 17.05.2017