Логістична регресія: згруповані та негруповані змінні (з використанням R)


9

Я читаю A. Agresti (2007), Вступ до категоричного аналізу даних , 2-е. видання, і я не впевнений, чи правильно я розумію цей параграф (с.106, 4.2.1) (хоча це має бути легко):

У таблиці 3.1 про хропіння та захворювання серця в попередній главі 254 суб'єкти повідомляли про хропіння щовечора, з них 30 мали захворювання серця. Якщо файл даних згрупував двійкові дані, рядок у файлі даних повідомляє про ці дані як про 30 випадків захворювання серця із розміром вибірки 254. Якщо файл даних має негруповані бінарні дані, кожен рядок у файлі даних посилається на окремий предмет, тому 30 рядків містять 1 для захворювання серця, а 224 рядків - 0 для захворювання серця. Оцінки ML та значення SE однакові для будь-якого типу файлів даних.

Трансформація набору негрупованих даних (1 залежна, 1 незалежна) знадобиться більше, ніж "рядок", щоб включити всю інформацію !?

У наступному прикладі створюється (нереально!) Простий набір даних і будується модель логістичної регресії.

Як насправді виглядатимуть згруповані дані (вкладка змінної?)? Як можна побудувати ту саму модель, використовуючи згруповані дані?

> dat = data.frame(y=c(0,1,0,1,0), x=c(1,1,0,0,0))
> dat
  y x
1 0 1
2 1 1
3 0 0
4 1 0
5 0 0
> tab=table(dat)
> tab
   x
y   0 1
  0 2 1
  1 1 1
> mod1=glm(y~x, data=dat, family=binomial())

Відповіді:


11

Таблиця 3.1 представлена ​​нижче:

введіть тут опис зображення

Агресті вважав такі числові показники рівня хропіння: {0,2,4,5}.

Є два способи підключення ГЛМ до R: або ваш результат надається у вигляді вектора 0/1, або коефіцієнт з двома рівнями, з прогнозами на резус вашої формули; або ви можете дати матрицю з двома стовпцями рахунків за успіх / невдачу як lhs формули. Останнє відповідає тому, що Agresti називає "групованими" даними. Третім методом, який також застосовується до згрупованих параметрів, було б використовувати weights=аргумент, щоб вказати, скільки позитивних та негативних результатів спостерігалось для кожної категорії класифікаційної таблиці.

Дані в матричному поданні будуть читати:

snoring <- matrix(c(24,35,21,30,1355,603,192,224), nc=2)

З цього ми можемо генерувати data.frameдовгий формат (2484 рядки = sum(snoring)спостереження) наступним чином:

snoring.df <- data.frame(snoring=gl(4, 1, labels=c("Never", "Occasional",
                                                   "Nearly every night", 
                                                   "Every night")),
                         disease=gl(2, 4, labels=c("Yes", "No")),
                         counts=as.vector(snoring))
snoring.df <- snoring.df[rep(seq_len(nrow(snoring.df)), snoring.df$counts), 1:2]

А наступні дві моделі дадуть однакові результати:

levels(snoring.df$snoring) <- c(0, 2, 4, 5)
y <- abs(as.numeric(snoring.df$disease)-2)
x <- as.numeric(as.character(snoring.df$snoring))
fit.glm1 <- glm(y ~ x, family=binomial)

fit.glm2 <- glm(snoring ~ c(0, 2, 4, 5), family=binomial)

Тобто , використовуючи позначення .logit[π^(x)]=3.87+0.40x

Друга нотація часто використовується на зведеній таблиці з інструкцією типу cbind(a, b), де aі bє стовпчиками підрахунків для двійкової події (див., Наприклад, Узагальнені лінійні моделі ). Схоже, це також буде працювати при використанні таблиці замість матриці (як у вашому прикладі), наприклад

glm(as.table(snoring) ~ c(0, 2, 4, 5), family=binomial)

Дуже дякую! Ідеальна відповідь! У мене є одне просте доповнення: замість as.table (хропіння) я б запропонував таблицю (x, y, dnn = c ('хропіння', 'хвороба')) як еквівалент мого прикладу, тому що перетворення негрупованої групи в згруповану дані також цікавили.
FloE

1
@FloE Ти маєш рацію. Вам все одно потрібно буде сконструювати спеціальні резус-програми . Наприклад, щось на кшталт tab <- table(x,y, dnn=c('snoring','disease')); glm(tab ~ as.numeric(rownames(tab)), family=binomial)буде працювати (мінус знаку мінус для коефіцієнтів, оскільки "Так" кодується 0 замість 1).
chl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.