Плотность плотности расчета / массовая функция набора данных в R

17

У меня есть набор данных, и я хочу проанализировать эти данные по функции плотности вероятности или функции масс вероятности в R, я использовал функцию плотности, но это не дало мне вероятности.

мои данные:

"step","Time","energy"
1, 22469 , 392.96E-03
2, 22547 , 394.82E-03
3, 22828,400.72E-03
4, 21765, 383.51E-03
5, 21516, 379.85E-03
6, 21453, 379.89E-03
7, 22156, 387.47E-03
8, 21844, 384.09E-03
9 , 21250, 376.14E-03
10,  21703, 380.83E-03

Я хочу получить PDF / PMF для вектора энергии, данные, которые мы принимаем во внимание, являются дискретными по своей природе, поэтому у меня нет специального типа для распределения данных.     

задан Alaa Brihi 07.08.2011 в 17:05
источник
  • Там «функция плотности вероятности» будет только вероятностью с дискретными данными, которая не является тем, что предполагает функция плотности. –  42- 07.08.2011 в 17:49
  • Итак, вам нужен эмпирический CDF? –  Iterator 08.08.2011 в 01:31

1 ответ

28

Ваши данные выглядят далеко не однозначными для меня. Вероятность вероятности того, что работа с непрерывными данными будет неправильной. density() дает вам эмпирическую функцию плотности, которая аппроксимирует истинную функцию плотности. Чтобы доказать правильность плотности, вычислим площадь под кривой:

energy <- rnorm(100)
dens <- density(energy)
sum(dens$y)*diff(dens$x[1:2])
[1] 1.000952

Учитывая некоторую ошибку округления. площадь под кривой суммируется до одной, и, следовательно, результат density() удовлетворяет требованиям PDF.

Используйте параметр probability=TRUE hist или функцию density() (или оба)

например:

hist(energy,probability=TRUE)
lines(density(energy),col="red")

дает

Если вам действительно нужна вероятность для дискретной переменной, вы используете:

 x <- sample(letters[1:4],1000,replace=TRUE)
 prop.table(table(x))
x
    a     b     c     d 
0.244 0.262 0.275 0.219 

Изменить: иллюстрация, почему наивный count(x)/sum(count(x)) не является решением. Действительно, дело не в том, что значения бинов равны единице, что площадь под кривой. Для этого вам нужно умножить ширину «бункеров». Возьмем нормальное распределение, для которого мы можем вычислить PDF, используя dnorm() . После кода строит нормальное распределение, вычисляет плотность и сравнивается с наивным решением:

x <- sort(rnorm(100,0,0.5))
h <- hist(x,plot=FALSE)
dens1 <-  h$counts/sum(h$counts)
dens2 <- dnorm(x,0,0.5)

hist(x,probability=TRUE,breaks="fd",ylim=c(0,1))
lines(h$mids,dens1,col="red")
lines(x,dens2,col="darkgreen")

Дает:

Функция кумулятивного распределения

В случае, если @Iterator был прав, довольно легко построить кумулятивную функцию распределения из плотности. CDF является интегралом PDF. В случае дискретных значений это просто сумма вероятностей. Для непрерывных значений мы можем использовать тот факт, что интервалы для оценки эмпирической плотности равны и вычисляют:

cdf <- cumsum(dens$y * diff(dens$x[1:2]))
cdf <- cdf / max(cdf) # to correct for the rounding errors
plot(dens$x,cdf,type="l")

Дает:

    
ответ дан Joris Meys 08.08.2011 в 01:15
  • Хорошее объяснение. С помощью type="s", я думаю, более интуитивный способ показать эмпирический cdf (не из оценки плотности), поскольку он дает ощущение выборки в течение указанного интервала. –  Andy Barbour 09.08.2011 в 07:36