Mengapa sebagian orang menggunakan -999 atau -9999 untuk menggantikan nilai yang hilang?


32

Saya punya dataset. Ada banyak nilai yang hilang. Untuk beberapa kolom, nilai yang hilang diganti dengan -999, tetapi kolom lainnya, nilai yang hilang ditandai sebagai 'NA'.

Mengapa kita menggunakan -999 untuk menggantikan nilai yang hilang?


1
Saya belum pernah melihat -999 sendiri. Sejauh ini saya telah melihat string kosong dan As.
Ye Tian

12
Karena mereka ingin mengacaukan hasil bagi orang-orang yang melakukan analisis dangkal dan tidak membaca dokumentasi dengan cermat! (Meski serius, @Stephan Kolassa memiliki jawaban yang sebenarnya.)
Matthew Gunn

1
Tanyakan orang yang menyediakan dataset ...?
BlueRaja - Danny Pflughoeft

Lebih baik lagi adalah 999 nilai dalam kolom pengukuran untuk menunjukkan pengukuran tidak berlaku ... setidaknya -999 atau 0 akan memiliki makna semantik bahwa itu bukan nilai yang valid / penting. 999 adalah yang terburuk.
Adam Martin

Saya merasa seperti pernah membaca bahwa ini adalah konvensi dari hari-hari merekam data pada kartu punch. Menghilangkan deretan angka 9 yang penuh membuat data yang hilang jelas terlihat ketika melihat kartu karena itu benar-benar "baris yang hilang". Saya tidak dapat menemukan referensi untuk mendukung ini, jadi saya akan meninggalkannya sebagai komentar.
Lucas

Jawaban:


65

Ini adalah ketidaksepakatan dari waktu sebelumnya, ketika perangkat lunak komputer menyimpan vektor numerik sebagai vektor numerik. Tidak ada bilangan real yang memiliki semantik "Aku hilang". Jadi ketika perangkat lunak statistik awal harus membedakan antara angka "benar" dan nilai yang hilang, mereka memasukkan sesuatu yang "jelas" bukan angka yang valid, seperti -999 atau -9999.

Tentu saja, bahwa -999 atau -9999 berarti nilai yang hilang tidak "jelas" sama sekali. Cukup sering, itu bisa menjadi nilai yang valid. Kecuali Anda secara eksplisit memeriksa nilai-nilai tersebut, Anda dapat memiliki semua jenis kesalahan "menarik" dalam analisis Anda.

Saat ini, vektor-vektor numerik yang dapat memuat nilai-nilai yang hilang secara internal direpresentasikan sebagai vektor-vektor numerik "diperkaya", yaitu vektor-vektor numerik dengan informasi tambahan mengenai nilai-nilai mana yang hilang. Ini tentu saja jauh lebih baik, karena nilai yang hilang akan diperlakukan seperti itu dan tidak salah diperlakukan sebagai valid.

Sayangnya, beberapa perangkat lunak masih menggunakan konvensi semacam itu, mungkin untuk kompatibilitas. Dan beberapa pengguna telah menyerap konvensi ini melalui osmosis informal dan memasukkan -999 bukannya NA bahkan jika perangkat lunak mereka mendukung dengan bersih memasukkan nilai yang hilang.

Moral: jangan menyandikan nilai yang hilang sebagai -999.


1
Selain itu menjadi ketidaksepakatan dari masa sebelumnya, ada kemungkinan orang yang tidak pernah belajar bahwa ada representasi eksplisit dari nilai-nilai yang hilang, dan karenanya, ketika mereka perlu memasukkan nilai yang hilang, angka bahwa hal yang digunakan adalah semacam palsu jumlah.
Kodiologist

