【发布时间】:2020-09-30 20:13:43
【问题描述】:
我正在尝试创建一个函数,以便从负二项分布中生成 n 随机数。
为了生成它,我首先制作了一个函数来从几何分布中生成n 随机变量。我从几何分布生成n随机数的函数如下:
rGE<-function(n,p){
I<-rep(NA,n)
for (j in 1:n){
x<-rBer(1,p)
i<-1 # number of trials
while(x==0){
x<-rBer(1,p)
i<-i+1
}
I[j]<- i
}
return(I)
}
我测试了这个函数(rGE),例如rGE(10,0.5),它从成功概率为0.5的几何分布中生成10随机数,随机结果是:
[1] 2 4 2 1 1 3 4 2 3 3
在rGE 函数中,我使用了一个名为rBer 的函数,即:
rBer<-function(n,p){
sample(0:1,n,replace = TRUE,prob=c(1-p,p))
}
现在,我想改进上面的函数 (rGE),以便创建一个函数来从负二项式函数生成 n 随机数。我做了以下功能:
rNB<-function(n,r,p){
I<-seq(n)
for (j in 1:n){
x<-0
x<-rBer(1,p)
i<-1 # number of trials
while(x==0 & I[j]!=r){
x<-rBer(1,p)
i<-i+1
}
I[j]<- i
}
return(I)
}
我对@987654335@ 进行了多次测试,它从带有参数r=2 和p=0.1 的负二项分布中生成了3 个随机数:
> rNB(3,2,0.1)
[1] 2 1 7
> rNB(3,2,0.1)
[1] 3 1 4
> rNB(3,2,0.1)
[1] 3 1 2
> rNB(3,2,0.1)
[1] 3 1 3
> rNB(3,2,0.1)
[1] 46 1 13
如您所见,我认为我的函数 (rNB) 无法正常工作,因为结果总是为第二个随机数生成 1。
谁能帮我纠正我的函数(rNB),以便从参数为n、r 和p 的负二项分布中生成n 随机数。其中r是成功次数,p是成功概率?
[[提示:关于几何分布和负二项分布的解释: 几何分布:在概率论和统计学中,几何分布是两种离散概率分布中的一种:
- 获得一次成功所需的伯努利试验次数 X 的概率分布,支持集合 {1,2,3,...}。
- 第一次成功前失败次数 Y = X − 1 的概率分布,支持集合 { 0, 1, 2, 3, ... }
负二项分布:负二项实验是一种统计实验,具有以下属性: 该实验由 x 次重复试验组成。 每个试验只能产生两种可能的结果。我们称其中一个结果为成功,另一个为失败。 以 P 表示的成功概率在每次试验中都是相同的。 试验是独立的;也就是说,一项试验的结果不会影响其他试验的结果。 实验继续进行,直到观察到 r 次成功,其中 r 是预先指定的。 ]]
【问题讨论】:
-
为什么不使用
rnbinom?rBer是在哪里定义的?只是rBer <- function(n, p) rbinom(n, 1, p)吗? -
感谢您的评论@AllanCameron。我不想使用像 rnbinom 这样的 r 函数。我想做我自己的功能。我在上面的解释中添加了 rBer 函数。
-
我想我理解vahid。我看到你正在使用函数
sample。这是您要使用的唯一随机生成函数吗?
标签: r random distribution