4

У меня есть оценка плотности (с использованием функции density) для моих данных learningTime (см. Рисунок ниже), и мне нужно найти вероятность Pr(learningTime > c), т. Е. Площадь под кривой плотности из данный номер c (красная вертикальная линия) до конца кривой. Есть идеи?Расчетная площадь под кривой оценки плотности, т. Е. Вероятность

enter image description here

ответ

5

Это не сложная работа. Предположим, у нас есть некоторые наблюдаемые данные x (ваш TMESAL$learningTime), и в качестве воспроизводимой примера я просто генерировать 1000 стандартных нормальных случайных выборок:

set.seed(0) 
x <- rnorm(1000) 

Сейчас мы проводим оценку плотности, с некоторой настройки:

d <- density.default(x, n = 512, cut = 3) 
str(d) 
# List of 7 
# $ x  : num [1:512] -3.91 -3.9 -3.88 -3.87 -3.85 ... 
# $ y  : num [1:512] 2.23e-05 2.74e-05 3.35e-05 4.07e-05 4.93e-05 ... 
# ... truncated ... 

Вынимаем d$x и d$y:

xx <- d$x ## 512 evenly spaced points on [min(x) - 3 * d$bw, max(x) + 3 * d$bw] 
dx <- xx[2L] - xx[1L] ## spacing/bin size 
yy <- d$y ## 512 density values for `xx` 
plot(xx, yy, type = "l") ## plot density curve (or use `plot(d)`) 

Интеграция может быть в образовано Riemann Sum. Например, площадь под кривой плотности:

C <- sum(yy) * dx ## sum(yy * dx) 
# [1] 1.000976 

Поскольку Римана Сумма является лишь приближением, это отклоняется от 1 (полной вероятности) немного. Мы называем это значение «нормализуем константу».

Теперь предположим, что мы хотим найти площадь под то кривой, от x0 = 1 до конца кривой, т.е. численного интегрирования по [x0, Inf], мы можем аппроксимировать

p.unscaled <- sum(yy[xx >= x0]) * dx 
# [1] 0.1691366 

Выше немасштабированная оценка, мы можем масштабировать его C:

p.scaled <- p.unscaled/C 
# [1] 0.1689718 

Поскольку истинная плотность НАШЕЙ моделируемой x, знает, мы можем сравнить эту оценку с истинным значением:

pnorm(x0, lower.tail = FALSE) 
# [1] 0.1586553 

который довольно близко.

+0

Спасибо @Zheyuan Li. Он работал хорошо – Eric