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ı sample
olan 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 sample
de R'deki işlevi aşağıdaki prob
gibi 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 :)
prob
argü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).