如何从我自己的cdf模拟iid随机变量?

时间:2016-02-14 23:41:55

标签: r

所以,我有一个cdf,由

给出
F=function(x){
  if (x < (pi/2) & x > -(pi/2)){
    q <- (sin(x)+1)/2
  } else {
    q <- 0
  }
  return(q)
}

我想用这个cdf模拟1000个iid RV - 我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果这是一个cdf,你只需反转该功能。那将是:

Finv = function(p) {
  x = 180/pi * asin(2*p - 1) # invere F
  ind = abs(x) < (2/pi) # which fall in range pi/2
  x = x[ind] # save only those that fall in range of pi/2
  return(x)
}
p = runif(1e6)
x = Finv(p)
hist(x, breaks = 50, freq = FALSE)

现在我们有一个反向cdf的表达式。接下来,如果我们只是为p输入0和1之间的随机值,我们可以从f(x)伪随机采样。此方法称为Inverse transform sampling。显示它的工作原理:

dplyr