回答:
サンプルの比率を、指定した比率と正確に一致させますか?それとも、これらの比率で非常に大きな母集団からサンプリングするという考えを表すためですか(サンプル比率は近いですが正確ではありません)?
正確な比率が必要な場合は、ブランドンの提案に従い、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)))
/ 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) )
、sampleへの呼び出しで10000を指定する必要はありません。これがデフォルトになります(明確にするために指定しても問題ありません)。