В психологии принято отображать гистограммы с наложенной на них нормальной кривой. Кроме того, отображение плотности наблюдаемых значений с помощью geom_line облегчило бы сравнение с нормальной кривой, поэтому я написал еще одну функцию гистограммы, которая делает это (powerHist
в пакете userfriendlyscience
). Однако он работает очень медленно для больших векторов (в настоящее время работает с 16,7 миллионами точек данных), поэтому я пытаюсь сделать его быстрее. Раньше я использовал density
для ручного вычисления оценок плотности, а затем умножал их на максимальное количество точек данных в ячейке, чтобы масштабировать их в соответствии с гистограммой.
Но это очень медленно, плюс я подумал, что ggplot2 должен это делать. Одной из переменных, вычисляемых stat_density
, является ..scaled..
, которая является оценкой плотности, масштабированной до максимального значения 1. Теперь мне просто нужно умножить это. Но ggplot2 не найдет переменную, которую я использую. Умножение его на константу работает нормально, но помещу ли я переменную в кадр данных, который передаю в ggplot2, или нет, похоже, не имеет значения: ggplot2 не может ее найти.
scalingFactor <- max(table(cut(mtcars$mpg, breaks=20)));
dat <- data.frame(mpg = mtcars$mpg,
scalingFactor = scalingFactor);
ggplot(mtcars, aes(x=mpg)) +
geom_histogram(bins=20) +
geom_line(aes(y=..scaled.. * scalingFactor),
stat='density', color='red');
Это дает:
Error in eval(expr, envir, enclos) : object 'scalingFactor' not found
При замене scalingFactor
на обычный номер работает:
ggplot(mtcars, aes(x=mpg)) +
geom_histogram(bins=20) +
geom_line(aes(y=..scaled.. * 10),
stat='density', color='red');
Кроме того, при простом использовании scalingFactor
он также работает:
ggplot(mtcars, aes(x=mpg)) +
geom_histogram(bins=20) +
geom_line(aes(y=scalingFactor ),
stat='density', color='red');
Итак, scalingFactor
кажется доступным; доступно умножение; и явно ..scaled..
доступен. Тем не менее, объединить их, похоже, не удастся. Что мне здесь не хватает? Я не могу найти ничего о «вычислениях с переменными, сгенерированными статистикой» или что-то в этом роде. . .
Кто-нибудь сталкивался с этим раньше? Известно ли поведение ggplot2, которое я только что пропустил?