なぜ一部の人々は-999または-9999を使用して欠損値を置き換えるのですか?


32

データセットがあります。多くの欠損値があります。一部の列では、欠損値は-999に置き換えられましたが、他の列では欠損値は「NA」としてマークされていました。

なぜ-999を使用して欠損値を置き換えるのですか?


1
私は-999を見たことがない。これまでのところ、空の文字列とNAを見てきました。
イェ天

12
彼らは表面的な分析を行い、文書を注意深く読んでいない人々のために結果を恐ろしく台無しにしたいからです!(しかし、真面目なので、@ Stephan Kolassaが本当の答えを持っています。)
マシューガン

1
データセットを提供した人に尋ねる...?
BlueRaja-ダニーPflughoeft

さらに良いのは、測定が適用されないことを示すために測定列に999の値があることです...少なくとも-999または0は、それが有効/重要な値ではないという意味を持ちます。999は最悪です。
アダムマーティン

これはパンチカードにデータを記録する時代からの慣習であると一度読んだような気がします。カードが文字通り「ミッシングロウ」であったため、カードを見ると、9のフルロウをノックアウトすると、欠損データがはっきりと見えるようになりました。これをバックアップするための参照が見つからないため、コメントとして残しておきます。
ルーカス

回答:


65

これは、コンピューターソフトウェアが数値ベクトルとして数値ベクトルを保存していた以前の時代からのホールドアウトです。「I'm missing」という意味を持つ実数はありません。したがって、初期の統計ソフトウェアが「真の」数値と欠損値を区別しなければならなかった場合、「明らかに」有効な数値ではないもの(-999や-9999など)を入力しました。

もちろん、欠損値を表す-999または-9999はまったく「明白」ではありません。かなり頻繁に、それは確かに有効な値になり得ます。そのような値を明示的にチェックしない限り、分析であらゆる種類の「興味深い」エラーが発生する可能性があります。

現在、欠損値を含む可能性のある数値ベクトルは、「強化された」数値ベクトルとして内部的に表されます。もちろん、欠損値はそのように扱われ、誤って有効として扱われないため、これははるかに優れています。

残念ながら、一部のソフトウェアは、おそらく互換性のために、このような規則をまだ使用しています。また、一部のユーザーは、非公式の浸透によってこの規則を吸収し、ソフトウェアが欠損値の入力をサポートしている場合でも、NAの代わりに-999を入力しています。

道徳:欠損値を-999としてエンコードしないでください。


1
それは以前の時代からのホールドアウトであることに加えて、欠損値の明示的な表現が存在することを学んだことがない人がいる可能性が高いため、欠損値を挿入する必要がある場合、使用するものは何らかの偽物であると考えます数。
-Kodiologist

9
これは、単なるホールドアウトではありません。データを操作するためのツールを作成している場合、ほとんどすべてのプログラミング言語で数字の列を読み取るのは簡単です。値を読み取り、非数値を検出し、それに応じて解析するのに非常に時間がかかります。そして、統計に-9999のマックがあると思うなら、私が一緒に仕事をしている私のグループは、無効な値に1e32を使用することを好みます。あなたがそれをするときにあなたの分散に何が起こるか教えてください!
コートアンモン-復帰モニカ

1
素晴らしい、簡潔な答え。しかし、いくつかの歴史的な詳細を追加すると、さらに良い答えになるかもしれません。確かに、それにはいくつかの研究が必要でしょう。:)
tchakravarty

1
このようなエンコードは、他の種類の測定エラーを示すためにも使用される場合があります。すなわち、「機械が機能していなかった」対「誰も測定を行うためにそこにいなかった」。
ハオイェジン

1
@qqqwww:欠落を示すために使用される値を検出し、そのようなエントリを真の欠落またはNAに変換するのが最善です。数値データの離散化は通常、良いアイデアではありません。
S. Kolassa -復活モニカ

24

このような値はデータベース用です。ほとんどのデータベース、および今日の多くのデータベースは、整数値のデータに固定桁数を割り当てました。-999のような数値は、4文字で保存できる最小のもので、5文字で-9999などです。

(言うまでもなく、定義により、数値フィールドは "NA"などの英数字を格納できません。 欠落または無効なデータを表すためにいくつかの数値コードを使用する必要があります。)

保存できる最も負の数を使用して、欠損値を示すのはなぜですか? 誤って有効な数値として処理した場合、結果が劇的に不正確になるためです。 欠損値のコードが現実的であるほど、コードはより安全になります。これは、入力が非常に間違っていると通常出力が台無しになるためです。(堅牢な統計手法は注目に値する例外です!)

