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

긴 형태

∑i∑j(log⁡(pi)yij+log⁡(1−pi)(1−yij))

∑i∑j(log⁡(yij)yij+log⁡(1−yij)(1−yij)).
yijlog⁡(0)0log⁡(0)limx→0+xlog⁡(x)

짧은 형식 (가중치)

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

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

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

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

∑ini(log⁡(∑jyij/ni)∑jyij/ni+log⁡(1−∑jyij/ni)(1−∑jyij/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.