公開日: 04/01/2021

計算

この節では、列または行ごとに統計量を事前計算する関数について説明し、計算式エディタの裏でJSLの式がどのように動作しているかを示します。

事前計算される統計量

JMPには特殊な「事前計算」関数、Col MaximumCol MeanCol MinimumCol N MissingCol NumberCol QuantileCV(Coefficient of Variation:変動係数)、Col StandardizeCol Std DevCol SumMaximumMeanMinimumNMissingNumberStd DevSumがあります。

統計量はSummarize要約統計量をグローバル変数に格納する)でも計算されます。Summarizeの名前付き引数でこれらの事前計算統計関数と同じ名前のものがありますが、それらの引数が事前計算統計関数を呼び出すということではありません。たまたま名前が一致しているだけです。

統計量はすべて事前計算されます。つまり、JMPは指定された行または列で統計量を一度計算しており、その結果を定数として使っているのです。一度計算された統計量が何度も繰り返して使われるので、同等の計算式で算出された結果を使うよりも計算効率が良くなります。

JMPは、スクリプト内に事前計算関数を見つけると、その関数をすぐに計算し、以後はその結果を定数として使います。そのため、事前計算関数を使うと、列ごとの計算結果を行ごとの計算に使用できるようになります。たとえば、列の計算式内でCol Meanを使う場合は、まず指定された列の平均を計算し、次に、各行に関する残りの計算式の計算でその結果を定数として使います。たとえば、事前計算した平均と標準偏差を使って列を標準化する計算式などが考えられます。

( :Name("身長(インチ)")-Col Mean( :Name("身長(インチ)") ) ) / Col Std Dev( :Name("身長(インチ)") )

「Big Class.jmp」データセットの場合、Col Mean(:Name("身長(インチ)"))は62.55、Col Std Dev(:Name(
"身長(インチ)"))
は4.24です。したがって、上の計算式では、各行の「身長(インチ)」の値から62.55を引いた後で4.24で割ります。

注: 事前計算関数は、行の除外の属性を無視するので、除外された行が計算に含まれます。除外された行を無視して要約統計量を得るには、「一変量の分布」プラットフォームを使ってください。

列ごとの関数

名前が「Col」で始まる関数はすべて、列ごと、つまり指定された列の値を上から下に評価し、単一の数値を戻します。たとえば、Col Mean(:Name("身長(インチ)"))は、列「身長(インチ)」のすべての行の値の平均を算出し、それをスカラー値の結果として戻します。次に例を挙げます。

Average Student Height = Col Mean( :Name("身長(インチ)") );
Height Sigma = Col Std Dev( :Name("身長(インチ)") );

Col関数を使うと、欠測値のコードなどの列プロパティにより、意図と異なる計算につながるデータ値が割り当てられる場合があります。たとえば、「欠測値のコード」列プロパティがx1列に割り当てられていて、「999」が欠測値として扱われるとします。別の列に、平均を求める計算式があるとします。欠測値ではなく「999」の値を使って平均を計算したいという場合は、計算式でCol Stored Value()を指定します。

Mean( Col Stored Value( :x1 ), :x2, :x3 )

行ごとの関数

次に示す「Col」が付いていない関数は、指定された変数の値について行ごとに動作し、結果を戻します。たとえば、Mean(:Name("身長(インチ)"), :Name("体重(ポンド)"))は、データテーブルの現在の行の「身長(インチ)」「体重(ポンド)」の平均を算出します。行ごとの統計量は、適切なデータテーブルの行コンテキスト内で使われた場合にだけ有効です。いくつかの例を挙げます。

dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
 

// 行7のデータで求められたスカラー値をグローバル変数に割り当て

Row() = 7;
::scalar = Mean( :Name("身長(インチ)"), :Name("体重(ポンド)") );
 

// データテーブル内に計算式の列を作成

dt << New Column( "計算列",
	Formula( Mean( :Name("身長(インチ)"), :Name("体重(ポンド)") ) / 年齢 )
);
 
vector = J( 1, 40 ); // 結果を入れる1x40 の行列を作成
For Each Row( vector[Row()] = Mean( :Name("身長(インチ)"), :Name("体重(ポンド)") ) ); // ベクトルを設定

行ごとの関数は、次のように、ベクトル(列ベクトル)またはリストの引数をとることもできます。

myMu = Mean( [1 2 3 4] );
mySigma = Std Dev( {1, 2, 3} );
より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).