如何从 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")
我有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")