JMPの多くのプラットフォームでは、列をBy変数として指定できます。スクリプトでこれを行うには、プラットフォームコマンド内にBy引数を含め、各列を引数としてリストします。
次の例では、40人の学生の「名前」・「年齢」・「身長(インチ)」・「体重(ポンド)」を含む「Big Class.jmp」データテーブルを使用しています。「性別」をBy変数として使用し、「身長(インチ)」に対する「体重(ポンド)」の「二変量の関係」レポートを作成し、さまざまなあてはめを追加してみましょう。
1. [ファイル]>[新規作成]>[スクリプト]を選択します。
2. 次の行を追加します。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
biv = dt << Bivariate( Y( :"体重(ポンド)"n ), X( :"身長(インチ)"n ), By( :性別 ));
最初の行は、「Big Class.jmp」サンプルデータを開きます。2行目は、「性別」をBy変数として「体重(ポンド)」と「身長(インチ)」の「二変量の関係」レポートを実行するbivというプラットフォームオブジェクトを作成します。
3. [スクリプトの実行]をクリックします。
レポートウィンドウに2つのグラフが表示されます。1つは性別がF、もう1つは性別がMのものです。
1. ログが表示されていない場合は、ログを表示します。スクリプト内を右クリックし、[ウィンドウ内にログを表示]を選択します。
2. 次の行をスクリプトに追加します。
Show( biv );
3. Show( biv )の行を強調表示し、[スクリプトの実行]をクリックします。
ログには、プラットフォームへの単一の参照二変量[]が戻されるのではなく、biv = {二変量[], 二変量[]}のような参照のリストが戻されます。これらの2つの参照は、By変数である「性別」の2つの水準(FとM)に対応しています。
メッセージは、各By水準に個別に送ることも、すべてのBy水準に送ることもできます。
4. すべてのBy水準にメッセージを送って、線形回帰のあてはめを追加します。次の行をスクリプトに追加します。
biv << Fit Line;
5. 作成したばかりのこの1行を強調表示し、[スクリプトの実行]をクリックします。
レポートウィンドウの両方のグラフに、単回帰直線が追加され、それに対応する「直線のあてはめ」レポートが表示されます。
6. 水準Fにのみメッセージを送って、3次多項式のあてはめを追加します。次の行をスクリプトに追加します。
biv[1] << Fit Polynomial( 3 );
ヒント: 各By水準の番号は、レポートウィンドウ内でのその水準の順序に対応します。By水準の列に「値の表示順序」列プロパティが含まれている場合は、その順序に従います。
7. 作成したばかりの上記の1行を強調表示し、[スクリプトの実行]をクリックします。
レポートウィンドウのFのグラフに多項式のあてはめの曲線が追加され、対応する「多項式のあてはめ」 レポートが表示されます。
8. 水準Mにのみメッセージを送って、4次多項式のあてはめを追加します。次の行をスクリプトに追加します。
biv[2] << Fit Polynomial( 4 );
9. 作成したばかりのこの1行を強調表示し、[スクリプトの実行]をクリックします。
レポートウィンドウのMのグラフに4次のあてはめの曲線が追加され、対応する「多項式のあてはめ」レポートが表示されます。
図10.2 Byグループレポート
By引数で複数の列を指定した場合は、BY変数の組み合わせのサブグループごとにグラフが表示されます。上記の例で、By( :性別, :年齢 )とすると、12歳の女性、13歳の女性という具合に17歳までのグラフが表示されます。また、12歳から17歳までの男性のグラフも表示されます。
次の例は、Byグループを使ってプラットフォームを起動し、各グループから結果(ここでは誤差平方和)を取得しています。
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// onewはプラットフォームのリストを保持するJSL変数
onew = dt << Oneway( x( :年齢 ), y( :"身長(インチ)"n ), by( :性別 ), anova );
// rはレポートのリスト
r = onew << Report;
// nByは生成されるレポートの数
nBy = N Items( r );
// vcは、レポート数と同じ行数と1つの列を持ち、すべての値がゼロに設定された行列
vc = J( nBy, 1, 0 );
// 各レポートについて以下を行う
For( i = 1, i <= nBy, i++,
vc[i] = r[i] // vc[i]はi番目のレポートの誤差平方和
[Outline Box( "分散分析" ), // このアウトラインと
// この列を検索し、2つ目の値を得る
Column Box( "平方和" )][2]
);
Show( vc ); // デバッグ、ログでこの値を確認
// byValuesが「性別」列の値のリストになる
Summarize( byValues = By( :性別 ) );
// 2行(M.F)と2列の新しいテーブルを作成する
New Table( "誤差平方和" )
<< New Column( "性別", // 「性別」という新しい列を作成する
character,
width( 8 ),
values( byValues )
// 「誤差平方和」という新しい列を作成する
) << New Column( "誤差平方和", Numeric, "Continuous", Values( vc ) );