データセットからクォータサンプルを選択する方法こんにちは、みんな
私は代表的なサンプルを扱う研究に取り組んでいます。すでにデータを収集していますが、代表基準 4 を満たすサブセットを選択する必要があります。サンプルは、次の割り当てを満たす必要があります。
-
性別:男性50%、女性50%。
-
年齢別では、18歳から30歳が1/3、31歳から50歳が1/3、51歳以上が1/3となっています。
-
世帯収入レベル:低所得者層が1/3、中所得者層が1/3、高所得者層が1/3。
調査対象人口の1/5を市内の5つの地域(北部、南部、中央部、東部、西部)ごとに調査
このサンプルを作成するにはどうすればいいでしょうか?
私はJMPプロ17を使用しています
データアクセスデータのブレンドとクリーンアップRe: データ セットから割り当てサンプルを選択する方法教科書の練習問題のようですが、解答が載っている章はありますか?
Re: データ セットから割り当てサンプルを選択する方法いいえ
実際、私はこの割り当てサンプリング手法を使用してプロジェクトのデータ分析を開始するために、同僚とこの問題について話し合っていました。Re: データ セットから割り当てサンプルを選択する方法これは複雑な問題です。データを取得するデータ テーブルの大きさはどれくらいですか。取得するサンプルのサイズはどれくらいですか。4 つの列の組み合わせは 90 通りあります。あなたと同僚は、この問題へのアプローチ方法についてアイデアを思いつきましたか。
Re: データ セットから割り当てサンプルを選択する方法サンプルデータを分布の実際のシェアではなく、人為的な割合で選択したいのですか?
女性、51歳以上、高収入、北部はどうでしょうか。
1/2 * 1/3 * 1/3 * 1/5 でしょうか? (*)
これは計算が非常に簡単ですが、厳しすぎる可能性があり、意図的ではないのでしょうか?
元の分布に、女性、51 歳以上、高収入、北部が存在しないケースを考えてみましょう。
一方、1/2、1/3、1/3、1/5 のみを満たす必要がある場合は、女性、51 歳以上、高収入、北部のサンプル データが 0 の極端なケースを作成することもできます。
Re: データ セットから割り当てサンプルを選択する方法これはエレガントではありませんし、うまくいくかどうかもわかりませんが、うまくいくかもしれません。各基準に対して 0,1 列を作成し、それらを 1 つの 0,1 列に結合できます。ここで、1 は個々の基準列がすべて =1 であったことを意味します。これで目的のサブセットが得られます。また、そのような行からランダムに選択する場合は、その 0,1 列で階層化された検証列を使用します。前述したように、エレガントではありませんが、うまくいく可能性があります。
Re: データ セットから割り当てサンプルを選択する方法データ テーブル - 理想的なケース:
New Table( "quota_samples",
Add Rows( 100000 ),
Compress File When Saved( 1 ),
New Column( "gender",
Character,
Formula( Match( Floor( Random Uniform() * 2 ), 0, "M", "F" ) ),
Compact(),
Set Selected
),
New Column( "income",
Character,
Formula(
Match( Floor( Random Uniform() * 3 ), 0, "low", 1, "medium", "high" )
),
Compact()
),
New Column( "region",
Character,
Formula(
Match( Floor( Random Uniform() * 5 ),
0, "N",
1, "S",
2, "W",
3, "E",
"C"
)
)
),
New Column( "age",
Character,
Formula(
Match( Floor( Random Uniform() * 3 ), 0, "young", 1, "medium", "old" )
)
)
)
Re: データ セットから割り当てサンプルを選択する方法このような理想的なテーブルの場合、(データ セットの確率が希望する割合に適合する場合)、ランダム サンプル (バリアントごとのランダム サンプル、バリアントごとの特定のサンプル数)、またはこれら 3 つすべての組み合わせを選択できます。
要求された割合(1/2、1/3、1/3、1/5)のサブグループが常に取得されます。

