왜 어떤 사람들은 -999 또는 -9999를 사용하여 결 측값을 대체합니까?


32

데이터 세트가 있습니다. 결 측값이 많이 있습니다. 일부 열의 경우 결 측값이 -999로 대체되었지만 다른 열의 경우 결 측값이 'NA'로 표시되었습니다.

결 측값을 대체하기 위해 왜 -999를 사용합니까?


1
나는 -999를 본 적이 없다. 지금까지 나는 빈 줄과 NA를 보았습니다.
Ye Tian

12
피상적 인 분석을하고 문서를주의 깊게 읽지 않는 사람들을 위해 결과를 엉망으로 만들기를 원하기 때문입니다! (진실하지만 @Stephan Kolassa는 실제 답을 가지고 있습니다.)
Matthew Gunn

1
데이터 세트를 제공 한 사람에게 물어보십시오 ...?
BlueRaja-대니 Pflughoeft

측정 열에 999 개의 값이있어 측정이 적용되지 않음을 나타냅니다. 적어도 -999 또는 0은 의미 / 의미가 유효 / 중요 값이 아님을 의미합니다. 999는 최악입니다.
Adam Martin

나는 이것이 펀치 카드에 데이터를 기록한 시절의 관례라는 것을 한 번 읽은 것처럼 느낍니다. 9s의 전체 행을 두드리면 누락 된 데이터가 문자 그대로 "누락 된 행"이므로 카드를 볼 때 명확하게 표시됩니다. 이것을 뒷받침하는 참조를 찾을 수 없으므로 주석으로 남겨 두겠습니다.
Lucas

답변:


65

이것은 컴퓨터 소프트웨어가 숫자 형 벡터로 숫자 형 벡터를 저장했을 때의 시작입니다. 실수는 "I 'm missing"이라는 의미를 갖지 않습니다. 따라서 초기 통계 소프트웨어가 "진정한"숫자와 결 측값을 구별해야 할 때, 그들은 -999 나 -9999와 같이 "명확하게"유효한 숫자가 아닌 것을 넣었습니다.

물론 결 측값에 대해 -999 또는 -9999가 "명백한"것은 아닙니다. 종종 유효한 값일 수 있습니다. 너가 아니라면이러한 값 명시 적으로 확인 분석에 모든 종류의 "관심있는"오류가있을 수 있습니다.

오늘날, 결 측값을 포함 할 수있는 수치 벡터는 내부적으로 "풍부한"수치 벡터, 즉 결 측값에 대한 추가 정보가있는 수치 벡터로 표시됩니다. 결 측값은 그대로 취급되고 실수로 유효한 것으로 취급되지 않기 때문에 이것은 물론 훨씬 낫습니다.

불행히도 일부 소프트웨어는 여전히 호환성을 위해 이러한 규칙을 사용합니다. 그리고 일부 사용자는 비공식 삼투를 통해이 규칙을 받아들이고 소프트웨어가 결 측값을 깨끗하게 입력하도록 지원하더라도 NA 대신 -999를 입력합니다.

도덕 : 결 측값을 -999로 인코딩 하지 마십시오 .


1
이전 시대와 비교했을 때, 결 측값의 명시 적 표현이 존재한다는 것을 결코 배운 적이없는 사람들이있을 수 있으므로 결 측값을 삽입해야 할 때 사용하는 것이 일종의 가짜임을 파악하십시오. 번호.
Kodiologist

9
이것은 단지 홀드 아웃이 아닙니다. 데이터를 조작 할 수있는 도구를 작성하는 경우 프로그래밍 언어를 사용하여 숫자 열을 쉽게 읽을 수 있습니다. 값을 읽고, 숫자가 아닌 값을 감지하고, 그에 따라 구문 분석하는 데는 훨씬 더 많은 시간이 걸립니다. 그리고 당신이 통계와 함께 -9999 mucks를 생각한다면, 내가 작업하는 내 그룹은 유효하지 않은 값에 1e32를 사용하는 것을 좋아했습니다. 그렇게 할 때 차이가 어떻게되는지 알려 드리겠습니다!
Cort Ammon

1
훌륭하고 간결한 답변. 그러나 역사적 세부 사항을 추가하면 더 나은 답변이 될 수 있습니다. 분명히, 그것은 약간의 연구가 필요할 것입니다. :)
tchakravarty

1
이러한 인코딩은 다른 종류의 측정 오류를 나타내는 데 사용될 수도 있습니다. 즉, "기계가 작동하지 않았습니다"대 "측정 할 사람이 없었습니다".
Hao Ye

1
@qqqwww : 누락을 나타내는 데 사용되는 값을 감지하고 이러한 항목을 실제 누락 또는 NA로 변환하는 것이 가장 좋습니다. 수치 데이터의 이산화는 일반적으로 좋은 생각이 아닙니다.
S. Kolassa-복원 Monica Monica

24

이러한 값은 데이터베이스에 대한 것입니다. 오래 전과 현재 대부분의 데이터베이스는 정수 값 데이터에 고정 된 자릿수를 할당했습니다. -999와 같은 숫자는 4 자, 5,999 자 등으로 저장할 수있는 가장 작은 숫자입니다.

(정의상 숫자 필드는 "NA"와 같은 영숫자를 저장할 수 없습니다. 일부 숫자 코드는 누락되거나 유효하지 않은 데이터를 나타 내기 위해 사용해야합니다.)

