に以前の投稿 、私は述べた新しいJMPアドインそれ以前にデータを分割するために使用することができます予測モデリング 。この記事では、これがどのように機能するのかを説明します。したがって、JMPスクリプト言語(または略してJSL)のトピックに必ず触れます。
これは大きなトピックです。そこで、ここではJSLスクリプトの構造を少しだけ説明します。この記事はあなたがダウンロードしてインストールしたことを前提としていますアドインそしてそれが何をするのかに精通している。(注:アドインをダウンロードするには無料のSASログインが必要です。)
JMP 9でメニュー項目[表示]> [アドイン]を選択すると、コンボボックスに[層別分割]が表示されます。この項目を選択すると、アドインの「ホームフォルダ」へのリンクが表示されます。このリンクを選択して「stratifiedSplit.jsl」をダブルクリックすると、JMPのエディタでソースコードが開きます。フォローするには、エディタに行番号を表示するように選択していることを確認します([ファイル]> [設定]を選択し、[設定グループ]として[スクリプトエディタ]を選択します)。
JSLは次のように解釈できます。
(1) 行11〜13: データが分割されるデフォルトの比率。名前の中の '0'、'1'、または '2'の接尾辞は、'Training'、'Validation'、または 'Test'データと関係があることを示します(JMPが作成したランダム指標列で生成された値のミラーリング)。。
(2) 15〜29行目: デフォルトのプロポーションの1つを更新した場合に呼び出される関数。新しいプロポーションが0から1の間にあることを確認します。
(3) 31〜55行目: ユーザーインターフェース - 現在のデータテーブルのすべての列を表示して、応答列を選択できるようにします。デフォルトの分割比率を上書きすることもできます。

(4) 58から85行目: (3)の「ヘルプ」ボタンを押すと、新しいウィンドウにヘルプを表示します。
(5) 88から104行目: (3)の 'OK'ボタンが押されたときに実行され、実際に指定された3つの比率が依然として1になるかどうかをチェックします。そうでない場合は、デフォルトの分割比率で(3)が再度表示されます。
(6) 行107から135: 応答列が実際に選択されたことを確認し、選択されていない場合は停止します。応答列が選択された場合は、その列内の異なるレベルの数を見つけ、これが100より大きい場合は、停止するオプションを与えます。
(7) 行138から182: 現在のテーブルのどの行が応答列のどのレベルに対応するか(6)と指定された分割比率(3)に対応するマッピングを使用して、新しい検証列を作成します。次に、Distributionを使用して、テーブル内の行がランダムに分割された方法を示します。
すでにJSLに精通している人にとって、ここのコードは目立たないものです。しかし、より高いレベルでは、常に行わなければならない設計上の決定があり、最終的な結果が意図した用途に「ちょうど十分」でなければならない場合、妥協が通常必要になります。
この場合、たとえば、ユーザーインターフェイスの背後にあるロジックを単純化するために、エラーチェックを上記の(2)と(5)の2つの部分に分けるという特定の選択が行われました。少しの忍耐とJSLガイドの助けを借りて( 'Help> Books> Scripting Guide')、JSLに慣れていなくても、コードの各セクションが実際にどのように機能するかの詳細を理解できるはずです。結局のところ、新しい言語を学び始めるための最良の方法の一つは、うまくいくものから始めることです。スペースの理由から、ここでは(6)と(7)だけを見ます。
すでに述べたように、この問題の重要な部分の1つは、回答欄(6)のレベルについて調べることです。これを行うには多くの方法がありますが、連想配列最も用途が広いです。
以下に示すコードは、遊ぶためのテーブルを作成します。5行目では 'Response'の20個の値をベクトルに取得し、6行目では連想配列を作成し、それに 'Get Keys'メッセージを送信して辞書式順序で個別の値を表示します。連想配列の1つの利点は、(この場合のように数値だけでなく)あらゆるデータ型で機能することですが、'Get Keys'は常にリストを返すことに注意してください。7行目では、このリストに含まれる項目数を調べるために 'N Items()'を使用する必要があります。

(6)から 'yLev'と 'nLevs'の値が得られると、(7)のステップは次のようになります。
1。欠損値のベクトルvValsを作成します。これは後で新しい検証列の入力に使用されます(行141)。
2。'yLev'に保持されている異なるレベルをループします(143行目から161行目)。
3。現在のレベルに対応する 'yVals'(したがってデータテーブル)で行番号を見つけ、それらを変数 'stratum'に格納します(145行目)。これを行うための構文は、'yVals'がベクトルかリストか(したがって、元の応答列のデータ型が 'Numeric'か 'Character'か)によって異なります。
4。変数 'stratumN'は現在のレベルに対応する行数を保持します(147行目)。指定した分割比率を整数に変換し、これらの合計が 'stratumN'になるようにします(149行目から154行目)。
5。正しい長さを持ち、それぞれ値 '0'、'1'、'2'を含むベクトル 'v0'、'v1'、'v2'を作成します(157から159行目)。後続のステップが常にうまくいくことを確実にするために、我々はプロポーションの1つが0.0であるという可能性を考慮して、対応するベクトルを '[]'に設定しなければならないことに注意してください。
6。これらのベクトルを(VConCat()を使用して)最後に積み重ね、「0」、「1」、「2」の値がランダムに分布するように結果をシャッフルします。これらの値を 'vVals'の正しい行に割り当て、欠けている値が置き換えられるようにします(行160)。
7。ループが終了したら、'vVals'を使用して新しい検証列を作成するか、既存の検証列を置き換えます(163から170行目)。'Value Label'列プロパティを使用して、'0'、'1'、'2'の整数値がそれぞれ 'Training'、'Validation'、'Test'として表示されるようにします。
8。応答内の各レベルの検証列の値を表示するには、'By'変数と共に 'Distribution'を使用します。
日常的ではありますが、コードにはいくつかの明白でない側面があるかもしれません。
•選択したレスポンス列のデータ型やモデリング型について不要な仮定をしていません(たとえば、値が 'Numeric'、'Continuous'列の場合、コードは完全に機能します)。レベルに集中しています)。
•応答列の欠損値は、欠損値として構築された検証列に伝達されます。これは望ましいことです。ただし、数値列の場合は「。」を入力してください。ディストリビューションプラットフォームが 'By'グループを '。'で処理しようとしたときに値が良性のJMPアラートを引き起こします。値 Characterカラムの場合、null文字列“”は、アラートなしで 'By'グループの他のレベルと同じように処理されます。
•42行目の 'ColListBox()'式では、テーブルに存在する場合でも選択のために行状態列が表示されません。この場合は望ましい方法です。
JMPを使用していてコードをいじってみたいのであれば、もっと学ぶ方法はたくさんあります。あなたはこれを見て始めることができますファイル交換エントリ 。