Формат введення для відповіді у двочленному glm в R


13

В R, існує три методи для форматування вхідних даних для логістичної регресії з використанням glmфункції:

  1. Дані можуть бути у "двійковому" форматі для кожного спостереження (наприклад, y = 0 або 1 для кожного спостереження);
  2. Дані можуть бути у форматі "Вілкінсон-Роджерс" (наприклад, y = cbind(success, failure)) у кожному рядку, що представляє одну обробку; або
  3. Дані можуть бути у зваженому форматі для кожного спостереження (наприклад, y = 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з пакету опитування даються кращі методи обробки аргументації ваги.
АдамО

Але якби ви підходили до квазібіноміальної моделі, використовуючи всі три способи кодування, вони давали б різні результати, правда, оскільки можна мати позитивну передисперсію при кодуванні як біноміальних даних, але не тоді, коли кодуються як логістичні / бінарні дані. Або я помиляюся на цьому?
Tom Wenseleers

Відповіді:


9

Немає статистичних причин віддавати перевагу одному перед іншим, окрім концептуальної ясності. Хоча звітні значення відхилень різні, ці відмінності повністю обумовлені насиченою моделлю. Таким чином, будь-яке порівняння з використанням відносного відхилення між моделями не впливає, оскільки насичена ймовірність журналу журналу скасовується.

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

iнiipiiуijji

Довга форма

ij(журнал(pi)уij+журнал(1-pi)(1-уij))

ij(журнал(уij)уij+журнал(1-уij)(1-уij)).
уijжурнал(0)0журнал(0)limх0+хжурнал(х)

Коротка форма (зважена)

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

iнi(журнал(pi)jуij/нi+журнал(1-pi)(1-j(уij/нi))

j

Тим часом насичене відхилення різне. Оскільки у нас більше немає відповідей 0-1, навіть за одним параметром на спостереження ми не можемо отримати рівно 0. Натомість насичена ймовірність використання журналу є

iнi(журнал(jуij/нi)jуij/нi+журнал(1-jуij/нi)(1-jуij/нi)).

У вашому прикладі ви можете переконатися, що вдвічі ця сума є різницею між повідомленими нульовими та залишковими значеннями відхилення для обох моделей.

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 працює не так добре.
АдамО

Дякую, я мав би уточнити, що я мав на увазі. Я додав редагування, щоб уточнити, що під 0log (0) я маю на увазі 0 у цьому контексті.
Джоні Ломон

Гаразд, але я правильно розгублений (вибачте, я ніколи не висвітлював відхилення в будь-яких великих деталях): якщо у вас є log (y) y - log (1-y) (1-y) як відхилення насиченої моделі, не кожен спостереження всього 0?
АдамО

2
"Насичена модель" - це уявлена ​​модель з одним параметром на спостереження. Тож його прогнозована ймовірність для кожного спостереження становить 1 або 0, залежно від фактичного спостережуваного значення. Отже, у цьому випадку вірогідність журналу насиченої моделі дійсно дорівнює 0, дані є єдиними даними, які можуть бути створені насиченою моделлю.
Джоні Ломон

Але якби ви підходили до квазібіноміальної моделі, використовуючи всі три способи кодування, вони давали б різні результати, правда, оскільки можна мати позитивну передисперсію при кодуванні як біноміальних даних, але не тоді, коли кодуються як логістичні / бінарні дані. Або я помиляюся на цьому?
Tom Wenseleers
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.