Моделирование заданной функции плотности вероятности в R

#r #probability

Вопрос:

Ниже приводится следующий p.d.f:

 f(x)=2x/k^2, where 0 <= x <= k
 

Пусть k=10, я пытаюсь смоделировать 100 раз для этого p.d.f, затем вывести первые 5 результатов и найти среднее значение для всех результатов 100 раз.

Ответ №1:

Если вы хотите смоделировать с равномерным распределением между 0 и k , то вы можете перейти runif(n, min, max) в свой pdf-файл.

 f <- function(x, k) {
  return(2*x/k^2)
}

k <- 10
res <- f(runif(100, 0, k), k)
print(res[1:5])
print(mean(res))
 

Согласно комментариям MrFlick, если бы вы вместо этого хотели выполнить выборку обратного преобразования, этого должно быть достаточно.

 pdf <- function(x, k) {
  return(2*x/k^2)
}

cdf <- function(x, k){
  return(x^2/k^2)
}

icdf <- function(y, k){
  return(sqrt(k^2*y))
}

k <- 10
res <- icdf(runif(100,0,1), k)
print(res[1:5])
print(mean(res))
 

Комментарии:

1. Это кажется очень неправильным. Если k=100 , то это распределение должно возвращать числа от 0 до 100. Но если вы перейдете в 0-1 для x into f , вы никогда не получите число больше, чем 2/100^2 . Я думаю, что вы пытались получить выборку с обратным преобразованием , но это включает в себя поиск обратного cdf , а не вставку случайных значений 0-1 в pdf.

2. Мое понимание (если я правильно читаю вопрос) заключается в том , что если k=100 , то, если вы интегрируетесь f(x) 0 k=100 , вы получите 1 (как и в случае с любым k действительным pdf-файлом). Таким образом, распределение должно принимать случайную выборку от 0-100, чтобы соответствовать диапазону 0-1.

3. Но ваш код вообще не учитывает эту интеграцию. Это очень важный шаг. И именно поэтому CDF следует использовать с выборкой обратного преобразования.

4. Этот конкретный интеграл нетрудно решить вручную. Например k=100 , ожидаемое значение (среднее значение) равно 66,6. Этот код дает гораздо, гораздо меньшее значение, чем ожидалось.

5. По-видимому, это случай различных толкований вопроса без какого-либо предоставленного контекста. Я понял, что это означает простое создание однородной выборки из 0-k и ввод ее в pdf для получения вероятностей в качестве выходных данных, в то время как другой интерпретацией было бы создание однородной выборки из 0-1 и использование cdf для возврата числа из 0-k из базового распределения (как вы упомянули). После повторного чтения, вероятно, более вероятно, что пользователь просил позже. Я ценю ваши отзывы.