Lojistik regresyon: gruplandırılmış ve gruplandırılmamış değişkenler (R kullanarak)


9

A. Agresti (2007), Kategorik Veri Analizine Giriş , 2. okuyorum . ve bu paragrafı (s.106, 4.2.1) doğru bir şekilde anladığımdan emin değilim (kolay olsa da):

Önceki bölümde horlama ve kalp hastalığı ile ilgili Tablo 3.1'de, her gece 30'u kalp hastalığı olan 254 kişi horlama bildirmiştir. Veri dosyası ikili verileri gruplandırdıysa, veri dosyasındaki bir satır, bu verileri 254 örnek boyutundan 30 kalp hastalığı vakası olarak raporlar. Veri dosyasında gruplanmamış ikili veriler varsa, veri dosyasındaki her satır bir Bu nedenle 30 satır, kalp hastalığı için bir 1 ve 224 satır, kalp hastalığı için 0 içerir. ML tahminleri ve SE değerleri her iki veri dosyası türü için aynıdır.

Bir grup çözülmemiş veriyi (1 bağımlı, 1 bağımsız) dönüştürmek, tüm bilgileri içermek için "bir satırdan" daha fazlasını gerektirir !?

Aşağıdaki örnekte (gerçekçi olmayan!) Basit bir veri kümesi oluşturulur ve lojistik regresyon modeli oluşturulur.

Gruplanmış veriler gerçekte nasıl görünürdü (değişken sekme?)? Aynı model gruplandırılmış veriler kullanılarak nasıl oluşturulabilir?

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

Yanıtlar:


11

Tablo 3.1 aşağıda gösterilmiştir:

resim açıklamasını buraya girin

Agresti, horlama seviyesi için aşağıdaki sayısal puanları dikkate aldı: {0,2,4,5}.

GLM'yi R'ye sığdırmanın iki yolu vardır: ya sonucunuz 0/1 vektörü ya da iki seviyeli bir faktör olarak, formülünüzün rh'lerindeki tahmincilerle sağlanır; ya da formülün lhs değeri olarak başarı / başarısızlık için iki sütun içeren bir matris verebilirsiniz. İkincisi, Agresti'nin 'gruplandırılmış' veri olarak adlandırdığı şeye karşılık gelir. Gruplandırılmış ayarlar için de geçerli olan üçüncü bir yöntem, sınıflandırma tablosunun her kategorisi için weights=kaç olumlu ve olumsuz sonucun gözlemlendiğini belirtmek için argümanı kullanmak olacaktır .

Matris görünümündeki veriler:

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

Bundan, aşağıdaki gibi data.frameuzun bir formatta (2484 satır = sum(snoring)gözlem) üretebiliriz :

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]

Ve aşağıdaki iki model aynı sonuçları verecektir:

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)

Yani, Agresti gösterimini kullanarak .lojit[π^(x)]=-3.87+0.40x

İkinci gösterim, bir ikili olay için sayım sütunları cbind(a, b), nerede ave nerede olduğu gibi bir talimatla toplu tabloda sıklıkla kullanılır b(bkz . Genelleştirilmiş Doğrusal Modeller ). Matris yerine tabloyu kullanırken de işe yarayacak gibi görünüyor (örneğin örnekte olduğu gibi), ör.

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

Çok teşekkür ederim! Mükemmel bir cevap! Basit bir ekim var: as.table (horlama) yerine, örneğimin eşdeğeri olarak tablo (x, y, dnn = c ('horlama', 'hastalık')) öneririm. veriler de ilgiliydi.
FloE

1
@FloE Haklısın. Yine de rhs ad hoc'nuzu oluşturmanız gerekir . Örneğin, benzer bir şey tab <- table(x,y, dnn=c('snoring','disease')); glm(tab ~ as.numeric(rownames(tab)), family=binomial)işe yarayacaktır ("Evet" 1 yerine 0 kodlandığı için katsayılar için eksi işareti tersine çevrilir).
chl
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.