随机样本的概率与大小成正比

时间:2019-07-10 17:55:45

标签: r stat

我在一个统计项目中,我有一个带有单词的表格,每个单词在文本中的出现频率,我想要的是一个样本,其结果是单词出现频率最高

你好,下午好,希望有人能帮助我。

我有一张桌子,上面有单词,每个单词出现在文本中的频率。

word <- c("banana", "watermelon", "water", "apple", "blue", "sky")
freq <- c("10", "2", "5", "8", "2", "1")

table < -cbind.data.frame(word,freq)
#        word    freq
# 1     banana   10
# 2 watermelon    2
# 3      water    5
# 4      apple    8
# 5       blue    2
# 6        sky    1

sample(table$freq,2)
# [1] 2 5

word <- c("banana", "watermelon", "water", "apple", "blue", "sky")
freq<- c("10", "2", "5", "8", "2", "1")

table<-cbind.data.frame(word,freq)
sample(table$freq,2)

我想要的是:

# [1] 10 8

1 个答案:

答案 0 :(得分:2)

如果您希望基于freq(转换为integer)对单词进行加权概率计算,那么

sample(tb$freq, size = 2, prob = tb$freq)

让我们看看这种趋势会优先考虑我们认为应该得到的单词。为了演示,我将基于wordfreq进行采样(因为这对我来说更有意义),您可以随意移动变量。

samps <- replicate(1000, sample(tb$word, size = 2, prob = tb$freq))
str(samps)
#  chr [1:2, 1:1000] "water" "apple" "water" "banana" "watermelon" "banana" ...
sort(table(samps))
# samps
#        sky watermelon       blue      water      apple     banana 
#         93        151        166        370        572        648 

replicate调用给我们一个matrix,因此对频率进行排序,我们发现banana比其他所有频率更有可能。

我们可以看到比例大约是正确的

sort(table(samps)) / sum(table(samps))
# samps
#        sky watermelon       blue      water      apple     banana 
#     0.0465     0.0755     0.0830     0.1850     0.2860     0.3240 
tb$pct <- tb$freq / sum(tb$freq)
tb <- tb[ order(tb$pct), ]
tb
#   freq       word        pct
# 6    1        sky 0.03571429
# 2    2 watermelon 0.07142857
# 5    2       blue 0.07142857
# 3    5      water 0.17857143
# 4    8      apple 0.28571429
# 1   10     banana 0.35714286

数据

word <- c("banana", "watermelon", "water", "apple", "blue", "sky")
freq <- as.integer(c("10", "2", "5", "8", "2", "1"))
tb <- data.frame(freq, word)