Tại sao một số người sử dụng -999 hoặc -9999 để thay thế các giá trị bị thiếu?


32

Tôi có một bộ dữ liệu. Có rất nhiều giá trị còn thiếu. Đối với một số cột, giá trị bị thiếu đã được thay thế bằng -999, nhưng các cột khác, giá trị bị thiếu được đánh dấu là 'NA'.

Tại sao chúng ta sẽ sử dụng -999 để thay thế giá trị còn thiếu?


1
Tôi chưa bao giờ thấy -999 bản thân mình. Cho đến nay tôi đã thấy các chuỗi trống và NA.
Ye Tian

12
Bởi vì họ muốn làm rối tung kết quả khủng khiếp cho những người phân tích hời hợt và không đọc kỹ tài liệu! (Mặc dù nghiêm túc, @Stephan Kolassa có câu trả lời thực sự.)
Matthew Gunn

1
Hỏi người đã cung cấp tập dữ liệu ...?
BlueRaja - Daniel Pflughoeft

Tốt hơn nữa là 999 giá trị trong các cột đo lường để chỉ ra phép đo không áp dụng ... ít nhất là -999 hoặc 0 sẽ có ý nghĩa ngữ nghĩa rằng đó không phải là giá trị hợp lệ / quan trọng. 999 chỉ là tồi tệ nhất.
Adam Martin

Tôi cảm thấy như tôi đã từng đọc rằng đây là một quy ước từ những ngày ghi dữ liệu trên thẻ đục lỗ. Việc gõ một hàng đầy đủ trong số 9 khiến dữ liệu bị thiếu hiển thị rõ ràng khi nhìn vào thẻ vì nó thực sự là một "hàng bị thiếu". Tôi không thể tìm thấy một tài liệu tham khảo để sao lưu này, vì vậy tôi sẽ chỉ để lại như một bình luận.
Lucas

Câu trả lời:


65

Đây là một sự trì hoãn từ thời trước, khi phần mềm máy tính lưu trữ các vectơ số dưới dạng vectơ số. Không có số thực có ngữ nghĩa "Tôi đang thiếu". Vì vậy, khi phần mềm thống kê ban đầu phải phân biệt giữa các số "thực" và các giá trị bị thiếu, họ đã đưa vào một cái gì đó "rõ ràng" không phải là một số hợp lệ, như -999 hoặc -9999.

Tất nhiên, -999 hoặc -9999 là viết tắt của một giá trị bị thiếu hoàn toàn không phải là "hiển nhiên". Rất thường xuyên, nó chắc chắn có thể là một giá trị hợp lệ. Trừ khi bạn kiểm tra rõ ràng các giá trị như vậy, bạn có thể có tất cả các loại lỗi "thú vị" trong các phân tích của mình.

Ngày nay, các vectơ số có thể chứa các giá trị bị thiếu được biểu diễn bên trong dưới dạng các vectơ số "được làm giàu", tức là các vectơ số có thông tin bổ sung về các giá trị bị thiếu. Điều này tất nhiên là tốt hơn nhiều, bởi vì sau đó các giá trị bị thiếu sẽ được xử lý như vậy và không bị coi nhầm là hợp lệ.

Thật không may, một số phần mềm vẫn sử dụng một quy ước như vậy, có lẽ để tương thích. Và một số người dùng đã thực hiện quy ước này thông qua thẩm thấu không chính thức và nhập -999 thay vì NA ngay cả khi phần mềm của họ hỗ trợ nhập sạch các giá trị bị thiếu.

Đạo đức: không mã hóa các giá trị bị thiếu là -999.


1
Ngoài việc nó bị trì hoãn từ thời trước, có khả năng những người chưa bao giờ biết rằng đại diện rõ ràng của các giá trị bị thiếu tồn tại, và vì vậy, khi họ cần chèn một giá trị bị thiếu, hình dung rằng thứ được sử dụng là một loại không có thật con số.
Nhà khoa học Kodi

