ทำไมบางคนใช้ -999 หรือ -9999 เพื่อแทนที่ค่าที่หายไป?


32

ฉันมีชุดข้อมูล มีค่าที่ขาดหายไปมากมาย สำหรับบางคอลัมน์ค่าที่หายไปถูกแทนที่ด้วย -999 แต่คอลัมน์อื่น ๆ ค่าที่หายไปถูกทำเครื่องหมายเป็น 'NA'

ทำไมเราต้องใช้ -999 เพื่อแทนที่ค่าที่หายไป?


1
ฉันไม่เคยเห็นตัวเอง -999 จนถึงตอนนี้ฉันเห็นสตริงว่างและ NA
Ye Tian

12
เพราะพวกเขาต้องการทำลายผลลัพธ์อย่างน่ากลัวสำหรับผู้ที่ทำการวิเคราะห์ผิวเผินและไม่อ่านเอกสารอย่างละเอียด! (จริงจังแม้ว่า @Stephan Kolassa มีคำตอบที่แท้จริง)
Matthew Gunn

1
ถามคนที่ให้ชุดข้อมูล ... ?
BlueRaja - Danny Pflughoeft

ยังดีกว่าคือ 999 ค่าในคอลัมน์การวัดเพื่อระบุว่าการวัดใช้ไม่ได้ ... อย่างน้อย -999 หรือ 0 จะมีความหมายเชิงความหมายว่ามันไม่ใช่ค่าที่ถูกต้อง / สำคัญ 999 เป็นสิ่งที่แย่ที่สุด
Adam Martin

ฉันรู้สึกเหมือนฉันเคยอ่านว่านี่เป็นการประชุมตั้งแต่สมัยของการบันทึกข้อมูลลงในการ์ดเจาะ การเคาะแถวเต็มของ 9s ทำให้มองเห็นข้อมูลที่หายไปได้ชัดเจนเมื่อมองที่การ์ดเนื่องจากเป็น "แถวที่หายไป" อย่างแท้จริง ฉันไม่พบข้อมูลอ้างอิงเพื่อสำรองข้อมูลนี้ดังนั้นฉันจะปล่อยไว้เป็นความคิดเห็น
ลูคัส

คำตอบ:


65

นี่คือการค้างชำระจากครั้งก่อนเมื่อซอฟต์แวร์คอมพิวเตอร์จัดเก็บเวกเตอร์ตัวเลขเป็นเวกเตอร์ตัวเลข ไม่มีจำนวนจริงมีความหมาย "ฉันหายไป" ดังนั้นเมื่อซอฟต์แวร์เชิงสถิติในช่วงต้นต้องแยกความแตกต่างระหว่างตัวเลข "ของจริง" และค่าที่หายไปพวกเขาวางสิ่งที่ "ชัดเจน" ไม่ใช่ตัวเลขที่ถูกต้องเช่น -999 หรือ -9999

แน่นอนว่า -999 หรือ -9999 ย่อมาจากค่าที่หายไปไม่ใช่ "ชัดเจน" เลย บ่อยครั้งที่มันสามารถเป็นค่าที่ถูกต้องได้อย่างแน่นอน หากคุณไม่ตรวจสอบค่าดังกล่าวอย่างชัดเจนคุณสามารถมีข้อผิดพลาด "น่าสนใจ" ทุกประเภทในการวิเคราะห์ของคุณ

ทุกวันนี้เวกเตอร์ตัวเลขที่สามารถมีค่าที่หายไปจะถูกแสดงภายในว่าเป็นเวกเตอร์ตัวเลข "ที่มีการผสาน" เช่นเวกเตอร์ตัวเลขพร้อมข้อมูลเพิ่มเติมเกี่ยวกับค่าที่หายไป หลักสูตรนี้ดีกว่ามากเนื่องจากค่าที่หายไปจะได้รับการปฏิบัติเช่นนี้และไม่ถือว่าผิดพลาดว่าถูกต้อง

