#r #ggplot2 #math #distribution
Вопрос:
У меня есть ряд цифр:
tmp<- c(round(seq(0, 12000, ((12000 - 0) / round(1500 * .05)))),
round(seq(12000, 18900, ((18900 - 12000) / round(1500 * .1)))),
round(seq(18900, 23300, ((23300 - 18900) / round(1500 * .1)))),
round(seq(23300, 28100, ((28100 - 23300) / round(1500 * .1)))),
round(seq(28100, 33500, ((33500 - 28100) / round(1500 * .1)))),
round(seq(33500, 40000, ((40000 - 33500) / round(1500 * .1)))),
round(seq(40000, 47700, ((47700 - 40000) / round(1500 * .1)))),
round(seq(47700, 56500, ((56500 - 47700) / round(1500 * .1)))),
round(seq(56500, 68300, ((68300 - 56500) / round(1500 * .1)))),
round(seq(68300, 94200, ((94200 - 68300) / round(1500 * .1)))),
round(seq(94200, 200000, ((200000 - 94200) / round(1500 * .05)))))
Теперь я могу использовать geom_density, чтобы получить форму распределения. Как мне получить приблизительное количество tmp между двумя конкретными значениями tmp на основе этой формы плотности?
Так, например, я мог бы подсчитать количество значений в tmp между 10050 и 10100, основываясь на фактической серии. Но я хотел бы подсчитать количество значений на основе сглаженной гистограммы (плотности), которая не такая линейная, как фактический ряд.
Ответ №1:
Я не знаю, хорошо ли я интерпретирую. Следующий код будет подсчитывать строки из «tmp» в соответствии с оценкой плотности, а не фактическим распределением. Оценка — это оценка плотности вероятности, поэтому ее нужно умножить:
- по ширине каждой ячейки оценки, чтобы получить значение вероятности вокруг каждой точки оценки
- по общему количеству строк, чтобы получить оценку количества строк в заданном диапазоне (здесь, в примере, от 10000 до 20000 включительно).
«плотность» — это функция, вызываемая «geom_density» для получения точек для рисования.
> k <- density(tmp); sum(k$y[which(k$x>10000 amp; k$x<20000)])*(k$x[2]-k$x[1])*length(tmp)
[1] 199.3722
> length(which(tmp>10000 amp; tmp<20000))
[1] 202
Комментарии:
1. Я верю, что вы правильно меня истолковываете! Но ваше решение не дает ожидаемого результата: k <- плотность(tmp); сумма(k$y[которая(k$x>10000 amp; k$x<- плотность(tmp); сумма(k$y[которая(k$x>
2. Просто изменил исходный пост, чтобы вы могли работать с образцом, который там есть.
3. @Рене. Я исправил свой ответ, я просто забыл учесть интервал между двумя оценками, для моего примера с mtcars он был равен 1, и я не подозревал об ошибке. Извините.