JMP 19のメニューバーから[ヘルプ] > [スクリプトの索引] を選択し、バージョンを「19」に限定して追加されたJSL関数を調べてみましょう。
さまざまな関数が追加されていますが、下図に赤枠にあるように Col 関数が多く追加されていることがわかります。

そこで本記事では、JMP 19で新たに追加されたCol()関数と、これらを使用するメリットを、データ例とともに紹介します。
Col()関数とは
Col()関数とは、指定した列の要約統計量を返す関数です。
例えば、連続尺度の列「列1」に対してCol Mean(列1) と指定すると、「列1」の平均値をすべてのセルに対して返します。

さらに多くのCol()関数では、By変数を引数として指定でき、グループごとの要約統計量を返してくれます。
例えば、JMPのサンプルデータ「Big Class.jmp」に対してCol Mean(身長(インチ) , 年齢)と指定すると、第2引数である「年齢」(12~17)ごとに身長の平均を求めることができます。

この点を踏まえ、JMP 19で追加された新しいCol() 関数について紹介します。そのうちCol At()、Col Score()については利用例をもとに解説します。
Col At 関数
Col At()関数は、一言でいうと 数行前のデータを返すことができるLag()関数の強化バージョンです。By変数を指定できるLag()関数のようなイメージで利用できます。
使用例
データ:ある家庭の1月1日〜3日の3日間、1分ごとに測定した電力消費量
目的:電力変化が大きかった時間帯を調べるため、ある時刻の電力量から1分前(Lag(1))の電力量を引いた差を求めて、グラフで考察する。
下図のデータでは、「日(Date)」「Time(時分)」ごとに「Power(電力)」が測定されています。新しく作成した列「Power_Diff」は、この目的を満たすためのもので、Col At() 関数を用いています。
(本ブログに添付している「Example_ColAt.jmp」をご参照ください。)

Col At(col, index, byVar, Relative(1)) では、byVarグループ内での行の位置indexにおけるcolの値を返します。
この例では、日ごとに1行前(-1)の電力の値を返しています。
この関数を使って、ある日におけるラグ(n行目の電力 - (n-1)行目の電力)を求めています。
従来のLag()関数ではグループ内でラグを求めることはできませんが、Col At()関数ではそれが可能です。
以下のグラフは、作成した計算列を用いて日ごとに時間ごとの差を折れ線で示したものです。1月3日には、特に12時以降に差が大きくなる時間帯があることが確認できます。

参考:Relative(1)という引数で上記のようにindex個前の値を返すことができます。この引数を含めないと、byVarグループ内での最初の行の値、最後の行の値を返します。詳しくは添付データの列「First Power」、「Last Power」をご参照ください。
Col Score 関数
Col Score()関数は、指定した列に対する順位(整数スコア)を返す関数です。By変数を指定することで、グループ内での順位を求めることができます。
使用例
データ:男女30名の1500m走タイムとボール投げ飛距離の記録
目的:男女別に1500m走タイムの順位を求め、その順位とボール投げの飛距離の関係を考察する。
(本ブログに添付している「Example_ColScore.jmp」をご参照ください。)

Col Score(xCol, byVar) では、byVarごとにxColの値に対する順序を返します。この例では、性別ごとに1500m走タイムを基準に順位付けを行います。
新しく作成した列「Rank by Sex」を使って、男女別の順位ごとにボール投げの飛距離を棒グラフで示した結果、男性は順位が良いほど飛距離が長くなる傾向がありますが、女性ではそのような傾向は見られません。

ほかに追加されたCol()関数
JMP 19では、上記以外にも次のCol()関数が追加されています。
Col N Unique:列にある一意な値の個数を返す。
Col Interpolate:xのある位置に関するyの補間値を返す。
Col Sequence:byVarグループ内での行に対する位置を返す(Row()関数の強化バージョン)。
詳しくは、「スクリプトの索引」の説明をご覧ください。
これらのCol()関数は、列のスコープ変換という機能と関連していますが、その機能については、また別の機会に紹介します。
by 増川 直裕(JMP Japan)
Naohiro Masukawa - JMP User Community
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.