3

2k グループに分散された 155k ポイントがあります。ポイントは3種類あります(A+B+C=#points)

頻度分布:

  Gr #clients    #A    #B    #C
-------------------------------
  01      100    80    10    10
  02       10     0     3     7

2000      400   300    80    20
--------------------------------
TOTAL: 155000 93000 46500 15500

サンプル内の各タイプのポイントの比率が母集団内と同じであるなど、ポイントのランダムなグループを合計 6,000 ポイントに選択したいと考えています。

RまたはSASでこれを行う方法はありますか? または、単純な無作為調査を実行してから、バランスの取れたサンプルが得られるまで、グループ置換のアルゴリズムを設計する必要がありますか?

4

2 に答える 2

1

例 1: これは、SAS で行う方法です。コードに神経質になる場合は、以下の例 2 の簡単な方法を使用してください。

注:あなたが説明していることは、クラスターサンプルではなく比例サンプルのように聞こえるので、ここで示したものです. それがあなたのニーズを満たすことを願っています。

      /******** sort by strata *****/
      proc sort data=MED_pts_155k ; by GRoup A_B_C clients ; run ;

      /******** create sample design ***/
      proc surveyselect noprint  
      data= MED_pts_155k   
      method=srs  
      seed = 7  
      n = 6000  
      out = sample_design ;  
      strata GRoup A_B_C  /  
        alloc=prop NOSAMPLE
        allocmin = 2  ; /*** min of 2 per stratum.  ****/  
     run ;

    /******** pull sample **********/
    proc surveyselect noprint
      data= MED_pts_155k
      method=sys
      seed = &seed 
      n = sample_design
      out = MY_SAMPLE ;
     strata GRoup A_B_C  ; 
    run ;

「alloc = prop」オプションは、比例 (つまり「偶数」) サンプリングを提供します。SAS の「nosample」オプションを使用すると、サンプル デザインの概要を示す別のファイルを生成できます。次に、実際にサンプルを抽出する第 2 段階でデザインを使用します。これが面倒な場合は、「nosample」オプションをオフにして、以下のより単純な例で行ったように、サンプルのプルに直接進むことができます。

上記の 2 番目のステップでは、単純なランダム サンプル (SRS) ではなく、'method = SYS' に切り替えることを選択したことに注意してください。SRS も機能しますが、クライアントごとに異なるタイプの応答がある可能性があるため、クライアントの範囲全体で代表的な方法でサンプリングすることをお勧めします。これを行うには、クライアントごとに各階層内でソートし、クライアントの範囲全体で意図的に均等にサンプリングします。これは「系統的」サンプル (SYS) と呼ばれます。

例 2: 単純化

コードを減らしたい場合は、すべてを 1 つの簡単な手順で行うこともできます。サンプル デザインを別のファイルに分割して表示する必要はありません。

/******** sort by strata *****/
proc sort data=MED_pts_155k ; by GRoup A_B_C ; run ;

/******** pull sample **********/
proc surveyselect noprint
  data= MED_pts_155k
  method= SRS
  seed = 7 
  n = 6000
  out = MY_SAMPLE ;
 strata GRoup A_B_C  / 
    alloc=prop 
    allocmin = 2  ; 
run ;

どちらの例でも、「GRoup」と、a、b の値を含む 2 番目の変数「A_B_C」という 2 つの層化変数があると想定しています。またはc。それが役立つことを願っています。クラスター サンプリングは SAS でも可能ですが、前述のように、ここでは比例サンプルを示しました。これが必要と思われるためです。クラスタ サンプリングについて説明するには、もう少しスペースが必要です。

于 2016-02-26T18:37:42.227 に答える
0

私はあなたの偽のデータを理解していないので、自分で作成します。

独自の独自のグループを構築すると仮定しています。数値1:2000を使用して実行しましたが、このコードは任意のグループ タイプで実行できます。

# let's make some fake data with 155k points distributed in 2k groups
x <- 
    data.frame(
        groupname = sample( x = 1:2000 , size = 155000 , replace = TRUE ) ,
        anothercol = 1 ,
        andanothercol = "hi"
    )

# look at your data frame `x`
head( x )
# so long as you've constructed a `groupname` variable in your data, it's easy

# calculate the proportion of each group in the total
groupwise.prob <- table( x$groupname ) / nrow( x )
# store that into a probability vector

# convert this to a data frame
prob.frame <- data.frame( groupwise.prob )

head( prob.frame )

# rename the `Var1` column to match your group name variable on `x`
names( prob.frame )[ 1 ] <- 'groupname'

# rename the `Freq` column to say what it is on `x`
names( prob.frame )[ 2 ] <- 'prob'

# merge these individual probabilities back onto your data frame
x <- merge( x , prob.frame , all.x = TRUE )

# now just use the sample function's prob= parameter off of that
# and scale down the size to what you want
recs.to.samp <-
    sample( 
        1:nrow( x ) , 
        size = 6000 , 
        replace = FALSE , 
        prob = x$prob 
    )

# and now here's your new sample, with proportions in tact
y <- x[ recs.to.samp , ]

head( y )
于 2013-02-26T11:48:58.103 に答える