น่าเสียดายที่ซอฟต์แวร์บางตัวยังคงใช้หลักการดังกล่าว และผู้ใช้บางคนได้ดื่มด่ำกับการประชุมครั้งนี้ผ่านการดูดซึมอย่างไม่เป็นทางการและป้อน -999 แทน NA แม้ว่าซอฟต์แวร์ของพวกเขาจะสนับสนุนการป้อนค่าที่หายไปอย่างหมดจด

คุณธรรม: อย่าเข้ารหัสค่าที่ขาดหายไปเป็น -999


1
นอกเหนือจากการเป็นสิ่งที่ค้างไว้จากครั้งก่อนมีคนที่ไม่เคยเรียนรู้ว่ามีตัวแทนที่ชัดเจนของค่าที่ขาดหายไปและดังนั้นเมื่อพวกเขาจำเป็นต้องใส่ค่าที่ขาดหายไปคิดว่าสิ่งที่จะใช้เป็นของปลอมบางชนิด จำนวน.
ประสาทวิทยา

9
นี่ไม่ได้เป็นเพียงแค่สิ่งที่ค้างไว้ ถ้าฉันกำลังเขียนเครื่องมือเพื่อจัดการข้อมูลบางอย่างการอ่านในคอลัมน์ของตัวเลขเป็นเรื่องง่ายในภาษาโปรแกรมใด ๆ การอ่านค่าในการตรวจจับค่าที่ไม่ใช่ตัวเลขและการแยกวิเคราะห์ตามนั้นใช้เวลาค่อนข้างมาก และถ้าคุณคิดว่า -9999 mucks กับสถิติกลุ่มของฉันที่ฉันทำงานด้วยได้พัฒนาความรักในการใช้ 1e32 สำหรับค่าที่ไม่ถูกต้อง ฉันจะบอกคุณว่าเกิดอะไรขึ้นกับความแปรปรวนของคุณเมื่อคุณทำอย่างนั้น!
Cort Ammon

1
ยอดเยี่ยมคำตอบที่ประสบความสำเร็จ แต่การเพิ่มรายละเอียดทางประวัติศาสตร์อาจเป็นคำตอบที่ดียิ่งขึ้น เป็นที่ยอมรับว่าจะทำการวิจัย :)
tchakravarty

1
การเข้ารหัสดังกล่าวอาจใช้เพื่อแสดงถึงข้อผิดพลาดการวัดประเภทอื่น คือ "เครื่องไม่ทำงาน" กับ "ไม่มีใครอยู่ที่นั่นเพื่อทำการวัด"
Hao Ye

1
@qqqwww: วิธีที่ดีที่สุดคือการตรวจสอบค่าที่ใช้เพื่อระบุความหายไปและแปลงรายการดังกล่าวเป็นความหายไปจริงหรือ NA การแยกข้อมูลตัวเลขเป็นเรื่องปกติไม่ใช่ความคิดที่ดี
S. Kolassa - Reinstate Monica

24

ค่าดังกล่าวมีไว้สำหรับฐานข้อมูล ฐานข้อมูลส่วนใหญ่นานมาแล้วและอีกหลาย ๆ วันนี้จัดสรรจำนวนหลักสำหรับข้อมูลที่มีค่าจำนวนเต็ม ตัวเลขอย่างเช่น -999 เป็นขนาดที่เล็กที่สุดที่สามารถเก็บไว้ในสี่ตัวอักษร -9999 ในห้าตัวอักษรเป็นต้น

(ควรไปโดยไม่บอกว่า - ตามคำจำกัดความ - ฟิลด์ตัวเลขไม่สามารถเก็บอักขระที่เป็นตัวอักษรและตัวเลขเช่น "NA" รหัสตัวเลขบางตัวต้องใช้เพื่อแสดงข้อมูลที่หายไปหรือไม่ถูกต้อง)

