R에서 이항 glm의 반응에 대한 입력 형식


13

에서 R의 사용을위한 회귀 입력 데이터를 포맷하기위한 세 가지 방법이있다 glm기능 :

  1. 데이터는 각 관측치에 대해 "이진"형식 일 수 있습니다 (예 : 각 관측치에 대해 y = 0 또는 1).
  2. 데이터는 "Wilkinson-Rogers"형식 일 수 있으며 (예를 들어, y = cbind(success, failure)각 행은 하나의 처리를 나타냄); 또는
  3. 데이터는 각 관측치에 대한 가중치 형식 (예 : y = 0.3, 가중치 = 10) 일 수 있습니다.

세 가지 접근법 모두 동일한 계수 추정치를 생성하지만 자유 도와 결과 편차 값 및 AIC 점수는 다릅니다. 마지막 두 방법은 관측치 수에 대해 각 처리를 사용하는 반면 첫 번째 방법은 관측치 수에 대해 각 관측치를 사용하기 때문에 관측치가 적으므로 자유도가 낮아집니다.

내 질문 : 하나의 입력 형식을 다른 형식보다 사용하면 수치 적 또는 통계적 이점이 있습니까? 내가 볼 수있는 유일한 장점 R은 모델과 함께 사용하기 위해 데이터를 다시 포맷 할 필요가 없다는 것 입니다.

나는 glm documentation 을 보았고 웹과이 사이트를 검색하여 접선 적으로 관련된 게시물을 찾았 지만이 주제에 대한 지침은 없습니다.

다음은이 동작을 보여주는 시뮬레이션 된 예입니다.

# Write function to help simulate data
drc4 <- function(x, b =1.0, c = 0, d = 1, e = 0){
    (d - c)/ (1 + exp(-b * (log(x)  - log(e))))
}
# simulate long form of dataset
nReps = 20
dfLong <- data.frame(dose = rep(seq(0, 10, by = 2), each = nReps))
dfLong$mortality <-rbinom(n = dim(dfLong)[1], size = 1,
                              prob = drc4(dfLong$dose, b = 2, e = 5))

# aggregate to create short form of dataset
dfShort <- aggregate(dfLong$mortality, by = list(dfLong$dose), 
                     FUN = sum)
colnames(dfShort) <- c("dose", "mortality")
dfShort$survival <- nReps - dfShort$mortality 
dfShort$nReps <- nReps
dfShort$mortalityP <- dfShort$mortality / dfShort$nReps

fitShort <- glm( cbind(mortality, survival) ~ dose, 
                 data = dfShort, 
                 family = "binomial")
summary(fitShort)

fitShortP <- glm( mortalityP ~ dose, data = dfShort, 
                  weights = nReps,     
                  family = "binomial")
summary(fitShortP)

fitLong <- glm( mortality ~ dose, data = dfLong, 
                family = "binomial")
summary(fitLong)

1
귀하의 예에서, 널과 잔차 이탈의 차이는 세 모델 모두에서 동일합니다. 매개 변수를 추가하거나 제거하면 AIC의 변경 사항도 세 가지 모두 동일합니다.
Jonny Lomond

1
당신은 자신에게 대답했습니다 : 동일한 데이터를 사용하여 동일한 결과를 얻으면 어떻게 다를 수 있습니까? 더욱이, 데이터가 다른 형식으로 제공되기 때문에 메소드가 다른 결과 만 제공한다면, 무언가 또는 구현에 중대한 문제가있을 수 있습니다.

WR 형식은 궁극적으로 가중 가능성입니다. 가중치의 문제는 R이 빈도 가중치, 확률 가중치 또는 기타인지를 알 수 없다는 것입니다. 예를 들어, 측량 가중치를 사용하면 n 개의 관측치 만있을 수 있지만 이는 모집단 / 샘플링 프레임의 세그먼트를 나타냅니다. 따라서 자유도는 실제로 100 svyglm입니다. 설문 패키지에서 가중치 인수를 처리하는 더 나은 방법을 제공합니다.
AdamO

