Inverse CDF method to simulate a random sample
我在编写这段代码时遇到了问题,但我认为它可能存在问题。
这是一个问题:
编写一个名为 pr1 的 R 函数,该函数从 CDF 的分布中模拟大小为 n 的随机样本,CDF 为..
1 2 3 | F_X(x) = 0 for x<=10 (x-10)^3/1000 for 10<x<20 1 for x=>20 |
x = 10 ( 1 u^(1/3)) #我在这里使用了逆CDF方法,现在我想从分布中模拟一个大小为n的随机样本。
这是我的代码:
1 2 3 4 5 6 7 | pr1 = function(n) { u = runif(n,0,1) x = 10 * ( 1 + u^(1/3)) x } pr1(5) |
#这只是为了检查 n=5
的示例
我的问题是,由于 CDF 是 10< x <20,这会以任何方式影响我的代码吗?
谢谢
您是否将
你可以通过考虑 U = 0 来对你的反演进行完整性检查,它应该(并且确实)产生
因为你想模拟一个分段函数,你的 R 函数应该包含一些流控制,比如
这是一个开始:
1 2 3 4 5 6 7 8 9 10 11 12 13 | pr1 = function(n, drawing_range){ x <- sample(drawing_range, size = n) # random drawing of x if (x <= 10) output <- 0 else if ( 10 < x < 20 ) output <- (x-10)^3/1000 else output <- 1 output } |