【问题标题】:Random number generation from multinomial distribution in R using rmultinom() function使用 rmultinom() 函数从 R 中的多项分布生成随机数
【发布时间】:2020-03-28 08:13:43
【问题描述】:

我想从多项分布中生成一个大小为 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

我并不期待这个矩阵。任何帮助表示赞赏?

【问题讨论】:

  • 你能显示预期的输出吗?
  • 我刚刚将样本/结果命名为sam。说,sam=rmultinom(20,3,c(0.4,0.3,0.3))+1
  • 预期的输出应该是这样的1,2,2,2,2,3,1,1,1,3,3,3,2,1,2,3,...1。样本应包含1,2 and 3
  • 您确定要进行多项分布吗?您似乎只是在描述一个随机离散分布。听起来你想要sample(1:3,20,prob=c(0.4,0.3,0.3), replace=TRUE)

标签: r random numbers multinomial


【解决方案1】:

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

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

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

没问题,但您应该记住rmultinom 将返回每个值的count,即您可以将您的三个值视为行名(您的三个值可以是“red,绿、蓝”、“左、中、右”等)

> 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

在第一个样本(第一列)中,“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

我得到两个“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

HTH

【讨论】:

    【解决方案2】:

    怎么样

    q <- rmultinom(20,2,c(0.4,0.3,0.3))+1
    

    更新

    如果仍然想遵循多项式 PMF 并且具有较大值的更高频率,还有另一种变体

    q <- 3 - rmultinom(20,2,c(0.4,0.3,0.3))
    

    【讨论】:

    • @MrFlick not right 到底是什么?也许你应该熟悉二项分布?看看 PMF 以及我的更新
    • @MrFlick 你为什么要混合这个或那个?我很清楚多项分布是什么,它的 PMF、属性等。不,它们的总和不为 20,采样值总和为值为 2 的第二个参数。这就是原来的 OP 问题,现在仍然是询问。
    • @MrFlick sample of size 20 from the multinomial distribution with three values such as 1,2 and 3 是问题所在。所以是的,我发布的两个命题将返回 20 个样本大小,样本中有 3 个值,总共 60 个值,是的,使用多项分布。也许你应该再读一遍问题?据我所知,您正试图将原始 OP 问题扭曲到您的议程中,无论它是什么。
    【解决方案3】:

    您的代码从多项分布中进行 20 次大小为 3(每次)的绘制——这意味着您将获得一个包含 20 列 (n = 20) 和 3 行的矩阵(prob 参数的长度 = 3 ),其中每行的总和也是 3(大小 = 3)。多项式的经典解释是你有K 球放入size 盒子中,每个盒子都有给定的概率——结果显示每个盒子里都有很多球。您的代码将所有内容加 1,因此就好像每个盒子里已经有 1 个球,每行的总和实际上是 6。

    你的 cmets 和你对你想要的结果的描述听起来不像你关心“球和盒子”。听起来您想从集合{1, 2, 3} 中抽取 20 个带有替换的数字。如果是这种情况,请使用sample

    sample(1:3, size = 20, replace = TRUE, prob = c(0.4,0.3,0.3))
    

    【讨论】:

    • 好吧,它要么是多项式的(正如 OP 所要求的那样),要么不是。多项式有一个非常特殊的性质,比如样本总和等于询问的数量。
    • @SeverinPappadeux 基于 OP 的 cmets,我认为 OP 在不理解其定义的情况下使用术语“多项式”。因此,我区分了 OP 代码的功能(多项式)和我对 OP 描述的解释(样本 20 个数字,替换为一组 3 个)。
    • @SeverinPappadeux ,例如,当 OP 说 “预期的输出应该是这样的 1,2,2,2,2,3,1,1,1,3,3,3,2,1,2,3,...1 时,他们似乎根本没有考虑总和样本。
    • 嗯,我很高兴听到关于 OP 问题的任何更新,但正如我所展示的,它可以使用多项分布来完成
    • 另请注意 OP 的请求 “我不期待这个矩阵”。您可能希望将结果包装在 c() 中以更接近 OP 的要求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多