欠損値の除去

実際には、1つまたは複数の観測日付が無効であったり、値が欠落しているデータセットに出くわすことがある。欠損値の状況は、データ収集の問題、データセット処理の副産物、または設計によって発生する可能性がある。後者は、将来の値を見越して、データセットの末尾に空のセルを追加してモデルを設定した場合に発生する。

欠損値は、"Not a Number"、略して "NaN "として指定される。エクセルでは、NaNは空のセル、または特別な "#N/A "表現で識別される。NA()、ISNA(...)、IFERROR(...)など、#N/Aを検出するために使用できる組み込み関数がいくつかある。

データセットの次元

データセットの観測値は、2つの変数の値の組(x, y)、または3つ以上の変数の複数の値(例えば、(x, y, z, w))によって定義することができる。一変量時系列のデータポイントは、(t, x_t)と表現できる。

この記事では、欠損値を持つデータポイントを削除することで処理することを考えます。ここでは、1次元と2次元(多変量)のデータセットに対する除去処理を考えます。

2次元データセットでは、各行がデータポイントを表し、各列が入力変数を表す。行の1つ以上のセルに空または#N/Aの値がある場合、そのデータポイント(つまり行)は値が欠損しているデータポイントとみなされ、除外される。

しかし、ちょっと待ってほしい!時系列はどうだろう?欠損値のある先頭または末尾のデータ・ポイントを削除すると、ちょっとした問題が生じる。開始時刻と終了時刻を単純に進めることはできますが、オブザベーション間の時間間隔に影響するので、中間のデータ・ポイントを削除することはできません。

なぜ気にする必要があるのか?

Excelで欠損値のあるデータセットを扱うのは難しい。Excelには、これらのデータセットを受け入れ、欠損値のあるオブザベーションを黙って無視する組み込み関数(例えば、MIN(), MAX(.), COUNT(.))がいくつかあるが、大半の関数(例えば、STDEV(.), CORREL(.))はこれらをサポートしておらず、これらのデータセットが入力として渡されるとエラー(すなわち、#VALUE)を返す。

RMNA(.)関数

多くの NumXL ウィザードには、欠損値のあるデータ点を扱うための独立したタブがある。このタブでは、"don't accept"、"remove obs."、"substitute"、"interpolate"、"data fitting "などの異なる方針が提示される。ユーザーが "remove obs. "欠損値処理ポリシーを選択した場合、入力データ集合は、まず生成される計算式のRMNA(.)によって前処理されます。

RMNA(.) とは?RMNA は、NumXL のシンプルで強力なユーティリティ関数で、1つ以上の欠損値を持つオブザベーションを検出して除去することを唯一の任務としている。

RMNA関数は2つの引数を受け付ける: XとYは1つ以上の列で構成されるが、Yが与えられた場合、Xの行数はYと等しくなければならない。

RMNA(.)表記では、データポイントは(X, Y)だが、RMNA(X, Y)は処理されたXを返す。処理されたYを返したい場合は、XとYのペアの順序を逆にする(つまり、(Y, X))。

例 1: 次のシナリオを考えてみよう:1列のデータセットに、欠損値を持つ2つのデータ点がある。欠損値は#N/Aと空白セルで表されます。
欠損値を#N/Aおよび空白/空セルで表した入力データセット。

エクセルの組み込み関数を使用する: AVERAGE(.)、STDEV(.)、SKEW(.)、KURT(.)はエラー#N/Aを返しますが、COUNT(.)は欠損値のあるデータ・ポイントを黙って削除し、残りのデータ・ポイントのカウント(つまり18)を返します。

では、データセットをRMNA(.)で前処理し、別のカラムに格納し、新しいカラムを同じ関数に渡してみよう:
欠損値のある元のデータセットを、NumXLのRMNA関数を用いて欠損値のないデータセットに変換したもの。

注:

あるいは、RMNA(.)式を直接(引数として)関数に入れることもできた。

AVERAGE関数の内部でRMNA関数を引数として使用。

例 2: 相互相関(XCFまたはExcelの組み込みCORREL)を計算したい2つの変数(X, Y)のデータ集合を考えてみよう。
欠損値を含む2つの変数のデータセット。欠損値を含むデータセットを参照する場合、関数は#NUMまたは#N/Aを出力する。

データセットには欠損値のあるデータ・ポイントが3つあるので、相関値を計算する前にそれらのオブザベーションを除外する必要がある。

RMNA(.)は2通りの使い方ができる:

方法 1: データセット全体(B列とC列)を1つの引数として渡す。
つ以上の変数のデータセットに対してRMNA関数を使用すると、1つ以上の欠損値を持つ行が削除される。

RMNA(.)関数は、1つ以上の欠損値を持つ行を取り除いた元のデータセットを返す。

方法 2: 各列を別々に前処理するが、もう一方の列は任意の参照として使用する。

もう一方の列をオプションの参照引数(つまりY)として使用することで、RMNA(.)はそのデータポイントの欠損値も調べますが、関数は最初の引数で指定されたデータセット(つまりX)のみを返します。
オプションの参照引数として別のデータセットを使用しながら、あるデータセットに対してRMNA関数を使用する。

RMNA(.)でXとYを逆にすることで、X2またはX1行列で見つかった欠損値を取り除いたX2データセットを得ることができることに注意。

方法1と比較して方法2を使用する顕著な利点は、関数がX1とX2の列が隣接していることを必要としないことである。

例 3: 新しいデータが入手可能になったら、自動的に更新されるようにスプレッドシートモデルを設定しよう。
将来値用のRMNA機能を使って、新しい入力が導入されたときにデータを自動的に更新する。

B21に値を追加することで、RMNA(.)はこの新しい値を含むことになり、AVGや他の関数に計算を更新させることになる。

概要

まとめると、RMNA(.)関数は、欠損値のあるデータポイントを取り除くことによって入力データを準備する、シンプルで強力なメカニズムを提供します。この関数は2番目の引数(オプション)を受け取り、この引数はデータポイントに欠損値があっても、返される結果セットから除外されるかどうかを決定するのに使われます。

NumXLのRMNA機能の技術的な詳細については、こちらをご覧ください。 reference manual page. 完全な機能のダウンロードが可能です。 14-day trial のNumXLを使って、RMNAの機能を試してみてください。

ファイルの例

コメント

サインインしてコメントを残してください。

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています