首页 > 解决方案 > 概率与大小成比例的随机样本

问题描述

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

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

我有一张带有单词的表格,以及每个单词在文本中出现的频率。

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

标签: rstat

解决方案


如果您想要基于您的freq(转换为integer)的单词加权概率,那么也许

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

让我们看看优先考虑我们认为应该得到的单词的趋势是什么。为了演示,我将word根据它们进行采样freq(因为这对我来说更有意义),您可以根据需要移动变量。

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)

推荐阅读