如何生成随机分类数据?


15

假设我有一个类别变量,该变量可以取值A,B,C和D。如何生成10000个随机数据点并控制每个数据点的频率?例如:

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

有什么想法可以做到这一点吗?

Answers:


35

您是否希望样本中的比例与所述比例完全相同?还是代表从具有这些比例的非常大的人群中抽样的想法(因此抽样比例将接近但不精确)?

如果需要精确的比例,则可以遵循Brandon的建议,并使用R sample函数随机化具有精确比例的向量的顺序。

如果要从总体中采样,但不限制比例精确,则仍可以将sampleR中的函数与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) )并且不需要在样本调用中指定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))
caracal

是的,这很可爱。我的只是蛮力。
StasK 2011年

我实际上对此表示赞同,因为它显示了 sample(,prob=)工作原理(至少在波兰语中它被称为轮盘赌算法)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.