결 측값을 나타 내기 위해 저장할 수있는 가장 음수를 사용하는 이유는 무엇입니까? 실수로 올바른 숫자로 취급하면 결과가 크게 잘못되기를 원하기 때문입니다. 결 측값에 대한 코드가 현실적 일수록 더 안전합니다. 크게 잘못된 입력은 일반적으로 출력을 망가 뜨리기 때문입니다. (강력한 통계 방법은 예외입니다!)

그러한 실수는 어떻게 일어날 수 있습니까? 이것은 시스템간에 데이터가 교환 될 때 항상 발생합니다. -9999를 나타내는 시스템은 결 측값을 나타내며 CSV와 같은 대부분의 형식으로 데이터를 쓸 때 해당 값을 희미하게 출력합니다. CSV 파일을 읽는 시스템은 이러한 값을 누락 된 것으로 처리하기 위해 "알지"못하거나 "말리지"않을 수 있습니다.

또 다른 이유는 우수한 통계 데이터 및 컴퓨팅 플랫폼이 NaN, 실제 결 측값, 오버플로, 언더 플로, 비 응답 등 다양한 종류의 결 측값을 인식하기 때문입니다. 가능한 가장 음의 값 (예 : -9999, 9998, -9997 등)을 사용하면 테이블이나 배열에서 누락 된 모든 값을 쉽게 쿼리 할 수 ​​있습니다.

또 다른 하나는 그러한 값이 일반적으로 극단적 인 이상치로 그래픽 디스플레이에 표시된다는 것입니다. 그래픽에서 눈에 띄도록 선택할 수있는 모든 값 중에서 가장 부정적인 값은 데이터에서 멀어 질 가능성이 가장 큽니다.


유용한 의미와 일반화가 있습니다.

  • 10303

  • 이 유형의 표준 규칙을 채택하면 새로운 환경에서 고유 한 데이터베이스 소프트웨어를 설계 할 때 NoData 코드를 쉽게 발명 할 수 있습니다.

  • 소프트웨어와 시스템이 전혀 실패하면 극적으로 실패하도록 설계하십시오. 최악의 버그는 간헐적이거나 무작위 적이거나 작은 버그입니다. 탐지되지 않고 추적하기 어려울 수 있기 때문입니다.


2
NaN10303

NaN은 숫자가 아니며 NA는 최소 R에서 사용할 수 없습니다.
llrs

1
이론적으로 IEEE float은 다양한 종류의 누락 / 무효 데이터에 대한 태그로 잘 작동하는 다양한 종류의 NaN을 지원합니다. 실제로 대부분의 프로그래밍 언어는 그러한 NaN을 구별 할 수있는 적절한 지원이 없으며 추가 정보를 잃어 버리기 쉽습니다.
코드 InChaos

부호 비트를 제외하고는 데이터베이스에서 실제로 사용되는 구성표의 공간을 차지하지 않는 것이 좋습니다. 00-99의 숫자 쌍으로 분리하여 숫자로 취급합니다. 그러나 숫자가 음수이면 숫자 대신 255-#을 저장합니다. +/- inf에도 127 및 128이 사용되었습니다.
Joshua

@Joshua 일부 데이터베이스에는 맞지만 개발 초기에 다른 데이터베이스에는 해당되지 않았습니다. 십진수로 인코딩 된 값을 사용하는 데이터베이스는 제안한 메커니즘을 사용할 수 없었습니다. 필자가 설명한 방식으로 작동하는 초기에 널리 사용되는 PC 데이터베이스의 예는 dBase이며, 결국 dBase III, Clipper 및 FoxPro 제품으로 제공됩니다 (Microsoft에서 인수 한 후 나중에는 Access에 유리함). 고정 필드 너비 데이터 교환 형식의 경우 빼기 부호는 항상 문자를 차지합니다.
whuber

13

결 측값을 인코딩 하기 위해 무엇이든 사용할 수 있습니다 . R과 같은 일부 소프트웨어는 누락 된 데이터를 인코딩하기 위해 특수 값을 사용하지만 누락 된 데이터에 대한 특수 코드가없는 SPSS와 같은 소프트웨어 패키지도 있습니다. 두 번째 경우에는 해당 값 을 임의로 선택 해야 합니다. 무엇이든 선택할 있지만 일반적으로 데이터와 눈에 띄게 다른 값을 선택하는 것이 좋습니다 (예 : 데이터는 0 ~ 100 범위의 백분율이므로 누락 된 데이터를 인코딩하려면 999를 선택하거나 데이터는 사람의 나이이며 누락 된 관측 값에는 음수 값을 사용합니다). 그 뒤에 아이디어는 그렇게하면 뭔가 잘못되고 숫자가 합산되지 않는 경우 알 수 있다는 것입니다.

그러나 이러한 인코딩의 문제점은 실제로 특수 인코딩을 인식하지 못하고 쓰레기 결과를 초래한다는 것입니다.


2

데이터 세트에 계산 된 변수가 있습니까? 아니면 병합 / 정렬 된 데이터 형식으로 제공되는 분석 데이터 집합입니까? 일부 소프트웨어는 매우 큰 음수 값을 사용하여 누락 된 데이터를 나타냅니다. 그러나 다른 소프트웨어는 NA 또는로 결 측값을 만듭니다 .. 이들이 불일치 할 경우 일반적으로 일부 사후 처리로 인해 불일치가 발생했습니다.


2

물론, SPSS에서 결 측값 999 또는 IS는 특수 결측 코드로 태그되어 다른 값과 별도로 처리됩니다. 별도로 표로 작성하거나 완전히 배제 할 수 있습니다. 0 나누기 또는 log (0)과 같은 결과로 구별됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.