9
Ini bukan hanya masalah ketidaksepakatan. Jika saya menulis alat untuk melakukan manipulasi data, membaca kolom angka itu mudah dilakukan di hampir semua bahasa pemrograman di luar sana. Membaca nilai-nilai dalam, mendeteksi nilai-nilai non-numerik, dan menguraikannya sesuai membutuhkan lebih banyak waktu. Dan jika Anda berpikir -9999 mucks dengan statistik, kelompok saya bekerja dengan saya telah mengembangkan cinta menggunakan 1e32 untuk nilai yang tidak valid. Biarkan saya memberi tahu Anda apa yang terjadi pada varians Anda ketika Anda melakukannya!
Cort Ammon - Reinstate Monica

1
Hebat, jawaban succint. Tetapi menambahkan beberapa detail historis mungkin membuatnya menjadi jawaban yang lebih baik. Harus diakui, itu akan membutuhkan penelitian. :)
tchakravarty

1
Pengkodean seperti itu mungkin juga digunakan untuk menunjukkan beberapa jenis kesalahan pengukuran lainnya; yaitu "mesin tidak berfungsi" vs. "tidak ada orang di sana untuk melakukan pengukuran".
Hao Ye

1
@qqqwww: akan lebih baik untuk mendeteksi nilai yang digunakan untuk menunjukkan hilangnya dan mengonversi entri tersebut menjadi benar hilang atau NA. Diskretisasi data numerik biasanya bukan ide yang baik.
S. Kolassa - Kembalikan Monica

24

Nilai-nilai tersebut untuk database. Sebagian besar basis data lama, dan banyak saat ini, mengalokasikan sejumlah digit untuk data bernilai integer. Angka seperti -999 adalah yang terkecil yang dapat disimpan dalam empat karakter, -9999 dalam lima karakter, dan seterusnya.

(Seharusnya dikatakan bahwa - menurut definisi - bidang numerik tidak dapat menyimpan karakter alfanumerik seperti "NA". Beberapa kode numerik harus digunakan untuk mewakili data yang hilang atau tidak valid.)

Mengapa menggunakan angka paling negatif yang dapat disimpan untuk menandakan nilai yang hilang? Karena jika Anda salah memperlakukannya sebagai angka yang valid, Anda ingin hasilnya secara dramatis salah. Semakin jauh kode Anda untuk nilai-nilai yang hilang didapat dari bersikap realistis, semakin aman Anda, karena input yang sangat salah biasanya mengacaukan output. (Metode statistik yang kuat adalah pengecualian!)

Bagaimana kesalahan seperti itu bisa terjadi? Ini terjadi setiap saat ketika data dipertukarkan antara sistem. Suatu sistem yang mengasumsikan -9999 mewakili nilai yang hilang akan dengan gembira menampilkan nilai itu ketika Anda menulis data dalam sebagian besar format, seperti CSV. Sistem yang membaca bahwa file CSV mungkin tidak "tahu" (atau tidak "diberitahu") untuk memperlakukan nilai-nilai seperti hilang.

Alasan lain adalah bahwa data statistik dan platform komputasi yang baik mengenali berbagai jenis nilai yang hilang: NaN, nilai yang benar-benar hilang, luapan, arus bawah, non-respons, dll, dll. Dengan mengabdikan nilai yang paling negatif yang mungkin (seperti -9999, - 9998, -9997, dll) untuk ini, Anda membuatnya mudah untuk menanyakan semua nilai yang hilang dari tabel atau array apa pun.

Yang lain adalah bahwa nilai-nilai seperti itu biasanya muncul di tampilan grafis sebagai pencilan ekstrim. Dari semua nilai yang Anda pilih untuk menonjol dalam grafik, yang paling negatif mungkin memiliki peluang terbesar untuk berada jauh dari data Anda.


Ada implikasi dan generalisasi yang berguna:

  • 10303

  • Adopsi aturan standar jenis ini untuk membuatnya mudah menemukan kode NoData dalam keadaan baru (ketika Anda merancang perangkat lunak basis data Anda sendiri).

  • Rancang perangkat lunak dan sistem Anda untuk gagal secara dramatis jika gagal sama sekali. Bug terburuk adalah mereka yang intermiten, acak, atau kecil, karena mereka dapat tidak terdeteksi dan sulit untuk diburu.


