ランダムカテゴリカルデータを生成する方法は?


15

A、B、C、およびDの値を取ることができるカテゴリ変数があるとします。どのようにして10000個のランダムなデータポイントを生成し、それぞれの頻度を制御できますか?例えば:

A = 10%B = 20%C = 65%D = 5%

どうすればこれを行うことができますか?

回答:


35

サンプルの比率を、指定した比率と正確に一致させますか?それとも、これらの比率で非常に大きな母集団からサンプリングするという考えを表すためですか(サンプル比率は近いですが正確ではありません)?

正確な比率が必要な場合は、ブランドンの提案に従い、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 

6

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これがどれほど真にランダムであるかについての議論を辛抱強く待ちます


5
最初の行をに短縮/簡略化できx <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )、sampleへの呼び出しで10000を指定する必要はありません。これがデフォルトになります(明確にするために指定しても問題ありません)。
グレッグスノー

3
    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()、ランダムな範囲で:)


4
所望の周波数が本当に確率がある場合は、それを使用する方が簡単だろうprobの引数sample()sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
カラカル

ええ、それははるかにかわいいです。鉱山は単なる力です。
StasK 2011

これが実際にどのようにsample(,prob=)機能するかを示しているので、これを実際に賛成しました(少なくとも、ポーランド語 ではルーレットアルゴリズムと呼ばれます)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.