Deseja que as proporções na amostra sejam exatamente as proporções indicadas? ou para representar a idéia de amostragem de uma população muito grande com essas proporções (para que as proporções da amostra sejam próximas, mas não exatas)?
Se você quiser as proporções exatas, poderá seguir a sugestão de Brandon e usar a sample
função R para randomizar a ordem de um vetor que tenha as proporções exatas.
Se você deseja fazer uma amostra da população, mas não restringir as proporções para ser exato, ainda poderá usar a sample
função em R com o prob
argumento da seguinte maneira:
> x <- sample( LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05) )
> prop.table(table(x))
x
A B C D
0.0965 0.1972 0.6544 0.0519
x <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )
e não precisa especificar os 10000 na chamada para amostra, esse seria o padrão (embora, para maior clareza, não seja necessário especificá-la).Não tenho dúvida de que isso é verdadeiramente aleatório. Quero dizer, na medida em que
runif()
é aleatório :)fonte
prob
argumento parasample()
:sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
sample(,prob=)
funciona (pelo menos em polonês, é chamado algoritmo de roleta).Se você é um usuário do SAS, as versões recentes oferecem uma capacidade semelhante de obter o que chama de distribuição de "tabela" - que é o que você procura, como parte da função Rand (). Consulte http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001466748.htm
fonte