公開日: 11/25/2021

By変数の指定

JMPの多くのプラットフォームでは、列をBy変数として指定できます。スクリプトでこれを行うには、プラットフォームコマンド内にBy引数を含め、各列を引数としてリストします。

次の例では、40人の学生の「名前」・「年齢」・「身長(インチ)」・「体重(ポンド)」を含む「Big Class.jmp」データテーブルを使用しています。「性別」をBy変数として使用し、「身長(インチ)」に対する「体重(ポンド)」の「二変量の関係」レポートを作成し、さまざまなあてはめを追加してみましょう。

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. [スクリプトの実行]Image shown hereをクリックします。

レポートウィンドウに2つのグラフが表示されます。1つは性別がF、もう1つは性別がMのものです。

メッセージをプラットフォーム全体または単一のBy水準に送る

1. ログが表示されていない場合は、ログを表示します。スクリプト内を右クリックし、[ウィンドウ内にログを表示]を選択します。

2. 次の行をスクリプトに追加します。

Show( biv );

3. Show( biv )の行を強調表示し、[スクリプトの実行]Image shown hereをクリックします。

ログには、プラットフォームへの単一の参照二変量[]が戻されるのではなく、biv = {二変量[], 二変量[]}のような参照のリストが戻されます。これらの2つの参照は、By変数である「性別」の2つの水準(FとM)に対応しています。

メッセージは、各By水準に個別に送ることも、すべてのBy水準に送ることもできます。

4. すべてのBy水準にメッセージを送って、線形回帰のあてはめを追加します。次の行をスクリプトに追加します。

biv << Fit Line;

5. 作成したばかりのこの1行を強調表示し、[スクリプトの実行]Image shown hereをクリックします。

レポートウィンドウの両方のグラフに、単回帰直線が追加され、それに対応する「直線のあてはめ」レポートが表示されます。

6. 水準Fにのみメッセージを送って、3次多項式のあてはめを追加します。次の行をスクリプトに追加します。

biv[1] << Fit Polynomial( 3 );

ヒント: 各By水準の番号は、レポートウィンドウ内でのその水準の順序に対応します。By水準の列に「値の表示順序」列プロパティが含まれている場合は、その順序に従います。

7. 作成したばかりの上記の1行を強調表示し、[スクリプトの実行]Image shown hereをクリックします。

レポートウィンドウのFのグラフに多項式のあてはめの曲線が追加され、対応する「多項式のあてはめ」 レポートが表示されます。

8. 水準Mにのみメッセージを送って、4次多項式のあてはめを追加します。次の行をスクリプトに追加します。

biv[2] << Fit Polynomial( 4 );

9. 作成したばかりのこの1行を強調表示し、[スクリプトの実行]Image shown hereをクリックします。

レポートウィンドウのMのグラフに4次のあてはめの曲線が追加され、対応する「多項式のあてはめ」レポートが表示されます。

図10.2 Byグループレポート 

By Group Reports

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 ) );
より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).