2
Tentu saja, jika Anda menggunakan float, Anda bisa menggunakan NaNnilai-nilai yang hilang. Itu tidak memiliki ambiguitas tentang apakah itu nilai numerik yang valid atau tidak, dan (mengingat bahwa sebagian besar operasi floating-point standar adalah NaN-propagating) akan mengacaukan perhitungan yang keliru memperlakukannya sebagai titik data yang valid bahkan lebih pasti dan jelas daripada, mengatakan,-10303akan.
Ilmari Karonen

NaN Bukan Angka, NA Tidak Tersedia setidaknya dalam R
llrs

1
Secara teori IEEE float mendukung berbagai jenis NaN yang akan berfungsi dengan baik sebagai tag untuk berbagai jenis data yang hilang / tidak valid. Dalam praktiknya sebagian besar bahasa pemrograman tidak memiliki dukungan yang tepat untuk membedakan NaNs dan cenderung kehilangan informasi tambahan itu.
CodesInChaos

Sangat bagus kecuali untuk bit tanda tidak mengambil ruang dalam skema yang sebenarnya digunakan oleh database. Mereka akan terpecah menjadi pasangan digit 00-99 dan memperlakukannya sebagai angka; tetapi jika angkanya negatif, mereka akan menyimpan 255 - # bukan nomor. Juga 127 dan 128 digunakan untuk +/- inf.
Yosua

@ Yosua Itu mungkin benar untuk beberapa database, tapi jelas tidak demikian untuk banyak lainnya, terutama di awal pengembangan. Database apa pun yang menggunakan nilai disandikan desimal tidak bisa menggunakan mekanisme yang Anda usulkan. Contoh dari basis data PC awal dan banyak digunakan yang berfungsi seperti yang saya jelaskan adalah dBase, akhirnya ditawarkan sebagai produk dBase III, Clipper, dan FoxPro (diakuisisi oleh Microsoft dan kemudian ditinggalkan demi Access). Untuk format pertukaran data lebar bidang tetap, tanda minus selalu menempati karakter.
Whuber

13

Anda bisa menggunakan apa saja untuk menyandikan nilai yang hilang. Beberapa perangkat lunak, seperti R, menggunakan nilai khusus untuk menyandikan data yang hilang, tetapi ada juga paket perangkat lunak, misalnya SPSS, yang tidak memiliki kode khusus untuk data yang hilang. Dalam kasus kedua Anda perlu membuat pilihan sewenang - wenang untuk nilai-nilai tersebut. Anda dapat memilih apa saja , tetapi umumnya adalah ide yang baik untuk memilih beberapa nilai yang tampak berbeda dari data Anda (mis. Data Anda adalah persentase dalam kisaran 0-100, sehingga Anda memilih 999 untuk menyandikan data yang hilang, atau data Anda adalah usia manusia dan Anda menggunakan nilai negatif untuk pengamatan yang hilang). Gagasan di balik itu adalah bahwa dengan melakukan itu Anda harus dapat melihat jika ada yang salah dan jumlahnya tidak bertambah.

Masalah dengan pengkodean tersebut adalah bahwa Anda sebenarnya tidak dapat melihat pengkodean khusus dan berakhir dengan hasil sampah.


2

Apakah ada variabel yang dihitung dalam dataset? Atau apakah ini merupakan dataset analitik yang berasal dari gabungan data? Beberapa perangkat lunak menggunakan nilai negatif yang sangat besar untuk menunjukkan data yang hilang. Tetapi perangkat lunak lain menciptakan nilai yang hilang dengan NA atau .. Ketika mereka berbeda, biasanya beberapa pemrosesan pos telah menyebabkan ketidaksepakatan.


2

Tentu saja, dalam SPSS, nilai yang hilang 999 atau apa pun yang ditandai sebagai kode khusus yang hilang dan ditangani secara terpisah dari nilai-nilai lain. Ini dapat ditabulasikan secara terpisah atau dikecualikan seluruhnya. Perbedaan dibuat dari hasil hal-hal seperti nol pembagian atau log (0).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.