// random sampling : full data set
if(not(current data table() << has column ("cum_prob")),New Column( "cum_prob",
Formula(
Col Rank( random uniform()) / (
Col Number( 1 ))
)
));
// random sampling : per variant
if(not(current data table() << has column ("cum_prob_indiv")),New Column( "cum_prob_indiv",
Formula(
tmp = random uniform(); // tmp =1; // **)
Col Rank( tmp, :gender, :income, :region, :age ) / (
Col Number( tmp, :gender, :income, :region, :age ))
)
));
// force ratios: 1/2, 1/3, 1/3, 1/5
if(not(current data table() << has column ("rank_indiv")),
New Column( "rank_indiv",
Formula( Col Rank( random uniform(), :gender, :income, :region, :age ) )
));
Graph Builder(
Size( 518, 448 ),
Show Control Panel( 0 ),
Graph Spacing( 4 ),
Variables( X( :gender ), X( :income ), X( :region ), X( :age ) ),
Elements( Position( 1, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 2, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 3, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Elements( Position( 4, 1 ), Bar( X, Summary Statistic( "N" ) ) ),
Local Data Filter(<BR /> Title( "how many samples do you want ? " ),
Add Filter(
columns( :cum_prob, :cum_prob_indiv, :rank_indiv )
)
)
);
**)ランダムなuniform()で CDF を使用する代わりに、行の順序をランダム化して「1」の CDF を使用することができます。
Re: データ セットから割り当てサンプルを選択する方法最後のオプションは、以下のような体系化されていないテーブルにも適用できます。
唯一の制限は、特定のバリアントのサンプルが少ない場合、選択できるサンプルの数に明確な制限があることです。
それは単純なルールに従います:
バリアントの 1 つ (A) に N 個のサンプルしかない場合は、それらのサンプルを取り、他のバリアントから同じ数のランダム サンプルを選択します。
実際、バリアント「A」の場合、これはサンプリングではありません。
したがって、すべてのバリアントからランダムに M << N 個のサンプルだけを選択することになります。
同じ (JSL) ロジックを使用できます - N をより低い値に調整するだけです。
variants = {};
For Each( {gender}, {"F", "M"},
For Each( {age}, {"young", "medium", "old"},
For Each( {income}, {"low", "medium", "high"},
For Each( {region}, {"N", "S", "E", "W", "C"},
Insert Into( variants, Concat Items( {gender, age, income, region} ) )
)
)
)
);
Eval(
Eval Expr(
new table(
"unfair",
add rows( 100000 ),
New Column( "variant",Character,
formula(
variants = As constant(Expr( variants ));
Try(
variants[Floor( Random Normal( 45, 30 ) )],
"F young medium C"
);
)
),
New column ("gender",Character, formula(Word(1,:variant))),
New column ("age",Character, formula(Word(2,:variant))),
New column ("income",Character, formula(Word(3,:variant))),
New column ("region",Character, formula(Word(4,:variant))),
)
)
);
Re: データ セットから割り当てサンプルを選択する方法私はこの質問についてかなり時間をかけて考えましたが、良い答えは思いつきませんでした。 @hogiに似たサンプル データ テーブルは生成しました。以下は、私が使用したコードによる@hogi JSL の変更です。基本的に、読みやすくなり、Age の場合、 @Samiraが述べた分布をより適切に表していると思います。
New Table( "Samp",
Add Rows( 100000 ),
Compress File When Saved( 1 ),
New Column( "gender",
Character,
Set Each Value( Match( Random Integer( 1, 2 ), 1, "Male", "Female" ) ),
Compact()
),
New Column( "income",
Character,
Set Each Value(
Match( Random Integer( 1, 3 ), 1, "Low", 2, "Medium", "High" )
),
Compact()
),
New Column( "region",
Character,
Set Each Value(
Match( Random Integer( 1, 5 ),
1, "North",
2, "South",
3, "West",
4, "East",
"Ccentre"
)
)
),
New Column( "age",
Character,
Set Each Value(
temp = Random Integer( 18, 80 );
If(
temp <= 30, "Young",
temp <= 50, "Middle Age",
"Old"
);
)
)
)
Re: データ セットから割り当てサンプルを選択する方法ご返信ありがとうございます
都市全体に住む人口の代表サンプルを対象に調査を実施するというアイデアである。
Re: データ セットから割り当てサンプルを選択する方法ご尽力に感謝いたします
あなたの提案により、まずグラフビルダーでローカルデータフィルターを使用してデータセットを効果的に探索するという良いアイデアが浮かびました。私のデータでは、いくつかの組み合わせ(中央地域に住み、IM収入のある中年男性など)ではサンプルが0のようです。
この方法で代表サンプルを作成するという考えは、今では実用的ではないようです。最初から使用すべきだったサンプリング手法は、確率サンプリング手法の 1 つです。5 つの地域のみを層として使用する層別ランダム サンプリングが考えられます。次に、各層からランダム サンプルが収集されます。
Re: データ セットから割り当てサンプルを選択する方法ご協力ありがとうございました
この方法で代表サンプルを作成するという考えは、今では実用的ではないようです。最初から使用すべきだったサンプリング手法は、確率サンプリング手法の 1 つです。5 つの地域のみを層として使用する層別ランダム サンプリングが考えられます。次に、各層からランダム サンプルが収集されます。
Re: データ セットから割り当てサンプルを選択する方法ご返信ありがとうございます
あなたの言う通りだと思います。
この方法で代表サンプルを作成するという考えは、今では実用的ではないようです。最初から使用すべきだったサンプリング手法は、確率サンプリング手法の 1 つです。5 つの地域のみを層として使用する層別ランダム サンプリングが考えられます。次に、各層からランダム サンプルが収集されます。
Re: データ セットから割り当てサンプルを選択する方法それは合理的なアプローチのように思えます
Re: データ セットから割り当てサンプルを選択する方法つまり、元の投稿であなたが求めていたのは次のことです:
不均衡層化無作為抽出法ですよね?
そして、その層は性別×年齢×収入×地域の 90 のサブグループです。
Re: データ セットから割り当てサンプルを選択する方法教科書に載っているさまざまなサンプリング手法を注意深く見直してみたところ、私の当初の考えはどの手法にも当てはまらないことがわかりました。代表的なサンプルを得るには、確率サンプリング手法 (調査対象集団の各回答者に、サンプルに含まれる確率または機会を均等に提供する手法) のいずれかを選択する必要があります。これらの手法には、次の 4 つのタイプがあります。
- –単純ランダムサンプリング
- –体系的なサンプリング
- –クラスターサンプリング
- –層別抽出法
そのため、最初から層別サンプリングを使用して調査サンプルを取得できたのではないかと思います ( 5 つの地域のみを層として使用し、各層からランダム サンプルを収集します)。層別、クラスター、および割り当てサンプリング手法では、母集団を相互に排他的なグループに分類する必要がありますが、これは私の質問の状況ではありません。そのため、私の最初の質問はそもそも正しくないと思います。
:
Re: データ セットから割り当てサンプルを選択する方法うーん、このケースをDOEと比較すると...
適切に設計された DOE では、90 個のサブセットのそれぞれから (単一の) サンプルを選択することさえありません。
[90 個のサブセットからそれぞれ 1 つのサンプル:「完全実施要因」 -> 「高価」への道]
したがって、モデルをある程度単純化するとともに、一部の交差点にエントリが欠落しているデータ セットを使用することもできますか? さらに、一部の交差点 (から一部のデータ ポイント) を意図的に削除することで、階層化された入力データとバランスの取れた DOE の間で何か有用なものを取得できるでしょうか?
@Victor_Gに何か提案があるかもしれません?
Re: データ セットから割り当てサンプルを選択する方法
Re: データ セットから割り当てサンプルを選択する方法「ランダムサンプリング - 変異体ごと」のアプローチの場合
https://community.jmp.com/t5/Discussions/How-to-Select-a-quota-sample-from-a-data-set/mp/821078/highlight/true#M100011
任意のデータを階層化するための JSL スニペットを作成しました。列を選択して「OK」をクリックするだけです。
librecallはここからダウンロードできます: Recall Function Library
Names Default To Here( 1 );
verbose=0;
//Include( ".\libRecall_v2.jsl" );
objects = {"si^myCols", "s^Ncolumns", "s^Nfolds"};
values = {{}, {1}, {5}};
Try( // issue with projects
librecall:genArrays( objects, values, "Stratify", verbose )
);
dt = Current Data Table();
nw = New Window( "K Fold Creator",
<<TYPE></TYPE>Re: データ セットから割り当てサンプルを選択する方法こんにちは@hogiと@Samira 、
投稿と回答をざっと読んでみたところ、「代表的な」データセットには異なる意味合いがある可能性があるため、目的がまだ 100% 明確ではありません。
人口統計データ (年齢、性別、場所など) に基づいて、応答/現象をよりよく理解してモデル化したいですか、それとも、人口について何らかの推論/一般化を行うために「代表的な」サンプルが必要ですか?
- 最初のケースでは、応答/現象を特定の属性にリンクしたいため、バランスの取れたデータセットを用意し、年齢、性別、場所などのレベルをバランスよく揃えて、結果のモデリングと解釈を容易にすることが最善です。
DoE アプローチを使用すると、カスタム設計を「ゼロから」構築してさまざまな属性に対応する適切な人物を見つけるか、収集された人口統計データを使用して候補セット アプローチによって D-最適設計を構築すると、さまざまな人口統計要因を可能な限り独立して個別に調査および分析するのに役立ちます。
- 2 番目のケースでは、サンプルの結果を母集団に一般化したいため、母集団の代表的なサンプル (母集団と同じくらい「偏りのある」) が必要です。したがって、母集団が 40/60 に偏っている可能性があるため、男性と女性が 50/50 にならない可能性があります。そのため、この人口統計の特殊性を尊重する必要があります。
5 つの地域で収集した人口統計データに層別アプローチを使用すると役立つ場合があります。2 つの側面を考慮する必要があるかもしれません。人口に基づいて地域のサンプルを作成すること (サンプルの地域人口に対する割合が同じになるようにしてください。人口密度の高い地域ではサンプル データセットにより多くの人々が含まれるようになります)、および人口統計データ (性別、年齢など) に基づいて作成することです。
どちらの場合も、サンプル作成方法をよりよく理解し、情報を提供するために、5 つの地域の人口に関するデータをできるだけ多く収集することをお勧めします。
余談ですが、人口統計データのセグメンテーションに関する文献も見つかります。ただし、年齢範囲が異なるため、ここで提案されている年齢セグメンテーションが本当に役立つかどうかはわかりません。18~30 歳 (12 歳)、31~50 歳 (19 歳)、51 歳以上 (20 歳以上?)。また、世帯収入レベルの低/中/高をどのように定義しますか? 分析に基づくのですか、それとも事前に定義されたしきい値/基準に基づくのですか?
人口統計セグメンテーションの例: https://xperiencify.com/what-is-demographic-segmentation/
この回答が何かのアイデアを与えてくれることを願っています。