Rasgele kategorik veriler nasıl oluşturulur?


15

Diyelim ki A, B, C ve D değerlerini alabilen kategorik bir değişkenim var. 10000 rasgele veri noktası üretebilir ve her birinin frekansını nasıl kontrol edebilirim? Örneğin:

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

Bunu nasıl yapabileceğime dair bir fikrin var mı?

Yanıtlar:


35

Örnekteki oranların tam olarak belirtilen oranlar olmasını ister misiniz? ya da bu oranlarla çok büyük bir popülasyondan örnekleme fikrini temsil etmek (yani örnek oranları yakın fakat kesin değil)?

Kesin oranları istiyorsanız, Brandon'ın önerisini takip edebilir ve kesin oranları sampleolan bir vektörün sırasını rastgele seçmek için R işlevini kullanabilirsiniz .

Popülasyondan örnekleme yapmak, ancak oranları tam olarak kısıtlamak istemiyorsanız, yine samplede R'deki işlevi aşağıdaki probgibi bir argümanla kullanabilirsiniz:

> 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 kullanma (http://cran.r-project.org/). Burada yaptığım tek şey, belirttiğiniz oranlarla rastgele bir liste oluşturmak.

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 Bunun gerçekten ne kadar rasgele olduğunu tartışmak için sabırla bekler


5
İlk satırınızı kısaltabilir / basitleştirebilirsiniz x <- rep( c("A","B","C","D"), 10000*c(0.1,0.2,0.65,0.05) )ve örnekleme çağrısında 10000'i belirtmeniz gerekmez, bu varsayılan değerdir (netlik için belirtmek acıtmaz).
Greg Snow

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)))

Hiç şüphe yok ki bu gerçekten rastgele. Yani, runif()rastgele olduğu kadar :)


4
İstenen frekanslar gerçekten olasılıklar ise, şu probargümanı kullanmak daha kolay olurdu sample():sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
caracal

Evet, çok daha şirin. Benimki sadece kaba bir güç.
StasK

Ben aslında nasıl sample(,prob=)çalıştığını gösterir (en azından lehçe rulet algoritması denir) gösterir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.