Формат ввода ответа в биномиальном glm в R


13

В России Rсуществует три метода форматирования входных данных для логистической регрессии с использованием glmфункции:

  1. Данные могут быть в «двоичном» формате для каждого наблюдения (например, y = 0 или 1 для каждого наблюдения);
  2. Данные могут быть в формате «Уилкинсон-Роджерс» (например, y = cbind(success, failure)), где каждая строка представляет одну обработку; или
  3. Данные могут быть во взвешенном формате для каждого наблюдения (например, у = 0,3, вес = 10).

Все три подхода дают одинаковые оценки коэффициентов, но различаются по степеням свободы и полученным значениям отклонения и баллам AIC. Последние два метода имеют меньше наблюдений (и, следовательно, степеней свободы), потому что они используют каждую обработку для количества наблюдений, тогда как первый использует каждое наблюдение для количества наблюдений.

Мой вопрос: есть ли числовые или статистические преимущества использования одного входного формата над другим? Единственное преимущество, которое я вижу, это отсутствие необходимости переформатировать свои данные Rдля использования с моделью.

Я просмотрел документацию по glm , выполнил поиск в Интернете и на этом сайте и обнаружил один пост , связанный с тангенциальной связью , но не дал никаких указаний по этой теме.

Вот смоделированный пример, который демонстрирует это поведение:

# 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 также будет одинаковым для всех трех.
Джонни Ломонд

1
Вы сами себе ответили: если использовать одни и те же данные с одинаковыми результатами, то как они могут отличаться? Более того, если бы метод давал разные результаты только из-за предоставления данных в другом формате, что-то было бы глубоко неправильно с ним или с его реализацией.
Тим

Формат WR в конечном итоге является взвешенной вероятностью. Проблема с весами в том, что R не может определить, являются ли они весами частот, весами вероятностей или другими. Например, при взвешивании опроса вы можете иметь только n наблюдений, но они представляют сегменты совокупности / выборки. Таким образом, степень свободы действительно равна 100. svyglmИз пакета опроса вы найдете лучшие методы обработки весовых аргументов.
AdamO

Но если бы вы подходили квазибиномиальной модели, используя все три способа кодирования, они дали бы разные результаты, верно, поскольку можно было бы иметь положительное избыточное рассредоточение при кодировании в виде биномиальных данных, но не при кодировании в качестве логистических / двоичных данных. Или я не прав?
Том Венселерс

Ответы:


9

Нет никакой статистической причины предпочитать одно другому, кроме концептуальной ясности. Хотя приведенные значения отклонений отличаются, эти различия полностью обусловлены насыщенной моделью. Таким образом, на любое сравнение, использующее относительное отклонение между моделями, это не влияет, поскольку насыщенная логарифмическая правдоподобие модели отменяется.

Я думаю, что полезно пройти через явный расчет отклонения.

Отклонение модели составляет 2 * (LL (насыщенная модель) - LL (модель)). Предположим, у вас есть разные ячейки, где - количество наблюдений в ячейке , - прогноз модели для всех наблюдений в ячейке , а - наблюдаемое значение (0 или 1) для наблюдения. в клетке .iniipiiyijji

Длинная форма

Логарифмическая вероятность (предложенной или нулевой) модели равна

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

а логарифмическая вероятность насыщенной модели равнаЭто равно 0, потому что равно 0 или 1. Примечание не определено, но для удобства, пожалуйста, прочитайте как сокращение для , который равен 0.

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)).

В вашем примере вы можете убедиться, что вдвое эта сумма равна разнице между сообщенными значениями нулевого и остаточного отклонения для обеих моделей.

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 в этом контексте.
Джонни Ломонд

Хорошо, но я правильно запутался (извините, я никогда не освещал отклонения в деталях): если у вас есть log (y) y - log (1-y) (1-y) в качестве насыщенного отклонения модели, не каждый наблюдение просто 0?
AdamO

2
«Насыщенная модель» представляет собой воображаемую модель с одним параметром на наблюдение. Таким образом, его прогнозируемая вероятность для каждого наблюдения составляет 1 или 0, в зависимости от фактического наблюдаемого значения. Таким образом, в этом случае логарифмическая вероятность насыщенной модели действительно равна 0, данные являются единственными данными, которые могут быть получены насыщенной моделью.
Джонни Ломонд

Но если бы вы подходили квазибиномиальной модели, используя все три способа кодирования, они дали бы разные результаты, верно, поскольку можно было бы иметь положительное избыточное рассредоточение при кодировании в виде биномиальных данных, но не при кодировании в качестве логистических / двоичных данных. Или я не прав?
Том Венселерс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.