Yanıtlar:
Ö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
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
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 :)
probargümanı kullanmak daha kolay olurdu sample():sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
SAS kullanıcısıysanız, son sürümler, Rand () işlevinin bir parçası olarak, aradığınız şey olan "tablo" dağıtımı dediğinden benzer bir özellik sağlar. Bkz. 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) )ve örnekleme çağrısında 10000'i belirtmeniz gerekmez, bu varsayılan değerdir (netlik için belirtmek acıtmaz).