元の配布を維持したサブセットの作成連続変数を含むデータ テーブルがあり、元のテーブルと同じ分布を維持する複数のサブセットを作成したい場合、どうすればよいでしょうか?
私は JMP Pro を持っており、サブセット メニューの層化オプションを試しましたが、その方法がわかりませんでした。
データの探索と視覚化Re: 元の配布を維持したサブセットの作成必要に応じて階層化された検証列を (予測モデリングの下で) 作成し、それらのサブセットを使用できます。少なくとも最初は 3 つのサブセット (トレーニング、検証、テストのサブセット) に制限されていると思いますが、さらに必要な場合はそれを複数回行うこともできます。 [サブセット] メニューの [階層化] オプションを使用したことはありませんが、機能するようですが、一度に 1 つのサブセットしか作成されません。
Re: 元の配布を維持したサブセットの作成JMP Pro をお持ちで、Stratify についても言及されているため、別のオプションとして、JMP Pro 用の XGBoost アドイン ( https://community.jmp.com/t5/JMP-Add-Ins/からの「K-Fold Columns の作成」) を紹介します。 XGBoost-Add-In-for-JMP-Pro/ta-p/319383 ) 3、4、5 ページをお読みください。
「XGBoost Add-in.pdf」ファイル内。

この関数は、元の分布 (アドインではバランスと呼ばれます) を維持するサブセット (アドインではフォールドと呼ばれます) を作成し、同時に層化変数のバランスも維持することで層化を尊重します。 PDF ドキュメントの 5 ページにあるヒストグラムを参照してください。
Re: 元の配布を維持したサブセットの作成ご回答有難うございます。
3 つ以上のサブセットが必要であることがわかりました。予測モデリング --> 検証列の作成で「K 分割検証列の作成」を使用できます。
Re: 元の分布を維持したサブセットの作成必要なのは、Tables=> Subset Platform のランダム サンプリング機能を使用してサブセットを指定することだけだと思います。レートまたはサイズによるランダム サンプリングにより、元のテーブルと同じ分布を持つデータ テーブルが生成されます。
Re: 元の分布を維持したサブセットの作成厳密に言えば、元の分布と同じ分布が必要な場合は、置換によるサンプリングが必要です。これが、再サンプリングとブートストラップ法の基礎です。Subset コマンドは、置換なしでランダム サンプリングを実行します。必要なものを取得するには、スクリプトが必要だと思います。サンプリングは、次のようにランダムな下付き文字を計算することに基づいています。
subscript = J( sample size, 1, Random Integer( 1, N Row( dt ) )
このベクトルは、新しいデータ テーブルのデータ列の作成に使用できます。
New Table( "Sample", New Column( "Data", Value( dt:originalColumn[subscript] ) ) );
Re: 元の分布を維持したサブセット作成こんにちは@bbenny7さん、
このトピックは、データテーブルを正しくサブセット化したいという同様の理由で興味深いと思いましたが、列に基づいて階層化したいと考えていました。 @dlehman1 が検証列を使用して関心のある列を階層化することを提案していたため、以前にもこの方法を試しましたが、複数のデータテーブルが必要な場合に別の方法で行う方法も知りたかったのです。 @マーク・ベイリーが提案した方法を試してみましたが、New Table() の JSL コードを2行に分割する必要があることがわかりました。1行目は新しいテーブルを定義し、2行目は関心のある別のデータテーブル列に基づいて値を割り当てます。彼の元のコードではうまく動作しませんでした。修正したコードは以下のとおりです。
Names Default To Here( 1 );
dt = Data Table( "originaldatatable" ); //assigns the original data table to the variable dt
subscript = J( samplesize, 1, Random Integer( 1, N Rows( dt ) ) ); //creates the random integer vector of length 'samplesize'
dt2 = New Table( "Sample", New Column( "Data" ) ); //creates new data table with column Data
dt2:Data << Set Values( dt:originalColumn[subscript] ); // assigns values to Data based on the row entries for the originalColumn
ちょっとした楽しいテストとして、For() ループを作成し、その中に下付き文字行を入れて (行番号の新しいセットを生成するため) 4 つのサブセットを生成し、4 つのセットの分布を比較したところ、要約統計量はすべて非常によく似ていました。

同様のテストを行いましたが、4つの層別検証列を作成し、それぞれの統計量を調べました。N値が異なっているのは、「検証列の作成」プラットフォームでは、ランダムに300を選択した上記のような比率を生成できなかったためです。いずれにせよ、結果はすべて非常に似ています。

どちらの方法でも、目的の場所にたどり着くことができるはずです。
幸運を!、
DS
Re: 元の分布を維持したサブセット作成ご回答ありがとうございます。
アドインは必要ないことに気づきましたが、「予測モデリング」→「検証列の作成」で「K 分割検証列の作成」を使用できます。