首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从R中随机变量的cdf中获取10000的样本?

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

Stack Overflow用户
提问于 2020-12-01 00:34:05
回答 1查看 90关注 0票数 0

我有cdf:

代码语言:javascript
复制
F_X(x) = 0 for x<=10
     (x-10)^3/1000 for 10<x<20
    1 for x=>20

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

我对R非常陌生,所以如果有任何帮助我将不胜感激

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-01 00:51:55

您的cdf函数可以用R编写为:

代码语言:javascript
复制
cdf <- function(x) (x - 10)^3 / 1000

这意味着我们可以像这样绘制区域10,20的曲线图:

代码语言:javascript
复制
x <- seq(10, 20, 0.1)
plot(x, cdf(x), type = "l")

实际上,我们想要做的是从0到1之间的均匀分布中产生一个样本,然后想象这些数字在y轴上。然后,我们希望“读出”x轴上的等价点,以便从X生成样本。要做到这一点,我们只需重新排列方程以找到它的逆数:

代码语言:javascript
复制
inverse_cdf <- function(x) 10 + (1000 * x)^(1/3)

这意味着我们的样本可以像这样生成:

代码语言:javascript
复制
X <- inverse_cdf(runif(10000))

现在,我们可以绘制此样本的经验cdf与理论cdf,并确保它们匹配:

代码语言:javascript
复制
plot(ecdf(X))
lines(x, cdf(x), col = "red")

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

作为进一步的演示,请注意X的pdf将是cdf的一阶导数。因此,除10和20之间外,其他任何地方的值都将为0,此处为:

代码语言:javascript
复制
pdf <- function(x) 3*(x - 10)^2 / 1000

因此,如果我们将其绘制在X的密度直方图上,我们应该会得到一个非常接近的匹配:

代码语言:javascript
复制
hist(X, freq = FALSE)
x <- seq(10, 20, 0.1)
lines(x, pdf(x), col = "red")

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65077468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档