【发布时间】: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