R에서 'NA'값이 glm에서 처리되는 방식


19

거의 천 개의 변수 (V1)와 약 2 억 개의 데이터 포인트가 포함 된 데이터 테이블 T1이 있습니다. 데이터가 드물고 대부분의 항목이 NA입니다. 각 데이터 포인트에는 다른 ID와 구별하기 위해 고유 한 ID 및 날짜 쌍이 있습니다.

별도의 변수 세트 (V2)를 포함하는 다른 테이블 T2가 있습니다. 이 테이블에는 T2의 항목을 고유하게 식별하는 ID 및 날짜 쌍이 있습니다.

T1의 데이터를 사용하여 T2의 변수 값을 예측할 수 있습니다.

이를 증명하기 위해 R에 'glm'모델을 적용하고 T1의 변수에 의존하는 T2의 변수를 실제로 찾을 수 있는지 확인했습니다.

T2의 각 변수에 대해 동일한 ID와 날짜 쌍을 가진 T1의 모든 데이터를 꺼내기 시작하여 일부 테스트 변수에 대해 ~ 50K 데이터 포인트가 훨씬 작아졌습니다.

glm을 적용 할 때 현재 겪고있는 문제는 다음과 같습니다.

  1. 경우에 따라 'fit not found'라는 오류와 'glm.fit : algorithm does not converge'경고가 표시됩니다. 왜 표시되는지 잘 모르겠습니다.

  2. NA는 어떻게 glm에서 취급됩니까? 'NA'와 관련된 모든 레코드를 먼저 제거한 다음 피팅을 수행합니까?

  3. 모든 NA를 먼저 제거한 다음 'glm'을 호출하는 것이 좋은 전략입니까? 이것이 대부분의 NA이므로 데이터 포인트를 크게 줄일 수 있다고 생각합니다.

  4. 계수를 계산하는 데 사용되는 방법 출력 계산 방법에 대해 설명하는 웹 사이트 나 종이 또는 책을 찾을 수 없습니다.

'NA'가 있거나없는 glm을 테스트했으며 데이터를 피팅하는 동안 NA가 고려되는 다른 대답을 발견했습니다.

예 1 :

> tmpData
  x1 x2 x3        Y
1  1  1  1        3
2  1  0  4        5
3  1  2  3        6
4  0  3  1        4

Call:  glm(formula = as.formula(paste(dep, " ~ ", paste(xn, collapse = "+"))), 
    na.action = na.exclude)

Coefficients:
                      (Intercept)  as.numeric(unlist(tmpData["x1"]))  as.numeric(unlist(tmpData["x2"]))  
                        5.551e-16                          1.000e+00                          1.000e+00  
as.numeric(unlist(tmpData["x3"]))  
                        1.000e+00  

Degrees of Freedom: 3 Total (i.e. Null);  0 Residual
Null Deviance:      5 
Residual Deviance: 9.861e-31    AIC: -260.6 

예 2 :

'x1'    'x2'    'x3'    'Y'
100000  1   NA  2
1   1   1   3
1   NA  -1124   2
1   0   4   5
1   2   3   6
0   3   1   4



Coefficients:
                      (Intercept)  as.numeric(unlist(tmpData["x1"]))  as.numeric(unlist(tmpData["x2"]))  as.numeric(unlist(tmpData["x3"]))  
                       -2.3749044                         -0.0000625                          0.6249899                          1.8749937  

Degrees of Freedom: 5 Total (i.e. Null);  2 Residual
Null Deviance:      13.33 
Residual Deviance: 1.875    AIC: 20.05 

답변:


27

NA 처리 : glm이 누락 된 데이터를 처리하는 방법을 제어 할 수 있습니다. glm ()에는 na.action데이터에서 NA를 처리하기 위해 glm이 사용해야하는 다음 일반 함수 중 하나를 나타내는 인수 가 있습니다.

  • na.omitna.exclude: 결 측값이 포함 된 관측치는 제거됩니다. na.exclude를 사용하면 일부 함수는 생략 된 경우에 NA를 삽입하여 잔차 및 예측을 올바른 길이로 채 웁니다.
  • na.pass: NA를 포함한 모든 데이터 유지
  • na.fail: 결 측값이없는 경우에만 객체를 반환합니다.

na.action을 설정하지 않으면 glm ()은 R의 전역 옵션을 확인하여 기본값이 설정되어 있는지 확인합니다. 당신은 당신의 옵션에 액세스 할 수 있습니다 getOption("na.action")또는 options("na.action")당신은 예를 들어, 그것을 설정할 수 있습니다 options(na.action = "na.omit") 그러나 예 1에서 제공하는 R 출력에서, 당신이 설정하고있는 것으로 보인다 na.action = na.omit. 예, 적어도 그 경우에는 피팅하기 전에 NA가있는 모든 사례 / 행을 제거하고 있습니다. 또한 na.action = na.pass데이터에 NA가 있으면 glm ()이 실패하게됩니다 (시도).

오류 : glm ()은 반복 가능성 프로 시저 (가중 가중치 최소 제곱; IWLS)를 사용하여 최대 가능성 추정을합니다. 미리 정의 된 횟수의 반복 만 수행하기 때문에 오류가 발생하는 경우가 많으며, 적합하지 않으면 포기합니다. 이 숫자는 maxit 인수에 의해 제어되며 기본값은 maxit = 25입니다. 물론 더 높게 설정해 볼 수도 있지만 시간이 더 오래 걸립니다. (설정 trace=TRUE하면 각 반복의 결과가 표시됩니다.)

기타 정보 : GLM에 대한 도움말 파일과 함께 액세스 ?glm또는 help(glm)이의 많은 부분을 설명합니다. 다른 두 가지 유용한 리소스는 다음과 같습니다.

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