Как получить выборку 10000 из cdf случайной величины в R?

#r #sample #cdf

#r #образец #cdf

Вопрос:

У меня есть cdf:

 F_X(x) = 0 for x<=10
     (x-10)^3/1000 for 10<x<20
    1 for x=>20
 

Мне нужно сгенерировать выборку из 10 000 из X. как я могу это сделать в R?

Я очень новичок в R, поэтому был бы признателен за любую помощь

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

1. @Аллен Кэмерон. Хорошо, спасибо. Я этого не заметил. Комментарий удален.

Ответ №1:

Ваша функция cdf может быть записана в R как:

 cdf <- function(x) (x - 10)^3 / 1000
 

Это означает, что мы можем построить ее для региона [10, 20] следующим образом:

 x <- seq(10, 20, 0.1)
plot(x, cdf(x), type = "l")
 

По сути, то, что мы хотим сделать, это сгенерировать выборку из равномерного распределения между 0 и 1, затем представьте, что эти числа находятся на оси y. Затем мы хотим «считывать» эквивалентные точки на оси x для генерации выборки X . Для этого мы просто переставляем уравнение, чтобы найти его обратное:

 inverse_cdf <- function(x) 10   (1000 * x)^(1/3)
 

Это означает, что наша выборка может быть сгенерирована следующим образом:

 X <- inverse_cdf(runif(10000))
 

Теперь мы можем построить эмпирический cdf этой выборки с теоретическим cdf и убедиться, что они совпадают:

 plot(ecdf(X))
lines(x, cdf(x), col = "red")
 

Это показывает нам, что эмпирический cdf X соответствует теоретическому cdf, что указывает на то, что X он действительно выбран из правильного распределения.

В качестве дополнительной демонстрации обратите внимание, что pdf of X будет первой производной от cdf. Поэтому оно будет равно 0 везде, кроме промежутка между 10 и 20, где оно будет:

 pdf <- function(x) 3*(x - 10)^2 / 1000
 

Итак, если мы построим это поверх гистограммы плотности X , мы должны получить близкое совпадение:

 hist(X, freq = FALSE)
x <- seq(10, 20, 0.1)
lines(x, pdf(x), col = "red")
 

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