如何从 R 中的随机变量的 cdf 中获取 10000 的样本?

How to get a sample of 10000 from cdf of a random variable in R?

我有cdf:

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

我需要从 X 生成 10,000 个样本。我如何在 R 中这样做?

我对 R 非常陌生,非常感谢任何帮助

你的 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")

这向我们表明 X 的经验 cdf 与理论 cdf 匹配,表明 X 确实是从正确的分布中采样的。

作为进一步的演示,请注意 X 的 pdf 将是 cdf 的一阶导数。因此,除 10 到 20 之间外,所有地方都是 0,它将是:

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")