R 将概率分配给装箱样本的样本选择
我有一个表,包含超过400000行,约200列。每行都有一列,其中包含一个从0到140的位置号,可以是十进制(例如45.6345)。我已按5的位置增量对行进行了装箱。我的第一个存储箱包含位置为(0-5)的所有数据行。我的最后一个存储箱包含位置为(135140)的行。要存储数据,我使用了以下代码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)
#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)