무작위 범주 형 데이터를 생성하는 방법?


15

값 A, B, C 및 D를 취할 수있는 범주 형 변수가 있다고 가정 해 봅시다. 10000 개의 임의의 데이터 포인트를 생성하고 각각의 빈도를 제어하는 ​​방법은 무엇입니까? 예를 들면 다음과 같습니다.

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

내가 어떻게 할 수있는 아이디어가 있습니까?

답변:


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을 지정할 필요가 없습니다. 기본값은 명확합니다.
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)))

의심 할 여지없이 이것이 실제로 무작위입니다. 나는 runif()임의 의 범위까지 :)


4
원하는 빈도가 실제로 확률이라면 다음에 대한 prob인수 를 사용하는 것이 더 쉬울 것 입니다 sample().sample(LETTERS[1:4], 10000, replace=TRUE, prob=c(0.1, 0.2, 0.65, 0.05))
caracal

예, 훨씬 귀엽습니다. 광산은 단지 무차별적인 힘입니다.
StasK

실제로 sample(,prob=)작동 방식을 보여주기 때문에 실제로 이것을 상향 조정했습니다 (적어도 폴란드어에서는 룰렛 알고리즘이라고합니다).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.