尝试复制rgeom()函数

尝试复制rgeom()函数,r,function,distribution,R,Function,Distribution,作为练习,我试图编写一个复制rgeom()函数的函数。我希望它具有相同的参数和返回值。我首先使用runif生成包含x元素的向量,但我不确定如何应用概率分布: rgeometric <- function(x, prob) { outcomes <- runif(x) P <- (1 - prob)^length(x) * prob return (P) } rgometric我们可以使用。 首先,让我们澄清一些符号。 在rgeom()函数中,

作为练习,我试图编写一个复制
rgeom()
函数的函数。我希望它具有相同的参数和返回值。我首先使用
runif
生成包含
x
元素的向量,但我不确定如何应用概率分布:

rgeometric <- function(x, prob) {
    outcomes <- runif(x)
    
    P <- (1 - prob)^length(x) * prob
    return (P)
}

rgometric我们可以使用。
首先,让我们澄清一些符号。
在
rgeom()
函数中,我们希望第一个参数是
n
,一个长度为1的整数向量,给出要生成的样本数:


rgometric注意,对于r实现的几何函数的定义,随机变量是第一次成功之前的失败次数。因此,你可以:

my_rgeom <- function(n, p){
   fun <- function(p){
      n <- 0
      stopifnot(p>0)
      while(runif(1)>p) n <- n+1
      n 
     }
  replicate(n, fun(p))
}


从上图中,你可以看到这两种测试几乎完全相同

“我不知道有什么正式的测试可以帮助‘chi2应该可以工作,为什么不呢?
my_rgeom <- function(n, p){
   fun <- function(p){
      n <- 0
      stopifnot(p>0)
      while(runif(1)>p) n <- n+1
      n 
     }
  replicate(n, fun(p))
}
n <- 100000
p <- 0.25
X <- rgeom(n, p)
Y <- my_rgeom(n, p)
barplot(table(X), col = rgb(0.5, 1, 0.5, 0.4))
barplot(table(Y), add = TRUE, col = rgb(1, 0.5, 0, 0.3))