どうしてそのような間違いが起こるのでしょうか?これは、システム間でデータが交換されるときに常に発生します。-9999が欠損値を表すと想定するシステムは、CSVなどのほとんどの形式でデータを書き出すときにその値をそのまま出力します。そのCSVファイルを読み取るシステムは、そのような値を欠落として処理するために「認識」(または「説明」)されない場合があります。

もう1つの理由は、優れた統計データとコンピューティングプラットフォームが、NaN、真の欠損値、オーバーフロー、アンダーフロー、無応答など、さまざまな種類の欠損値を認識することです。 9998、-9997など)を使用すると、任意のテーブルまたは配列からすべての欠損値を簡単に照会できます。

さらにもう1つは、このような値は通常、極端な外れ値としてグラフィック表示に表示されることです。グラフィックで目立つように選択できるすべての値の中で、最も否定的な値は、データから遠く離れている可能性が最も高くなります。


有用な意味と一般化があります:

  • 浮動小数点フィールドの欠損データに使用する適切な値は、最も負の有効な数値で、倍精度浮動小数点数の場合はおよそに等しくなります。(平均に与える影響を想像してください!)同じ原理で、単精度浮動小数点数を使用する多くの古いプログラムは、欠損値に1E + 30などのやや任意の大きな数を使用していました。10303

  • 新しい環境(独自のデータベースソフトウェアを設計している場合)でNoDataコードを簡単に作成できるように、このタイプの標準ルールを採用します。

  • ソフトウェアとシステムがまったく失敗した場合に劇的に失敗するように設計します。最悪のバグは、断続的、ランダム、または小さなものです。これらは検出されず、追い詰めるのが難しいためです。


2
もちろん、floatを使用NaNしている場合は、欠損値に対してのみ使用できます。有効な数値であるかどうかについてあいまいさはなく、(ほとんどの標準的な浮動小数点演算がNaN伝播であると仮定すると)誤ってそれを有効なデータポイントとして誤って扱う計算を台無しにします。たとえば、なります。10303
イルマリカロネン16

NaNは数字ではなく、NAは少なくともRでは利用できません
-llrs

1
理論的には、IEEEフロートは、さまざまな種類の欠落/無効データのタグとして機能するさまざまな種類のNaNをサポートしています。実際には、ほとんどのプログラミング言語は、そのようなNaNを区別するための適切なサポートを欠いており、その余分な情報を失う傾向があります。
CodesInChaos

符号ビットを除いて非常に優れており、実際にデータベースで使用されるスキームのスペースを占有しませんでした。それらは00-99の数字ペアに分割され、それらを数字として扱います。ただし、数値が負の場合、数値ではなく255-#を格納します。また、127/128が+/- infに使用されました。
ジョシュア

@Joshuaこれは一部のデータベースでは正しいかもしれませんが、特に開発の初期段階では、他の多くのデータベースでは間違いなくそうでした。とにかく、10進数でエンコードされた値を使用するデータベースは、提案されたメカニズムを使用できませんでした。私が説明した方法で機能する初期の広く使用されているPCデータベースの例はdBaseであり、最終的にはdBase III、Clipper、およびFoxPro製品として提供されます(Microsoftが買収し、後にAccessを放棄しました)。固定フィールド幅のデータ交換フォーマットの場合、マイナス記号は常に文字を占めます。
whuber

13

任意の値を使用し、欠損値をエンコードできます。Rのような一部のソフトウェアは、欠損値をエンコードするために特別な値を使用しますが、欠損データ用の特別なコードを持たないSPSSなどのソフトウェアパッケージもあります。2番目のケースでは、そのような値を任意に選択する必要があります。何でも選択できますが、通常、データとは明らかに異なる値を選択することをお勧めします(たとえば、データは0から100の範囲のパーセンテージであるため、欠落データのエンコードに999を選択するか、データが人間の年齢であり、欠落している観測値に負の値を使用します)。その背後にある考え方は、そうすることで、何かがうまくいかず、数字が足りない場合に気づくことができるはずだということです。

ただし、このようなエンコーディングの問題は、実際には特別なエンコーディングに気付かず、結果がゴミになることです。


2

データセットに計算された変数はありますか?または、これはマージ/ソートされたデータから来る分析データセットですか?一部のソフトウェアでは、非常に大きな負の値を使用して欠落データを示します。しかし、他のソフトウェアはNAまたはで欠損値を作成します.。それらが矛盾している場合、通常、いくつかの後処理によって意見の相違が生じています。


2

もちろん、SPSSでは、欠損値999または何かが特別な欠損コードとしてタグ付けされ、他の値とは別に処理されます。個別に集計するか、完全に除外することができます。ゼロ除算やlog(0)などの結果から区別されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.