¿Desea que las proporciones en la muestra sean exactamente las proporciones establecidas? o para representar la idea de tomar muestras de una población muy grande con esas proporciones (para que las proporciones de la muestra sean cercanas pero no exactas)?
Si desea las proporciones exactas, puede seguir la sugerencia de Brandon y utilizar la sample
función R para aleatorizar el orden de un vector que tenga las proporciones exactas.
Si desea muestrear de la población, pero no restringir las proporciones para que sean exactas, aún puede usar la sample
función en R con el prob
argumento de la siguiente manera:
> 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) )
y no necesita especificar el 10000 en la llamada a la muestra, eso sería lo predeterminado (aunque para mayor claridad no hace daño especificarlo).No tengo dudas de que esto es realmente al azar. Quiero decir, en la medida en que
runif()
sea aleatorio :)fuente
prob
argumento parasample()
:sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
sample(,prob=)
funciona (al menos en polaco se llama algoritmo de ruleta).Si es un usuario de SAS, las versiones recientes ofrecen una capacidad similar para extraer de lo que llama una distribución de "tabla", que es lo que está buscando, como parte de la función Rand (). Ver http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001466748.htm
fuente