Как найти / оценить функцию плотности вероятности по функции плотности в R

17

Предположим, что у меня есть переменная, как Xс неизвестным распределением. В Mathematica, используя SmoothKernelDensityфункцию, мы можем получить оценочную функцию плотности. Эту оценочную функцию плотности можно использовать вместе с PDFфункцией для вычисления функции плотности вероятности значения, например, Xв PDF[density,X]предположении, что «плотность» является результатом SmoothKernelDensity. Было бы хорошо, если бы такая функция была в R. Вот как она работает в Mathematica.

http://reference.wolfram.com/mathematica/ref/SmoothKernelDistribution.html

В качестве примера (на основе функций Mathematica):

data = RandomVariate[NormalDistribution[], 100]; #generates 100 values from N(0,1)

density= SmoothKernelDistribution[data]; #estimated density

PDF[density, 2.345] returns 0.0588784 

Здесь вы можете найти больше информации о PDF:

http://reference.wolfram.com/mathematica/ref/PDF.html

Я знаю, что могу построить ее функцию плотности, используя density(X)в R, и используя ее, ecdf(X)я могу получить ее эмпирическую кумулятивную функцию распределения. Можно ли сделать то же самое в R на основе того, что я описал в Mathematica?

Любая помощь и идея приветствуется.

Амин
источник
density(x)дает оценку PDF, как вы уже отметили, но его пригодность зависит от цели, для которой вы хотите иметь плотность. Обратите внимание, например, что дисперсия смещена вверх (при выполнении свертки вы добавляете дисперсию ядра к дисперсии данных, что само по себе является несмещенной оценкой) - такие компромиссы смещения дисперсии встречаются повсеместно. Существуют и другие альтернативы, такие как, например, оценка плотности лог-сплайнов, но, опять же, ее пригодность частично зависит от того, что вы хотите с ней делать.
Glen_b
@Glen_b Я хочу использовать оценочную плотность для нахождения вероятности других значений в распределении. Например, у меня есть вектор данных в диапазоне от 0 до 10. Этот набор данных содержит только 70 уникальных значений от 0 до 10. Я могу построить график плотности. Теперь предположим, что мне интересно найти вероятность наличия X = 7,5, чего нет в наблюдаемых данных, в случайной выборке. Как я могу получить ее? Я знаю, что это ecdf(X)дает мне эквивалентный процентиль 7,5, но это не то, что я ищу.
Амин
« найти вероятность наличия Х = 7,5 » - вот ваша проблема! Либо у вас есть непрерывное распределение (в этом случае фактический ответ «0»), либо у вас его нет (в этом случае вы не должны использовать оценку плотности, потому что у вас нет плотности).
Glen_b
1
ecdf(b)-ecdf(a)п(a<Иксб)<Икс п(Иксзнак равно7,5)
1
Извините, это была ошибка. Я имею в виду примерную долю значений, которые составляют 7,5; мой сын отвлек меня, когда я печатал последние пару слов. Ваша выборочная оценка вероятности ненаблюдаемого события равна нулю. Вы хотели подать заявку ранее? Вы хотели доверительный интервал для пропорции вместо точечной оценки? Ваша фактическая проблема еще не является проблемой R, ваша проблема заключается в правильном объяснении того, чего вы действительно хотите. Вам, вероятно, следует отредактировать свой вопрос или опубликовать новый.
Glen_b

Ответы:

35

?densityуказывает, что он уже использует approxлинейную интерполяцию; ?approxуказывает, что approxfunгенерирует подходящую функцию:

x <- log(rgamma(150,5))
df <- approxfun(density(x))
plot(density(x))
xnew <- c(0.45,1.84,2.3)
points(xnew,df(xnew),col=2)

введите описание изображения здесь

Используя integrateзапуск с подходящего расстояния ниже минимума в образце (кратное, скажем, 4 или 5, используемой в полосе пропускания df, как правило, подходит для соответствующего расстояния), можно получить хорошее приближение cdf, соответствующего df,

Glen_b - Восстановить Монику
источник
это интересно. Кажется, что df(2.3)дает значение оценочной функции плотности при, x=2.3но то, что PDFделает в Mathematica, дает площадь под кривой выше x=2.3. Я не совсем уверен в этом. Это только мое предположение. Можете ли вы воспроизвести то, что я сделал в Mathematica?
Амин
Моя функция, приведенная выше, наглядно дает основанную на ядре оценку «функции плотности вероятности» ... «вычисленной в x». Либо ты этого хочешь, либо нет. Если вы этого не сделаете, вы должны объяснить , что вы действительно хотите - в статистических терминах, а не просто как «воспроизвести это поведение».
Glen_b
Я думаю, что я по ошибке и непреднамеренно способствовал тому, что плотность - это вероятность, которой нет. Я не хотел вводить в заблуждение. Если вы думаете, что PDFв Mathematica делает то, что вы описали в своем ответе (то есть нахождение значения функции плотности для данного значения X), то я думаю, что я получил свой ответ. Просто есть много путаницы при использовании слов!
Амин
2
Из того, что PDFговорится на странице, она возвращает то же, что и я, но методы, которые она использует в своих расчетах в этом случае, вероятно, будут несколько более точными (однако для такой цели дополнительная точность не имеет большого значения). Для некоторого обсуждения различия вероятности / плотности, смотрите здесь и здесь .
Glen_b