Случайная выборка с вероятностью, пропорциональной размеру - PullRequest
0 голосов
/ 10 июля 2019

Я нахожусь в статистическом проекте, у меня есть таблица со словами и частотой, которую каждый из них имеет в тексте, я хочу получить образец, в результате которого слова имеют наибольшую частоту

Здравствуйте, добрый день, я надеюсь, что кто-то может мне помочь.

У меня есть таблица со словами и как часто каждый из них появляется в тексте.

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 Ответ

2 голосов
/ 10 июля 2019

Если вам нужна взвешенная вероятность слова на основе вашего 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)
...