Расчет дискретного PDF из дискретного CDF в Python - PullRequest
0 голосов
/ 08 ноября 2018

Если у нас есть дискретный cdf для квантилей типа

quantiles = array([1.000e-04, 1.000e-03, 1.000e-02, 2.000e-02, 3.000e-02, 4.000e-02,
   5.000e-02, 6.000e-02, 7.000e-02, 8.000e-02, 9.000e-02, 1.000e-01,
   2.000e-01, 3.000e-01, 4.000e-01, 5.000e-01, 6.000e-01, 7.000e-01,
   8.000e-01, 9.000e-01, 9.100e-01, 9.200e-01, 9.300e-01, 9.400e-01,
   9.500e-01, 9.600e-01, 9.700e-01, 9.800e-01, 9.900e-01, 9.990e-01,
   9.999e-01])

Допустимо ли создавать линейную интерполяцию с обратным отображением? То есть из квантилей cdf мы оцениваем значение случайной величины, удовлетворяющей условию cdf p(x < a) = p_a. Затем мы получаем равномерно распределенные значения от 0 до 1 и генерируем рассматриваемую случайную переменную (представьте себе отображение от оси y до оси x на графике cdf). Будет ли PDF из этого хорошим приближением?

f = interp1d(quantiles, matching_discrete_cdf, kind='linear')
uni_rv = stats.uniform.rvs(loc=percentiles.min(), 
         scale=percentiles.max() - percentiles.min(), size=nof_items)
pdf = f(uni_rv)

1 Ответ

0 голосов
/ 09 ноября 2018

Я предполагаю, что когда вы пишете "pdf", вы имеете в виду "образец", а не фактическую функцию плотности вероятности ; и когда вы пишете «match_discrete_cdf», вы имеете в виду «функцию процентной точки» (PPF), которая является обратной к CDF. Помимо терминологической путаницы, идея обоснована: генерация выборки для пользовательского распределения путем преобразования единой выборки с помощью PPF является стандартным подходом.

Интерполяция немного исказит распределение, как и тот факт, что квантили 1.000e-04 и 9.999e-01 исходного распределения станут минимальными и максимальными сгенерированными числами (исходное распределение имело некоторые небольшие шанс быть вне этих пределов). Но это должно быть приемлемым и неизбежным, учитывая данные, которые вы имеете. Может быть, использовать кубическую интерполяцию вместо линейной?

Если вы действительно хотите PDF, а не образец, PDF является производной от CDF. Я бы использовал кубическую сплайн-интерполяцию для значений CDF ( InterpolatedUnivariateSpline ), а затем взял бы производную .

...