เหตุใดจึงต้องใช้จำนวนลบมากที่สุดที่สามารถจัดเก็บเพื่อแสดงถึงค่าที่ขาดหายไป เพราะหากคุณถือว่าเป็นหมายเลขที่ไม่ถูกต้องคุณต้องการให้ผลลัพธ์ไม่ถูกต้องอย่างมาก ยิ่งรหัสของคุณสำหรับค่าที่หายไปนั้นเพิ่มขึ้นจากความเป็นจริงความปลอดภัยของคุณก็ยิ่งมากขึ้นเท่านั้น (วิธีการทางสถิติที่แข็งแกร่งนั้นเป็นข้อยกเว้นที่น่าทึ่ง!)

ความผิดพลาดดังกล่าวเกิดขึ้นได้อย่างไร? สิ่งนี้เกิดขึ้นตลอดเวลาเมื่อมีการแลกเปลี่ยนข้อมูลระหว่างระบบ ระบบที่ถือว่า -9999 แทนค่าที่หายไปจะส่งออกค่านั้นเมื่อคุณเขียนข้อมูลในรูปแบบส่วนใหญ่เช่น CSV ระบบที่อ่านว่าไฟล์ CSV อาจไม่ "รู้" (หรือไม่ใช่ "บอก") ในการรักษาค่าดังกล่าวว่าหายไป

อีกเหตุผลหนึ่งคือว่าข้อมูลทางสถิติที่ดีและแพลตฟอร์มการคำนวณยอมรับค่าที่ขาดหายไปหลายประเภท: NaNs ค่าที่ขาดหายไปอย่างแท้จริง overflows อันเดอร์โฟลว์การไม่ตอบกลับ ฯลฯ โดยการจัดสรรค่าที่เป็นไปได้เชิงลบมากที่สุด (เช่น -9999, - 9998, -9997 และอื่น ๆ ) คุณสามารถทำการค้นหาค่าที่ขาดหายไปทั้งหมดจากตารางหรืออาร์เรย์ใด ๆ

อีกอย่างหนึ่งก็คือค่าดังกล่าวมักจะปรากฏในการแสดงผลกราฟิกเป็นค่าผิดปกติมาก ในค่าทั้งหมดที่คุณสามารถเลือกให้โดดเด่นในกราฟิกค่าที่เป็นไปได้เชิงลบมากที่สุดคือโอกาสที่ยิ่งใหญ่ที่สุดที่จะอยู่ห่างจากข้อมูลของคุณ


มีความหมายที่เป็นประโยชน์และภาพรวม:

  • 10303

  • ใช้กฎมาตรฐานของประเภทนี้เพื่อให้ง่ายต่อการคิดค้นรหัส NoData ในสถานการณ์ใหม่ (เมื่อคุณออกแบบซอฟต์แวร์ฐานข้อมูลของคุณเอง)

  • ออกแบบซอฟต์แวร์และระบบของคุณให้ล้มเหลวอย่างมากหากไม่ผ่านเลย ข้อผิดพลาดที่เลวร้ายที่สุดคือข้อผิดพลาดที่ไม่ต่อเนื่องแบบสุ่มหรือเล็ก ๆ เพราะพวกมันไม่สามารถตรวจจับได้และยากที่จะตามล่า


2
NaN10303

NaN ไม่ใช่ตัวเลข, NA ไม่มีอย่างน้อยใน R
llrs

1
ตามทฤษฎีแล้ว IEEE Floats รองรับ NaN ประเภทต่างๆซึ่งจะทำงานได้ดีเหมือนกับแท็กสำหรับข้อมูลที่ขาดหายไป / ไม่ถูกต้อง ในทางปฏิบัติภาษาการเขียนโปรแกรมส่วนใหญ่ขาดการสนับสนุนที่เหมาะสมสำหรับการแยกแยะ NaNs ดังกล่าวและมีแนวโน้มที่จะสูญเสียข้อมูลเพิ่มเติม
CodesInChaos

