使用 rmultinom() 函数从 R 中的多项分布生成随机数

Udd*_*din 2 random numbers r multinomial

我想从具有三个值(例如 )的多项分布生成大小为 20 的样本1,2 and 3。例如,样本可以是这样的sam=(1,2,2,2,2,3,1,1,1,3,3,3,2,1,2,3,...1)

下面的代码可以工作,但没有得到预期的结果

> rmultinom(20,3,c(0.4,0.3,0.3))+1
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,]    1    1    3    2    2    1    1    2    3     2     3     2     1     2     2     3     1     2     2     2
[2,]    2    1    2    1    3    2    4    2    1     2     2     1     1     2     1     2     3     2     3     3
[3,]    3    4    1    3    1    3    1    2    2     2     1     3     4     2     3     1     2     2     1     1
Run Code Online (Sandbox Code Playgroud)

我不期待这个矩阵。有什么帮助值得赞赏吗?

小智 6

我想从多项分布生成大小为 20 的样本

没问题,但你应该记住每个样本都是一个向量,例如,如果你掷三个骰子,你可以得到 (2,5,1),或 (6,2,4),或 (3,3,3) 等。
你还应该记住,rmultinom(n, size, prob)“n”是样本大小,“size”是放入 K 个盒子中的物体总数(当掷三个骰子时,大小为 3,K=6)。

具有三个值,例如 1,2 和 3。

没问题,但您应该记住,它将rmultinom返回每个值的计数,即您可以将您的三个值视为行名称(您的三个值可以是“红色,绿色,蓝色”,“左,中,右”, ETC。)

> rmultinom(n=20, size=3, prob=c(0.4,0.3,0.3))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,]    2    1    1    2    1    1    3    1    1     3     2     1     0     0     0     1     3     2     2     1
[2,]    1    1    1    1    0    1    0    1    2     0     1     2     2     2     1     1     0     0     1     0
[3,]    0    1    1    0    2    1    0    1    0     0     0     0     1     1     2     1     0     1     0     2
Run Code Online (Sandbox Code Playgroud)

在第一个样本(第一列)中,“1”出现 2 次,“2”出现 1 次,“3”出现 0 次。在第二个和第三个样本中,每个值出现 1 次,...在第七个样本中,“1”出现 3 次,依此类推。
由于您将三个 ( size=3) 对象放入 K=3 个盒子中(盒子的数量与向量prob),每列的总和就是对象的数量。

例如,样本可以是这样的sam=(1,2,2,2,2,3,1,1,1,3,3,3,2,1,2,3,...1)

这看起来不像是大小为 20 的样本,因为单个多项试验的结果是一个向量,而不是一个数字。

让我们回到骰子。我掷骰子size=3

> rmultinom(n=1, size=3, prob=rep(1/6,6))
     [,1]  
[1,]    0
[2,]    2
[3,]    0
[4,]    0
[5,]    1
[6,]    0
Run Code Online (Sandbox Code Playgroud)

我得到两个“2”和一个“5”。这是尺寸 1 的样本。这是尺寸 10 的样本:

> rmultinom(n=10, size=3, prob=rep(1/6,6))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,]    0    0    1    0    0    0    0    1    1     1
[2,]    1    1    0    3    0    0    1    1    1     1
[3,]    2    1    0    0    0    0    2    0    0     0
[4,]    0    0    2    0    1    1    0    1    0     1
[5,]    0    0    0    0    1    2    0    0    1     0
[6,]    0    1    0    0    1    0    0    0    0     0
Run Code Online (Sandbox Code Playgroud)

华泰