R cinsinden binom glm cinsinden yanıt için giriş formatı


13

İçinde R, glmfonksiyonu kullanarak bir lojistik regresyon için giriş verilerini formatlamak için üç yöntem vardır :

  1. Veriler her gözlem için "ikili" bir formatta olabilir (örneğin her gözlem için y = 0 veya 1);
  2. Veriler, "Wilkinson-Rogers" formatında (örneğin y = cbind(success, failure)), her sıra bir tedaviyi temsil eder; veya
  3. Veriler her gözlem için ağırlıklı bir formatta olabilir (örneğin, y = 0,3, ağırlıklar = 10).

Her üç yaklaşım da aynı katsayı tahminlerini üretir, ancak serbestlik dereceleri ve sonuç olarak sapma değerleri ve AIC puanları bakımından farklılık gösterir. Son iki yöntemin daha az gözlemi (ve dolayısıyla serbestlik dereceleri) vardır, çünkü her tedaviyi gözlem sayısı için kullanırlar, ilki her gözlemi gözlem sayısı için kullanır.

Benim sorum: Bir girdi biçimini diğerine göre kullanmanın sayısal veya istatistiksel avantajları var mı? Gördüğüm tek avantaj R, kişinin modelle kullanmak için verilerini yeniden biçimlendirmek zorunda değil .

Glm belgelerine baktım , web'de ve bu sitede aradım ve teğetsel olarak ilişkili bir yazı buldum , ancak bu konuda hiçbir rehberlik etmedim .

İşte bu davranışı gösteren simüle edilmiş bir örnek:

# 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
Örneğinizde, null ve rezidüel sapma arasındaki fark her üç model için de eşittir. Bir parametre ekler veya kaldırırsanız, AIC'deki değişiklik de üçü için de aynıdır.
Jonny Lomond

1
Kendinize cevap verdiniz: Aynı verileri, aynı sonuçları kullanıyorsanız, bunlar nasıl farklı olabilir? Dahası, yöntem sadece verileri farklı formatta sağlaması nedeniyle farklı sonuçlar verirse, bir şey onunla veya uygulamasında çok yanlış olur.
Tim

WR formatı sonuçta ağırlıklı bir olasılıktır. Ağırlıklardaki sorun, R'nin frekans ağırlıkları mı, olasılık ağırlıkları mı yoksa başkaları mı olduğunu söyleyememesidir. Anket ağırlığı ile, örneğin, sadece n gözleminiz olabilir, ancak bunlar popülasyon / örnekleme çerçevesinin segmentlerini temsil eder. Bu nedenle, serbestlik derecesi gerçekten 100'dür svyglm. Anket paketinden, ağırlık argümanını ele almak için daha iyi yöntemler sunar.
AdamO

Ancak, üç kodlama yolunun hepsini kullanarak bir kuasibinomyal modele sığacak olursanız, farklı sonuçlar üreteceklerdir, çünkü bir tanesi binomiyal veri olarak kodlandığında pozitif bir aşırı dağılım gösterebilir, ancak lojistik / ikili veri olarak kodlandığında değil. Yoksa bu konuda yanlış mıyım?
Tom Wenseleers

Yanıtlar:


9

Kavramsal netliğin yanı sıra, birini diğerine tercih etmek için istatistiksel bir neden yoktur. Bildirilen sapma değerleri farklı olmasına rağmen, bu farklılıklar tamamen doymuş modele bağlıdır. Dolayısıyla, doymuş model günlüğü olasılığı iptal edildiğinden, modeller arasında göreceli sapma kullanan herhangi bir karşılaştırma etkilenmez.

Açık sapma hesaplamasından geçmek yararlı olduğunu düşünüyorum.

iniipiiyijji

Uzun Form

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

ve doymuş modelin log olasılığı

ij(log(yij)yij+log(1yij)(1yij)).
Bu, 0'a eşittir, çünkü yij 0 veya 1'dir. Not log(0) tanımlanmamıştır, ancak kolaylık olması için lütfen 0log(0) kısayol olarak okuyunlimx0+xlog(x)

Kısa form (ağırlıklı)

Bir binom dağılımının aslında tamsayı olmayan değerleri alamayacağını unutmayın, ancak yine de her hücrede gözlemlenen başarıların bir kısmını yanıt olarak kullanarak ve her güncüğü log-olasılık hesaplamasında ağırlıklandırarak bir "log olasılığı" hesaplayabiliriz. o hücredeki gözlemlerin sayısı.

ini(log(pi)jyij/ni+log(1pi)(1j(yij/ni))

j

Bu arada doymuş sapma farklıdır. Artık 0-1 yanıtımız olmadığından, gözlem başına bir parametre ile bile tam olarak 0 elde edemeyiz. Bunun yerine doymuş model log olasılığı

Σbennben(günlük(Σjybenj/nben)Σjybenj/nben+günlük(1-Σjybenj/nben)(1-Σjybenj/nben)).

Örneğinizde, bu miktarın iki katının her iki model için bildirilen boş ve kalan sapma değerleri arasındaki fark olduğunu doğrulayabilirsiniz.

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

Bence doymuş modellerin sapma ifadesini netleştirmeniz gerekecek. 0 günlüğü çok iyi çalışmıyor.
AdamO

Teşekkürler, ne demek istediğimi açıklığa kavuşturmalıydım. 0log (0) ile bu bağlamda 0 demek istediğimi netleştirmek için bir düzenleme ekledim.
Jonny Lomond

Tamam ama uygun şekilde kafam karıştı (affet beni asla sapkınlığı hiç ayrıntılı olarak ele almadım): Eğer doymuş model sapması olarak log (y) y - log (1-y) (1-y) varsa, her gözlem sadece 0?
AdamO

2
"Doymuş model", gözlem başına bir parametreye sahip hayali bir modeldir. Dolayısıyla, her gözlem için öngörülen olasılığı, gerçek gözlemlenen değere bağlı olarak 1 veya 0'dır. Dolayısıyla bu durumda doymuş modelin log olasılığı gerçekten 0'dır, veriler doymuş model tarafından üretilebilecek tek veridir.
Jonny Lomond

Ancak, üç kodlama yolunun hepsini kullanarak bir kuasibinomyal modele sığacak olursanız, farklı sonuçlar üreteceklerdir, çünkü bir tanesi binomiyal veri olarak kodlandığında pozitif bir aşırı dağılım gösterebilir, ancak lojistik / ikili veri olarak kodlandığında değil. Yoksa bu konuda yanlış mıyım?
Tom Wenseleers
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.