ดีมากยกเว้นบิตลงชื่อไม่ใช้พื้นที่ในโครงร่างที่ใช้จริงโดยฐานข้อมูล พวกเขาจะแบ่งออกเป็นคู่หลัก 00-99 และถือเป็นตัวเลข; แต่ถ้าจำนวนเป็นลบพวกเขาจะเก็บ 255 - # แทนจำนวน นอกจากนี้ยังมีการใช้ 127 และ 128 สำหรับ +/- inf
Joshua

@ โจชัวนั่นอาจจะถูกต้องสำหรับบางฐานข้อมูล แต่แน่นอนว่าไม่ใช่สำหรับคนอื่น ๆ โดยเฉพาะในช่วงต้นของการพัฒนา ฐานข้อมูลใด ๆ ที่ใช้ค่าที่เข้ารหัสแบบทศนิยมไม่สามารถใช้กลไกที่คุณเสนอได้ ตัวอย่างของฐานข้อมูลพีซีที่ใช้กันอย่างแพร่หลายและใช้งานได้ตามที่อธิบายไว้คือ dBase ในที่สุดก็มีให้ในรูปแบบของผลิตภัณฑ์ dBase III, Clipper และ FoxPro (ซื้อโดย Microsoft และภายหลังได้รับการสนับสนุนจาก Access) สำหรับรูปแบบการแลกเปลี่ยนข้อมูลความกว้างของฟิลด์คงที่เครื่องหมายลบจะใช้อักขระเสมอ
whuber

13

คุณสามารถใช้อะไรก็ได้เพื่อเข้ารหัสค่าที่หายไป ซอฟต์แวร์บางตัวเช่น R ใช้ค่าพิเศษเพื่อเข้ารหัสข้อมูลที่หายไป แต่ยังมีแพ็คเกจซอฟต์แวร์เช่น SPSS ซึ่งไม่มีรหัสพิเศษสำหรับข้อมูลที่ขาดหายไป ในกรณีที่สองคุณจำเป็นต้องเลือกโดยพลการสำหรับค่าดังกล่าว คุณสามารถเลือกอะไรก็ได้แต่โดยทั่วไปคุณควรเลือกค่าบางอย่างที่แตกต่างอย่างเห็นได้ชัดจากข้อมูลของคุณ (เช่นข้อมูลของคุณเป็นเปอร์เซ็นต์ในช่วง 0-100 ดังนั้นคุณเลือก 999 สำหรับการเข้ารหัสข้อมูลที่หายไปหรือข้อมูลของคุณเป็นอายุของมนุษย์และ คุณใช้ค่าลบสำหรับการสังเกตที่ขาดหายไป) แนวคิดเบื้องหลังคือการทำเช่นนั้นคุณควรจะสังเกตได้ว่ามีบางอย่างผิดปกติและตัวเลขไม่เพิ่มขึ้น

ปัญหาเกี่ยวกับการเข้ารหัสเช่นนั้นจริง ๆ แล้วคุณไม่สามารถสังเกตเห็นการเข้ารหัสพิเศษและจบลงด้วยผลลัพธ์ขยะ


2

มีตัวแปรที่คำนวณในชุดข้อมูลหรือไม่ หรือนี่เป็นชุดข้อมูลการวิเคราะห์ที่มาจากการผสาน / เรียงลำดับข้อมูลหรือไม่ ซอฟต์แวร์บางตัวใช้ค่าลบจำนวนมากเพื่อแสดงข้อมูลที่ขาดหายไป แต่ซอฟต์แวร์อื่น ๆ สร้างค่าที่ขาดหายกับ NA .หรือ เมื่อพวกเขาไม่ลงรอยกันโดยปกติการโพสต์โพสต์จะนำไปสู่ความขัดแย้ง


2

แน่นอนใน SPSS ค่าที่ขาดหายไป 999 หรืออะไรก็ตามที่ติดแท็กเป็นรหัสที่หายไปพิเศษและจัดการแยกต่างหากจากค่าอื่น ๆ มันอาจจะเป็นตารางแยกหรือแยกออกทั้งหมด ความแตกต่างเกิดจากผลลัพธ์ของสิ่งต่าง ๆ เช่นการหารศูนย์หรือบันทึก (0)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.