Ответы:
Вы хотите, чтобы пропорции в образце были точно такими, как указано? или чтобы представить идею выборки из очень большой популяции с этими пропорциями (чтобы пропорции выборки были близки, но не точны)?
Если вам нужны точные пропорции, вы можете следовать предложению Брэндона и использовать sample
функцию R, чтобы рандомизировать порядок вектора, который имеет точные пропорции.
Если вы хотите произвести выборку из совокупности, но не ограничивать пропорции, чтобы быть точными, вы все равно можете использовать 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)))
/ me терпеливо ждет спора о том, насколько это действительно случайно
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 в вызове для выборки, это будет значение по умолчанию (хотя для ясности его не помешает указать).