9
Đây không chỉ là một điều khó khăn. Nếu tôi đang viết một công cụ để thực hiện một số thao tác dữ liệu, thì việc đọc trong các cột số rất dễ dàng với bất kỳ ngôn ngữ lập trình nào ngoài kia. Đọc các giá trị trong, phát hiện các giá trị không phải là số và phân tích chúng theo đó sẽ mất khá nhiều thời gian hơn. Và nếu bạn nghĩ -9999 mucks với số liệu thống kê, nhóm tôi làm việc cùng đã phát triển tình yêu sử dụng 1e32 cho các giá trị không hợp lệ. Hãy để tôi nói cho bạn biết điều gì xảy ra với phương sai của bạn khi bạn làm điều đó!
Cort Ammon - Phục hồi lại

1
Tuyệt vời, câu trả lời ngắn gọn. Nhưng thêm một số chi tiết lịch sử có thể làm cho nó một câu trả lời thậm chí tốt hơn. Phải thừa nhận rằng, sẽ mất một số nghiên cứu. :)
tchakravarty

1
Mã hóa như vậy cũng có thể được sử dụng để biểu thị một số loại lỗi đo lường khác; tức là "máy không hoạt động" so với "không có ai ở đó để thực hiện phép đo".
Hao Ye

1
@qqqwww: tốt nhất là phát hiện giá trị được sử dụng để biểu thị sự thiếu và chuyển đổi các mục đó thành thiếu thực hoặc NA. Sự rời rạc của dữ liệu số thường không phải là một ý tưởng tốt.
S. Kolassa - Phục hồi lại

24

Các giá trị như vậy là cho cơ sở dữ liệu. Hầu hết các cơ sở dữ liệu từ lâu và nhiều ngày nay, đã phân bổ một số chữ số cố định cho dữ liệu có giá trị nguyên. Một số như -999 là số nhỏ nhất có thể được lưu trữ trong bốn ký tự, -9999 trong năm ký tự, v.v.

(Cần phải đi mà không nói rằng - theo định nghĩa - một trường số không thể lưu trữ các ký tự chữ và số như "NA". Một số mã số phải được sử dụng để thể hiện dữ liệu bị thiếu hoặc không hợp lệ.)

Tại sao sử dụng số âm nhất có thể được lưu trữ để biểu thị một giá trị còn thiếu? Bởi vì nếu bạn nhầm nó là số hợp lệ, bạn muốn kết quả không chính xác. Các mã của bạn cho các giá trị bị thiếu càng trở nên thực tế, bạn càng an toàn, bởi vì đầu vào cực kỳ sai thường làm hỏng đầu ra. (Phương pháp thống kê mạnh mẽ là ngoại lệ đáng chú ý!)

Làm thế nào một sai lầm như vậy có thể xảy ra? Điều này xảy ra tất cả các thời gian khi dữ liệu được trao đổi giữa các hệ thống. Một hệ thống giả định -9999 đại diện cho một giá trị bị thiếu sẽ hoàn toàn xuất ra giá trị đó khi bạn ghi dữ liệu ra ở hầu hết các định dạng, chẳng hạn như CSV. Hệ thống đọc tệp CSV đó có thể không "biết" (hoặc không được "nói") để coi các giá trị đó là thiếu.

Một lý do khác là dữ liệu thống kê tốt và nền tảng điện toán nhận ra nhiều loại giá trị bị thiếu khác nhau: NaN, giá trị thực sự bị thiếu, tràn, tràn, không phản hồi, v.v. Bằng cách dành các giá trị âm nhất có thể (như -9999, - 9998, -9997, v.v.), bạn dễ dàng truy vấn tất cả các giá trị còn thiếu từ bất kỳ bảng hoặc mảng nào.

Một điều nữa là các giá trị như vậy thường hiển thị trong màn hình đồ họa dưới dạng ngoại lệ cực đoan. Trong tất cả các giá trị bạn có thể chọn để nổi bật trong một đồ họa, thì giá trị tiêu cực nhất có thể đứng trước cơ hội lớn nhất là cách xa dữ liệu của bạn.


Có ý nghĩa và khái quát hữu ích:

  • 10303

  • Áp dụng quy tắc chuẩn của loại này để giúp dễ dàng phát minh mã NoData trong các trường hợp mới (khi bạn đang thiết kế phần mềm cơ sở dữ liệu của riêng mình).

  • Thiết kế phần mềm và hệ thống của bạn sẽ thất bại đáng kể nếu chúng thất bại. Các lỗi tồi tệ nhất là những lỗi không liên tục, ngẫu nhiên hoặc nhỏ, bởi vì chúng có thể không bị phát hiện và rất khó để săn lùng.


