Regresi logistik: variabel yang dikelompokkan dan tidak dikelompokkan (menggunakan R)

9

Saya membaca A. Agresti (2007), Pengantar Analisis Data Kategorikal , 2. edisi, dan saya tidak yakin apakah saya memahami paragraf ini (hal.106, 4.2.1) dengan benar (walaupun seharusnya mudah):

Dalam Tabel 3.1 tentang mendengkur dan penyakit jantung pada bab sebelumnya, 254 subjek melaporkan mendengkur setiap malam, di antaranya 30 menderita penyakit jantung. Jika file data telah mengelompokkan data biner, satu baris dalam file data melaporkan data ini sebagai 30 kasus penyakit jantung dari ukuran sampel 254. Jika file data memiliki data biner yang tidak dikelompokkan, setiap baris dalam file data merujuk ke Pisahkan subjek, sehingga 30 baris mengandung 1 untuk penyakit jantung dan 224 baris berisi 0 untuk penyakit jantung. Estimasi ML dan nilai SE adalah sama untuk kedua jenis file data.

Mengubah satu set data yang tidak dikelompokkan (1 dependen, 1 independen) akan membutuhkan lebih dari "satu baris" untuk memasukkan semua informasi !?

Dalam contoh berikut, kumpulan data sederhana (tidak realistis!) Dibuat dan model regresi logistik dibuat.

Bagaimana sebenarnya data yang dikelompokkan akan terlihat (tab variabel?)? Bagaimana model yang sama dapat dibangun menggunakan data yang dikelompokkan?

> 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())
Gumpalan es yg terapung
sumber

Jawaban:

11

Tabel 3.1 direproduksi di bawah ini:

masukkan deskripsi gambar di sini

Agresti mempertimbangkan skor numerik berikut untuk level mendengkur: {0,2,4,5}.

Ada dua cara untuk menyesuaikan GLM dengan R: hasil Anda disediakan sebagai vektor 0/1 atau faktor dengan dua level, dengan prediktor pada rhs rumus Anda; atau Anda dapat memberikan matriks dengan dua kolom jumlah untuk keberhasilan / kegagalan sebagai lhs rumus. Yang terakhir sesuai dengan apa yang Agresti sebut data 'dikelompokkan'. Metode ketiga, yang juga berlaku untuk pengaturan yang dikelompokkan, akan menggunakan weights=argumen untuk menunjukkan berapa banyak hasil positif dan negatif yang diamati untuk setiap kategori tabel klasifikasi.

Data dalam tampilan matriks akan membaca:

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

Dari ini, kita dapat menghasilkan data.frameformat panjang (2484 baris = sum(snoring)pengamatan) sebagai berikut:

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]

Dan dua model berikut akan menghasilkan hasil yang identik:

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)

Yaitu, , menggunakan notasi Agresti.logit[π^(x)]=-3.87+0,40x

Notasi kedua sering digunakan pada tabel teragregasi dengan instruksi seperti cbind(a, b), di mana adan badalah kolom jumlah untuk peristiwa biner (lihat misalnya, Model Linear Umum ). Sepertinya itu juga akan berfungsi ketika menggunakan tabel, bukan matriks (seperti pada contoh Anda), misalnya

glm(as.table(snoring) ~ c(0, 2, 4, 5), family=binomial)
chl
sumber
Terima kasih banyak! Jawaban yang sempurna! Saya punya satu tambahan sederhana: Alih-alih as.table (mendengkur) saya akan menyarankan tabel (x, y, dnn = c ('mendengkur', 'penyakit')) sebagai setara dengan contoh saya, karena transformasi dari ungrouped untuk dikelompokkan data juga menarik.
FloE
1
@ Floe Anda benar. Anda masih perlu membuat rhs ad hoc . Misalnya, sesuatu seperti tab <- table(x,y, dnn=c('snoring','disease')); glm(tab ~ as.numeric(rownames(tab)), family=binomial)akan berfungsi (tanda minus pembalikan untuk koefisien karena "Ya" diberi kode 0, bukan 1).
chl