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