如何使用Rbinom对矩阵的每一行进行降采样?

时间:2019-05-20 16:20:40

标签: r

我正在尝试从数字矩阵中进行下采样。每个数字都是我们看到某个特定事件的次数。通过下采样,我的意思是我想从每一行中伪随机地选择值,以便它们等于当前值的1/30。

附件大致是我想离开的。这几乎是精确的减少,而不是我可能想要的稍微随机的东西,但这只是一个粗略的指导。

An example before and after table
        Col 1   Col 2
Frank   930     900
David   10000   12000
Rosa    7500    6900
Simone  500     460

        Col 1   Col 2
Frank   30      28
David   300     250
Rosa    210     310
Simone  18      40

目标是模拟我们是否进行了更少的实验。矩阵中的所有值都在0到200k之间。当前,每列大约有4.5万行,总和为30到4000万。目标是将下采样降低约30倍,因此我最终得到的每一列总计为1-150万。如有必要,它可以增加到大约200万,但不能真正低于100万。我不想将每个单元格除以30或随机抽样。

我最初的计划是填充一个列表,使每个行名称等于其出现的次数,而不是从该列表中随机选择一定的次数。有人建议我尝试使用rbinom函数,但无法弄清楚如何正确使用它。我已经介绍了我对rbinom的每个变体所做的工作,以及我从下面的每个变体中大致了解的内容。如果有人可以用正确的方向指出我,那就太好了。

我想得出一个矩阵,该矩阵具有与开始时相同的行数,其中每一列的总和在1到150万之间。只要保留行名,行的顺序就无关紧要。

我正在R中工作。

#Produces a list that's all 0s.  
dbinom(foo$col1,1500000, 0.03)

#Produces a list that's all 0s    
pbinom(foo$col1,1500000, 0.03)

#Produces a list that's mostly NAs
qbinom(foo$col1,1500000, 1/30)

#Gives insanely high numbers (~150000) on every row
rbinom(foo$col1,1500000, 0.03)

我尝试将其发布在Cross Validated上,但它更多是编程问题,而不是我认为的统计信息。

0 个答案:

没有答案