Відповіді:
Ви хочете, щоб пропорції у вибірці були саме вказаними пропорціями? чи представляти ідею вибірки з дуже великої сукупності з тими пропорціями (тому пропорції вибірки будуть близькими, але не точними)?
Якщо ви хочете точних пропорцій, ви можете дотримуватися пропозиції Брендона і використовувати функцію R sample
для рандомізації порядку вектора, який має точні пропорції.
Якщо ви хочете взяти вибірку з сукупності, але не обмежувати пропорції, щоб бути точними, ви все одно можете використовувати sample
функцію в R з таким prob
аргументом:
> 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
Використання R (http://cran.r-project.org/). Все, що я тут роблю, - це створення випадкового списку з вказаними вами пропорціями.
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)))
/ мене терпляче чекає аргументу щодо того, наскільки це справді випадково
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)))
Я не сумніваюся, що це справді випадково. Я маю на увазі, настільки runif()
випадково :)
prob
аргумент для sample()
:sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
Якщо ви користуєтеся SAS, останні версії надають подібну можливість витягувати з того, що він називає "табличним" розподілом, - що саме ви шукаєте, як частина функції Rand (). Див. 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) )
і вам не потрібно вказувати 10000 у виклику до вибірки, це було б за замовчуванням (хоча для наочності його не завадить вказувати).