2
NaN10303

NaN không phải là số, NA không có sẵn ít nhất trong R
llrs

1
Về lý thuyết, phao IEEE hỗ trợ các loại NaN khác nhau sẽ hoạt động tốt như các thẻ cho các loại dữ liệu bị thiếu / không hợp lệ khác nhau. Trong thực tế, hầu hết các ngôn ngữ lập trình đều thiếu sự hỗ trợ thích hợp để phân biệt các NaN như vậy và dễ bị mất thông tin bổ sung đó.
CodeInChaos

Rất tốt ngoại trừ bit dấu không chiếm bất kỳ khoảng trống nào trong lược đồ thực sự được sử dụng bởi cơ sở dữ liệu. Họ sẽ chia thành các cặp chữ số 00-99 và coi chúng là số; nhưng nếu số âm, họ sẽ lưu trữ 255 - # thay vì số. Ngoài ra 127 và 128 đã được sử dụng cho +/- inf.
Joshua

@Joshua Điều đó có thể đúng với một số cơ sở dữ liệu, nhưng chắc chắn không phải là trường hợp của nhiều người khác, đặc biệt là trong giai đoạn đầu phát triển. Bất kỳ cơ sở dữ liệu sử dụng giá trị mã hóa thập phân nào cũng không thể sử dụng cơ chế bạn đề xuất. Một ví dụ về cơ sở dữ liệu PC sớm và được sử dụng rộng rãi, hoạt động theo cách tôi mô tả là dBase, cuối cùng được cung cấp dưới dạng các sản phẩm dBase III, Clipper và FoxPro (được Microsoft mua lại và sau đó bị bỏ rơi có lợi cho Access). Đối với các định dạng trao đổi dữ liệu độ rộng trường cố định, dấu trừ luôn chiếm một ký tự.
whuber

13

Bạn có thể sử dụng bất cứ điều gì để mã hóa các giá trị còn thiếu. Một số phần mềm, như R, sử dụng các giá trị đặc biệt để mã hóa dữ liệu bị thiếu, nhưng cũng có các gói phần mềm, ví dụ SPSS, không có bất kỳ mã đặc biệt nào cho dữ liệu bị thiếu. Trong trường hợp thứ hai, bạn cần lựa chọn tùy ý cho các giá trị đó. Bạn có thể chọn bất cứ điều gì , nhưng nói chung, nên chọn một số giá trị khác biệt rõ ràng với dữ liệu của bạn (ví dụ: dữ liệu của bạn là tỷ lệ phần trăm trong phạm vi 0-100, vì vậy bạn chọn 999 để mã hóa dữ liệu bị thiếu hoặc dữ liệu của bạn là tuổi con người và bạn sử dụng các giá trị âm cho các quan sát bị thiếu). Ý tưởng đằng sau đó là bằng cách làm như vậy, bạn sẽ có thể nhận thấy nếu có sự cố xảy ra và các con số không cộng lại.

Tuy nhiên, vấn đề với mã hóa như vậy là bạn thực sự không thể nhận thấy mã hóa đặc biệt và kết thúc với kết quả rác.


2

Có các biến được tính toán trong bộ dữ liệu? Hay đây là một bộ dữ liệu phân tích đi kèm với dữ liệu được hợp nhất / sắp xếp? Một số phần mềm sử dụng các giá trị âm rất lớn để biểu thị dữ liệu bị thiếu. Nhưng phần mềm khác tạo ra các giá trị thiếu với NA hoặc .. Khi chúng không nhất quán, thông thường một số xử lý bài đã dẫn đến sự bất đồng.


2

Tất nhiên, trong SPSS, (các) giá trị bị thiếu 999 hoặc bất cứ thứ gì IS được gắn thẻ là một mã bị thiếu đặc biệt và được xử lý tách biệt với các giá trị khác. Nó có thể được lập bảng riêng hoặc loại trừ hoàn toàn. Một sự khác biệt được tạo ra từ kết quả của những thứ như phép chia 0 hoặc log (0).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.