Risposte:
Vuoi che le proporzioni nel campione siano esattamente le proporzioni dichiarate? o per rappresentare l'idea di campionare da una popolazione molto ampia con quelle proporzioni (quindi le proporzioni del campione saranno vicine ma non esatte)?
Se vuoi le proporzioni esatte, puoi seguire il suggerimento di Brandon e usare la samplefunzione R per randomizzare l'ordine di un vettore che ha le proporzioni esatte.
Se vuoi campionare dalla popolazione, ma non limitare le proporzioni per essere esatti, puoi comunque usare la samplefunzione in R con l' probargomento in questo modo:
> 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
Utilizzando R (http://cran.r-project.org/). Tutto quello che sto facendo qui è creare un elenco casuale con le proporzioni specificate.
x <- c(rep("A",0.1*10000),rep("B",0.2*10000),rep("C",0.65*10000),rep("D",0.05*10000))
# cheating
x <- sample(x, 10000)
prop.table(summary(as.factor(x)))
/ me Aspetta pazientemente una discussione su quanto sia davvero casuale
n <- 10000
blah <- character(n)
u <- runif(n)
blah[u<=0.1] <- "A"
blah[u>0.1 & u<=0.3] <- "B"
blah[u>0.3 & u<=0.95] <- "C"
blah[u>0.95] <- "D"
table(blah)
prop.table(summary(as.factor(blah)))
Non ho dubbi, questo è davvero casuale. Voglio dire, nella misura in cui runif()è casuale :)
probargomento per sample():sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
Se sei un utente SAS, le versioni recenti offrono un'analoga capacità di estrarre da quella che chiama una distribuzione "table" - che è quello che stai cercando, come parte della funzione Rand (). Vedi http://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a001466748.htm
x <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )e non è necessario specificare il 10000 nella chiamata da campionare, sarebbe l'impostazione predefinita (anche se per chiarezza non fa male specificarlo).