R 将概率分配给装箱样本的样本选择

R 将概率分配给装箱样本的样本选择,r,selection,probability,sample,bin,R,Selection,Probability,Sample,Bin,我有一个表,包含超过400000行,约200列。每行都有一列,其中包含一个从0到140的位置号,可以是十进制(例如45.6345)。我已按5的位置增量对行进行了装箱。我的第一个存储箱包含位置为(0-5)的所有数据行。我的最后一个存储箱包含位置为(135140)的行。要存储数据,我使用了以下代码 #what is the maximum bin value. Add 1 in case the value is a decimal maxposbin = max(ceiling(data$POS)

我有一个表,包含超过400000行,约200列。每行都有一列,其中包含一个从0到140的位置号,可以是十进制(例如45.6345)。我已按5的位置增量对行进行了装箱。我的第一个存储箱包含位置为(0-5)的所有数据行。我的最后一个存储箱包含位置为(135140)的行。要存储数据,我使用了以下代码

#what is the maximum bin value. Add 1 in case the value is a decimal
maxposbin = max(ceiling(data$POS),na.rm=TRUE)+1
#what is the maximum position value
maxposvalue = max(data$POS, na.rm=TRUE)
#Assign the positions to a variable
posvalues = data$POS
#Cut the position values into bins by intervals of 5
posbin = cut(posvalues, breaks=seq(from=0,to=maxposbin, by=5))
#Make a frequency table to see how many rows are in each bin
posbinned = as.data.frame(table(posbin))
#Plot the frequency distribution
barplot(posbinned$Freq)
我的posbined表如下所示:

  posbin   Freq     binprob
1      (0,5]   8533 0.031925105
2     (5,10]   7318 0.037225597
3    (10,15]   9324 0.029216744
4    (15,20]  10576 0.025758029
5    (20,25]   7065 0.038558658
6    (25,30]   3178 0.085719609
7    (30,35]   5900 0.046172359
8    (35,40]   8132 0.033499375
9    (40,45]   8335 0.032683493
10   (45,50]  16409 0.016601677
11   (50,55]  20481 0.013300958
12   (55,60]  25978 0.010486447
13   (60,65] 161292 0.001688967
14   (65,70]  26063 0.010452247
15   (70,75]  11427 0.023839758
16   (75,80]  11232 0.024253643
17   (80,85]   5129 0.053113066
18   (85,90]  11180 0.024366451
19   (90,95]   4188 0.065047019
20  (95,100]   9871 0.027597702
21 (100,105]  13645 0.019964596
22 (105,110]  13294 0.020491719
23 (110,115]   8791 0.030988160
24 (115,120]   3583 0.076030398
25 (120,125]   4874 0.055891858
26 (125,130]   7304 0.037296949
27 (130,135]   2997 0.090896536
28 (135,140]   7376 0.036932879
我想根据分配给每个箱子的概率,在此数据集中选择一个定义的行数。我得到的样本应该在各个位置(0到140)上均匀分布。例如,bin 13在该bin中的行数最多,因此将为其分配从该bin中选择行的最低概率。bin 27的行数最少,且选择概率最高。每个bin应与结果samp中的每个其他bin近似相等我给每个箱子分配了一个概率,它包含在变量posbinned$binprob中

我计算了相对于包含最少行的bin 27的bin概率。例如,bin 7的行数大约是bin 27的两倍,因此将行选为bin 27的可能性应该是bin 27的一半。然后我进行了调整,使28个bin概率之和等于1。我对概率统计数据有点粗略,所以可能这不是bin 27你有正确的想法吗

如何使用“posbined”表中的bin定义的集合概率从“data”中抽取样本而不进行替换?目前我没有包含位置及其对应bin(例如(0,5))的表。我只是不确定最好的方法是什么


谢谢。

第一步是识别
数据中每行的箱子。由于箱子是从0开始(但不包括)5的增量,这可以通过简单的算术完成:

bin.number <- ceiling(data$POS / 5)

bin.number尝试
sample()
将参数
prob
设置为第二列的倒数?我认为第一部分会起作用,但是根据bin分配概率如何?1/bin.freq给出了非常小的数字。bin概率之和不需要等于1吗?我对概率的理解有点粗糙,但我认为bin概率的总和应该等于1。我在上面添加了我的binprob列,以显示我分配给每个bin的概率。例如,bin 7的行数大约是bin 27的两倍,因此选择行的可能性应该是bin 27的一半。我计算了与bin 27相关的所有内容,并进行了调整,使总和等于1。在
示例中
,则
prob
参数不需要求和为1。它只是一个权重,权重将由函数进行适当的标准化。例如,从
表(示例(1:2,1000,replace=t,c(1,10)))
您可以看到,它选择2的频率大约是选择1的10倍。也许他们最好调用参数
weight
,而不是
prob
。好的,谢谢您的解释。我刚刚意识到我有一些负值(最低值为-0.1900)在“我的位置”列中,我需要找出如何将它们与第一个位置放在一起…我将尝试使用一个不包含负值的数据集,然后尝试使用它们。好的,部分问题是我的一些位置是
bin.freq <- posbinned$Freq[bin.number]
num.to.sample <- 100    # Select the number of samples you want
rows <- sample(1:nrow(data), size=num.to.sample, replace=FALSE, prob=1/bin.freq)