2014-09-29 2 views
0

비례 샘플링 I는 다음과 같은 데이터 세트가 생성 가지고층화 추출법 또는 R

myData <- data.frame(a=1:N,b=round(rnorm(N),2),group=round(rnorm(N,4),0)) 

데이터의 모양 등이

enter image description here

I는 성층 샘플 세트를 생성하고자 주어진 샘플 크기, 즉, 50을 가진 myData의 결과 샘플 세트는 "그룹"에 대한 원래 데이터 세트의 비율 배분을 따라야합니다. 예를 들어, myData 그룹 4에 속하는 20 개 기록, 그 결과 데이터 세트가 50*20/200=5 기록으로 값 < 1을 지정, R.

에서

답변

1

당신은 my stratified function를 사용할 수있는 수행하는 방법 그룹 4에 속하는해야을 가지고 가정하여 비율은 다음과 같습니다.

## Sample data. Seed for reproducibility 
set.seed(1) 
N <- 50 
myData <- data.frame(a=1:N,b=round(rnorm(N),2),group=round(rnorm(N,4),0)) 

## Taking the sample 
out <- stratified(myData, "group", .3) 
out 
#  a  b group 
# 17 17 -0.02  2 
# 8 8 0.74  3 
# 25 25 0.62  3 
# 49 49 -0.11  3 
# 4 4 1.60  3 
# 26 26 -0.06  4 
# 27 27 -0.16  4 
# 7 7 0.49  4 
# 12 12 0.39  4 
# 40 40 0.76  4 
# 32 32 -0.10  4 
# 9 9 0.58  5 
# 42 42 -0.25  5 
# 43 43 0.70  5 
# 37 37 -0.39  5 
# 11 11 1.51  6 

예상했던 것과 몇 분의 숫자를 비교하십시오.

round(table(myData$group) * .3) 
# 
# 2 3 4 5 6 
# 1 4 6 4 1 
table(out$group) 
# 
# 2 3 4 5 6 
# 1 4 6 4 1 

당신은 쉽게 다음과 같이 그룹별로 샘플의 고정 번호를 수행 할 수 있습니다 답장을 보내

stratified(myData, "group", 2) 
#  a  b group 
# 34 34 -0.05  2 
# 17 17 -0.02  2 
# 49 49 -0.11  3 
# 22 22 0.78  3 
# 12 12 0.39  4 
# 7 7 0.49  4 
# 18 18 0.94  5 
# 33 33 0.39  5 
# 45 45 -0.69  6 
# 11 11 1.51  6 
+0

아난다, 감사합니다. 귀하의 코드에 관한 질문이 있습니다. <- lapply ( names (df.split), function (x) df.split [[x]] [sample (df.table [x], n [x] = replace),]) 대체품으로 샘플링하는 것처럼 보입니다. 이로 인해 중복 샘플이 발생할 수 있습니다. 그게 맞습니까? – user288609

+0

@ user288609 무엇이 문제입니까? :-) 그 시점까지 모든 코드는 지층 당 샘플 크기를 결정하는 것입니다. 이것이 샘플링이 실제로 이루어지는 단계입니다. 그룹별로 분리 된 'data.frame'을 순환하며 각 하위 집합에서 필요한 수의 행을 샘플링합니다. – A5C1D2H2I1M1N2O1R2T1

+0

@ user288609, no. 함수를 호출 할 때'replace = TRUE'가 아니면 안됩니다. (미안, 귀하의 질문에 내 코멘트를 쓰고 시작했을 때 거기에 없었어요.) – A5C1D2H2I1M1N2O1R2T1

관련 문제