Генерация парето-наблюдений с использованием обратного кумулятивного распределения

В настоящее время я работаю над заданием, в котором вы должны генерировать наблюдения Парето, используя обратную кумулятивную функцию распределения Парето. Мне никогда прежде не удавалось на самом деле инвертировать статистическую функцию, и я не могу понять, как это правильно. Я понимаю формулу X=F^1(U), где X - случайная переменная, распределенная по Парето, а U - стандартная равномерная случайная величина, важная для генерации наблюдений, но я не могу понять, как вычислить обратную функцию.

Я надеялся понять, как решить эту проблему.

1 ответ

  • Запишите формулу для F(X).
  • Напишите "= U" справа от формулы.
  • Используйте алгебру, чтобы выделить единственное значение X в левой части уравнения, т. Е. Решить для X как функцию от U.

Полученное уравнение является формулой обращения. Теперь выполните "проверку работоспособности", вставив несколько значений U: 0, чтобы получить минимум, 1, чтобы получить максимум, и 0,5, чтобы получить медиану.

Пример: Униформа (a, b) имеет CDF F(x) = (x - a) / (b - a) для a ≤ x ≤ b и имеет min a, max b и медиану (a + b) / 2.

  • F (X) = (X - a) / (b - a)
  • (Х-а) / (б-а) = U
  • X - a = (b - a) U
  • X = a + (b - a) U

Тестовые случаи:

  • U = 0 => a + (b - a) 0 = a
  • U = 1 => a + (b - a) 1 = a + b - a = b
  • U = 0,5 => a + (b - a) / 2 = (2a + b - a) / 2 = (a + b) / 2

Реализация (в Ruby, поскольку вы не указали язык):

def uniform(a, b)
  return a + (b - a) * rand        # rand with no arguments returns a U(0,1)
end
Другие вопросы по тегам