#r #histogram #area
#r #гистограмма #область
Вопрос:
При использовании hist()
в R и настройке freq=FALSE
я должен получить значения плотности. Однако у меня ее нет. Я получаю другие числа, чем когда он просто показывает количество. Мне все еще нужно нормализовать.
Например:
> h = hist(c(1,2,1,3,1,4,5,4,5,8,2,4,1,7,6,10,7,4,3,7,3,5), freq=FALSE)
> h$density
0.13636364 0.15909091 0.09090909 0.09090909 0.02272727
> sum(h$density)
[1] 0.5
> h$density/sum(h$density)
[1] 0.27272727 0.31818182 0.18181818 0.18181818 0.0454545
Ответ №1:
Если вы изучите остальную часть вывода гистограммы, вы заметите, что столбцы имеют длину 2:
$breaks
[1] 0 2 4 6 8 10
Следовательно, вы должны умножить sum(h$density)
на 2, чтобы получить область, равную единице. Вы можете ясно видеть это, если посмотрите на гистограмму.
Комментарии:
1. И для получения ширины используйте
diff(h$breaks)
Ответ №2:
Область гистограммы, по сути, 1.0
. Что вы не принимаете во внимание, так это то, что каждый столбец имеет ширину в две единицы:
> h$breaks
[1] 0 2 4 6 8 10
Ответ №3:
sum(h$density*(h$breaks[-1] - h$breaks[-length(h$breaks)]))
[1] 1
Комментарии:
1. Или просто используйте
sum(h$density*diff(h$breaks))
2. Спасибо! Вы каждый день чему-то учитесь. Приятно знать, потому что я делаю это довольно часто.
Ответ №4:
Плотность не совпадает с вероятностью. Плотность для гистограммы — это высота полосы. Вероятность — это площадь панели. Вам нужно умножить высоту на ширину, чтобы получить область. Попробуйте
x <- c(1,2,1,3,1,4,5,4,5,8,2,4,1,7,6,10,7,4,3,7,3,5)
hh <- hist(x, probability = TRUE)
sum(diff(hh$breaks) * hh$density)
# [1] 1
Работает, потому что breaks
содержит начальную / конечную точки для каждой из ячеек. Таким образом, принимая разницу между каждым значением, вы получаете общую ширину ячейки. Вы также можете with()
более легко получить оба этих значения.
x <- c(1,2,1,3,1,4,5,4,5,8,2,4,1,7,6,10,7,4,3,7,3,5)
with(hist(x, probability = TRUE), sum(diff(breaks) * density))
# [1] 1