Подтвердить что ты не робот

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

У меня есть набор данных, и я хочу проанализировать эти данные по функции плотности вероятности или функции масс вероятности в 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 для вектора энергии, данные, которые мы принимаем во внимание, являются дискретными по своей природе, поэтому у меня нет специального типа для распределения данных.

4b9b3361

Ответ 1

Ваши данные выглядят далеко не однозначными для меня. Вероятность вероятности того, что работа с непрерывными данными будет неправильной. 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")

дает

enter image description here

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

 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")

Дает:

enter image description here


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

В случае, если @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")

Дает:

enter image description here