我有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非常陌生,所以如果有任何帮助我将不胜感激
发布于 2020-12-01 00:51:55
您的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")

https://stackoverflow.com/questions/65077468
复制相似问题