【问题标题】:Code about generation of values for a binomial random variable [closed]关于生成二项式随机变量值的代码 [关闭]
【发布时间】:2019-08-26 20:53:47
【问题描述】:

考虑r中的以下代码以生成二项式随机变量的值。

Binomial<-function(n,p,ns)
{
  S <- rep(ns)
  for (i in 1:ns)
  {
    k <-0
    produ<-runif(1)
    while (produ >=(1-p)^n)
    {
      produ <- produ*runif(1)
      k <-k+1
    }
    S[i] <- k
  }
  return(S)
}

正确吗?

如果没有,为什么不呢?

如果是,可以通过某种方式改进吗?

【问题讨论】:

  • @akrun 返回 5
  • @akrun 不,如果你把它改成ns=10 例如,返回10个值
  • @akrun 我不明白你的评论,我的代码错了吗?
  • 我不明白你想在这里做什么。您应该提供一些上下文。您的代码的关键要求是什么?为什么不使用rbinom(正如@demarsylvain 指出的那样)?这似乎是某种形式的逆变换采样算法。为什么这个特定的算法?如果您提出诸如“可以[它]以某种方式改进”等相当广泛的问题,这些是您需要提供的关键细节。您的代码似乎也包含一些奇怪的位。例如,rep(ns) 将只返回 ns 作为标量 ns。你想做什么?
  • 我不知道你所说的“简单代码”是什么意思。什么意义上的轻松?我想说好的代码很容易理解,尤其是对于初学者。好的 R 代码还意味着利用 R 及其向量化操作的优势。这不是你目前正在做的事情。动态增长向量(在您的示例中为S)是在 R 中创建对象的一种非常低效的方法。我在上面的评论中想说的是您需要提供上下文!例如,为什么要通过逆变换采样从二项分布中采样?有更有效的方法来做到这一点。

标签: r statistics simulation verification


【解决方案1】:

有一个函数rbinom() 做同样的事情。如果你构建这个函数是为了练习,我有一个评论给你:

  • 您应该考虑可能会破坏您的功能的值。例如,我尝试使用p = 1 运行它,但它没有返回结果。这应该是固定的。

  • 在函数中添加 cmets 以定义参数

    Binomial <- function(n, p, ns){
    # n is ....
    # p is the probably of the event
    # ns is ...
    

【讨论】:

  • 你说得对,谢谢,我会尝试用p=1修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
相关资源
最近更新 更多