그러나 세 가지 코딩 방법을 모두 사용하여 유사 이항 모델에 적합하면 다른 결과를 생성 할 수 있습니다. 이항 데이터로 코딩 할 때는 긍정적 인 과분 산이있을 수 있지만 로지스틱 / 이진 데이터로 코딩 할 때는 그렇지 않습니다. 아니면 내가 잘못 했습니까?
Tom Wenseleers

답변:


9

개념적 명확성 외에 서로 선호하는 통계적 이유는 없습니다. 보고 된 이탈도 값은 다르지만 이러한 차이는 완전히 포화 된 모델 때문입니다. 따라서 포화 모형 로그 우도가 취소되므로 모형 간의 상대 편차를 사용한 비교는 영향을받지 않습니다.

명시 적 이탈도 계산을 수행하는 것이 유용하다고 생각합니다.

iniipiiyijji

긴 형태

ij(log(pi)yij+log(1pi)(1yij))

ij(log(yij)yij+log(1yij)(1yij)).
yijlog(0)0log(0)limx0+xlog(x)

짧은 형식 (가중치)

이항 분포는 실제로 정수가 아닌 값을 취할 수 없지만 그럼에도 불구하고 각 셀에서 관찰 된 성공 비율을 응답으로 사용하고 로그 우도 계산에서 각 합산에 가중치를 부여하여 "로그 우도"를 계산할 수 있습니다. 해당 셀의 관측치 수

ini(log(pi)jyij/ni+log(1pi)(1j(yij/ni))

이것은 위에서 계산 한 모델 이탈과 정확히 동일하며, 가능한 한 긴 형식 방정식에서 에 대한 합을 당기면 알 수 있습니다.j

한편 포화 편차는 다릅니다. 우리는 더 이상 0-1 응답을 갖지 않으므로 관측 당 하나의 매개 변수를 사용하더라도 정확히 0을 얻을 수 없습니다. 대신 포화 모델 로그 우도는

ini(log(jyij/ni)jyij/ni+log(1jyij/ni)(1jyij/ni)).

귀하의 예에서,이 양의 두 배가 두 모델 모두에 대해보고 된 널 (null) 및 잔차 편차 값의 차이인지 확인할 수 있습니다.

ni = dfShort$nReps
yavg = dfShort$mortalityP
sum.terms <-ni*(log(yavg)*yavg + log(1 - yavg)*(1 - yavg))
# Need to handle NaN when yavg is exactly 0
sum.terms[1] <- log(1 - yavg[1])*(1 - yavg[1])

2*sum(sum.terms)
fitShortP$deviance - fitLong$deviance

포화 모델의 이탈에 대한 표현을 명확히해야한다고 생각합니다. 로그 0이 제대로 작동하지 않습니다.
AdamO

고마워, 내가 무슨 뜻인지 분명히 했어야 했어. 0log (0)에 의해이 맥락에서 0을 의미한다는 것을 명확히하기 위해 편집을 추가했습니다.
Jonny Lomond

그래도 제대로 혼란스러워합니다 (용서에 대해 자세히 설명하지 않았습니다) : 포화 모델 편차로 log (y) y-log (1-y) (1-y)가있는 경우 모든 것이 아닙니다 관찰 만 0?
AdamO

2
"포화 모델"은 관측 당 하나의 매개 변수를 가진 상상 된 모델입니다. 따라서 모든 관측치에 대한 예측 확률은 실제 관측치에 따라 1 또는 0입니다. 따라서이 경우 포화 모형의 로그 우도는 실제로 0이며, 데이터는 포화 모형에 의해 생성 될 수있는 유일한 데이터입니다.
Jonny Lomond

그러나 세 가지 코딩 방법을 모두 사용하여 유사 이항 모델에 적합하면 다른 결과를 생성 할 수 있습니다. 이항 데이터로 코딩 할 때는 긍정적 인 과분 산이있을 수 있지만 로지스틱 / 이진 데이터로 코딩 할 때는 그렇지 않습니다. 아니면 내가 잘못 했습니까?
Tom Wenseleers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.