SAS PROC GLIMMIX neden bir binom glmm için glmer'den (lme4) çok farklı rastgele eğimler veriyor?


12

Ben, R'ye daha aşina bir kullanıcıyım ve dört habitat değişkeni için 5 yaşın üzerindeki yaklaşık 35 kişi için rastgele eğimler (seçim katsayıları) tahmin etmeye çalışıyorum. Yanıt değişkeni, bir konumun "kullanıldı" (1) veya "kullanılabilir" (0) habitat (aşağıda "kullanım") olup olmadığıdır.

Windows 64 bit bilgisayar kullanıyorum.

R sürüm 3.1.0, aşağıdaki veri ve ifade kullanın. PS, TH, RS ve HW sabit etkilerdir (standartlaştırılmış, habitat tiplerine ölçülen mesafe). lme4 V 1.1-7.

str(dat)
'data.frame':   359756 obs. of  7 variables:
 $ use     : num  1 1 1 1 1 1 1 1 1 1 ...
 $ Year    : Factor w/ 5 levels "1","2","3","4",..: 4 4 4 4 4 4 4 4 3 4 ...
 $ ID      : num  306 306 306 306 306 306 306 306 162 306 ...
 $ PS: num  -0.32 -0.317 -0.317 -0.318 -0.317 ...
 $ TH: num  -0.211 -0.211 -0.211 -0.213 -0.22 ...
 $ RS: num  -0.337 -0.337 -0.337 -0.337 -0.337 ...
 $ HW: num  -0.0258 -0.19 -0.19 -0.19 -0.4561 ...

glmer(use ~  PS + TH + RS + HW +
     (1 + PS + TH + RS + HW |ID/Year),
     family = binomial, data = dat, control=glmerControl(optimizer="bobyqa"))

glmer bana mantıklı gelen sabit etkiler için parametre tahminleri verir ve rasgele eğimler (her bir habitat tipine seçim katsayıları olarak yorumladığım) verileri niteliksel olarak araştırdığımda da anlamlıdır. Model için günlük olasılığı -3050.8'dir.

Bununla birlikte, hayvan ekolojisi araştırmalarının çoğu R'yi kullanmaz, çünkü hayvan konum verileriyle, uzamsal otokorelasyon standart hataları tip I hatasına eğilimli hale getirebilir. R model tabanlı standart hatalar kullanırken, ampirik (Huber-beyaz veya sandviç) standart hatalar tercih edilir.

R şu anda bu seçeneği sunmasa da (bildiklerime göre - LÜTFEN, yanılıyorsam beni düzelt), SAS, - SAS'a erişimim olmamasına rağmen, bir meslektaşım standart hataların olup olmadığını belirlemek için bilgisayarını ödünç almamı kabul etti ampirik yöntem kullanıldığında önemli ölçüde değişir.

İlk olarak, model tabanlı standart hatalar kullanırken SAS'ın, modelin her iki programda da aynı şekilde belirtildiğinden emin olmak için R'ye benzer tahminler üretmesini sağlamak istedik. Tam olarak aynı olup olmadıkları umrumda değil - sadece benzer. Denedim (SAS V 9.2):

proc glimmix data=dat method=laplace;
   class year id;
   model use =  PS TH RS HW / dist=bin solution ddfm=betwithin;
   random intercept PS TH RS HW / subject = year(id) solution type=UN;
run;title;

Ayrıca satır ekleme gibi çeşitli diğer formları da denedim

random intercept / subject = year(id) solution type=UN;
random intercept PS TH RS HW / subject = id solution type=UN;

Belirtmeden denedim

solution type = UN,

veya yorum yapma

ddfm=betwithin;

Modeli nasıl belirtirsek seçelim (ve birçok yol denedik), sabit etkiler yeterince benzer olsa da, SAS'taki rastgele eğimleri R'den bu çıktıya uzaktan benzetemiyorum. Farklı demek istediğimde, işaretlerin bile aynı olmadığı anlamına gelir. SAS'daki -2 Günlük Olasılığı 71344.94 idi.

Tam veri setimi yükleyemiyorum; bu yüzden sadece üç kişiden gelen kayıtları içeren bir oyuncak veri seti hazırladım. SAS bana birkaç dakika içinde çıktı veriyor; R'de bir saatten fazla sürer. Tuhaf. Bu oyuncak veri seti ile artık sabit etkiler için farklı tahminler alıyorum.

Benim sorum: Rastgele yamaç tahminlerinin R ve SAS arasında neden bu kadar farklı olabileceğine ışık tutabilir mi? Aramaları benzer sonuçlar üretecek şekilde kodumu değiştirmek için R veya SAS'ta yapabileceğim bir şey var mı? Ben R benim daha fazla tahmin "inanıyorum" çünkü SAS kodu değiştirmek istiyorum.

Bu farklılıklarla gerçekten ilgileniyorum ve bu sorunun en altına inmek istiyorum!

R ve SAS için tam veri kümesindeki 35 kişiden yalnızca üçünü kullanan bir oyuncak veri kümesinden çıktım jpeg olarak dahil edildi.

R çıkışı SAS çıkışı 1 SAS çıkışı 2 SAS çıkışı 3


DÜZENLEME VE GÜNCELLEME:

@JakeWestfall keşfetmeye yardımcı olduğu için SAS'taki eğimler sabit efektleri içermez. Sabit efektler eklediğimde, sonuçlar - programlar arasında bir sabit efekt "PS" için R eğimlerini SAS eğimleriyle karşılaştırmak: (Seçim katsayısı = rastgele eğim). SAS'taki artan varyasyona dikkat edin.

PS için R vs SAS


Bunun IDR'de bir faktör olmadığını fark ettim ; kontrol edin ve bunun bir şey değiştirip değiştirmediğine bakın.
Aaron Stack Overflow'dan ayrıldı

Her ikisi de log olabilirliği için Laplace Yaklaşımı'nı kullandığınızı görüyorum. İlgili günlük olabilirlik puanları nelerdir?
usεr11852

1
Bağımlı değişkeni aynı yönde modellediğinizi kontrol ettiniz mi?
Peter Flom - Monica'yı eski durumuna döndürün

1
Bu arada, Peter'ın ulaştığı şey, varsayılan olarak 0s ve 1s olarak etiketlenmiş binom verileriyle , R"1" yanıtı olasılığını modellerken SAS, "0" yanıtı olasılığını modelleyecektir. SAS modelini "1" olasılığı yapmak için yanıt değişkeninizi olarak yazmanız gerekir use(event='1'). Tabii ki, bunu yapmadan bile, rastgele etki varyanslarının aynı tahminlerinin yanı sıra işaretleri sabit olsa da aynı sabit etki tahminlerini beklememiz gerektiğine inanıyorum.
Jake Westfall

1
@EricaN Bana hatırlattığınız bir şey, R yerine rasgele efektleri ranef()işlevi yerine SAS'takilerle karşılaştırmanız gerektiğidir coef(). Birincisi gerçek rastgele efektleri verirken ikincisi rastgele efektler artı sabit etkiler vektörü verir. Bu, yayınınızda gösterilen sayıların neden farklı olduğunu açıklıyor, ancak hala tam olarak açıklayamadığım önemli bir tutarsızlık var.
Jake Westfall

Yanıtlar:


11

Zhang ve arkadaşlarına göre rastgele eğimlerin paketler arasında benzer olmasını beklememem gerektiği anlaşılıyor. Farklı İstatistiksel Paketler Kullanarak İkili Yanıtlar İçin Genelleştirilmiş Doğrusal Karışık Etki Modellerinin Takılması başlıklı makalesinde şunları açıklıyorlar:

Öz:

Genelleştirilmiş doğrusal karışık efektler modeli (GLMM), kesitsel veriler için modelleri boyuna bir ortama genişleten popüler bir paradigmadır. İkili yanıtların modellenmesine uygulandığında, farklı yazılım paketleri ve hatta bir paket içindeki farklı prosedürler oldukça farklı sonuçlar verebilir. Bu raporda, bu farklı prosedürlerin temelini oluşturan ve ilişkili ikili yanıtlara uyacak şekilde uygulandığında güçlü ve zayıf yanlarını tartışan istatistiksel yaklaşımları açıklıyoruz. Daha sonra bazı popüler yazılım paketlerinde uygulanan bu prosedürleri simüle edilmiş ve gerçek çalışma verilerine uygulayarak bu hususları açıklarız. Simülasyon sonuçlarımız, bu tür popüler yazılım paketlerini uygulamada uygulamak için önemli sonuçlar taşıyan, dikkate alınan prosedürlerin çoğu için güvenilirlik eksikliğini göstermektedir.

Umarım @BenBolker ve ekibi, R arayüzünü tercih ettiğim ve uygulayabilmeyi sevdiğim için, birkaç rastgele eğim terimine sahip modeller için ampirik standart hataları ve Gauss-Hermite Quadrature yeteneğini birleştirmek için R için bir oy olarak düşüneceğim. bu programdaki bazı analizler. Ne mutlu ki, R ve SAS rastgele eğimler için karşılaştırılabilir değerlere sahip olmasa da, genel eğilimler aynıdır. Katkılarınız için hepinize teşekkürler, bu konuya verdiğiniz zaman ve düşünceyi gerçekten takdir ediyorum!


üzgünüm: "standart standart hata" nedir? Şunu mu demek istediniz: standart varyans bileşenleri hataları? Yoksa sandviç standart hataları mı demek istediniz?
Ben Bolker

üzgünüm ... ampirik / sandviç SE demekti. Cevabımı düzenledim.
Nova

@BenBolker Bu hiç dahil edildi mi?
Lepidopterist

Hayır! Teknik olarak araştırma programımın bir parçası olmadığı için böyle gelişmeyi nasıl destekleyeceğimi anlamaya çalışıyorum ...
Ben Bolker

4

Bir cevap ve yorum / daha fazla sorunun bir karışımı:

'Oyuncak' veri setini üç farklı optimize edici seçeneğiyle donattım. (* Not 1: Gruplama değişkenlerinin alt örneklemesinden ziyade her yıl ve id içinden alt örnekleme ile küçük bir veri kümesi yapmak muhtemelen karşılaştırmalı amaçlar için daha yararlı olacaktır. özellikle bu kadar az sayıda gruplama değişkeni seviyesi ile iyi yapabilirsiniz.

library(plyr)
subdata <- ddply(fulldata,c("year","id"),
    function(x) x[sample(nrow(x),size=round(nrow(x)*0.1)),])

Toplu bağlantı kodu:

Ntoy <- readRDS("Newton_toy.RDS")
library(lme4)
fitfun <- function(opt) {
    tt <- system.time(fit1 <- glmer(use ~  ps + th + rs + hw +
                                    (1 + ps + th + rs + hw |id/year),
                                    family = binomial, data = Ntoy,
                                    control=glmerControl(optimizer=opt),
                                    verbose=100))
    return(list(time=tt,fit=fit1))
}

opts <- c("nloptwrap","nlminbwrap","bobyqa")
## use for() instead of lapply so we can checkpoint more easily
res <- setNames(vector("list",length(opts)),opts)
for (i in opts) {
    res[[i]] <- fitfun(i)
    save("res",file="Newton_batch.RData")
}

Sonra yeni bir oturumda sonuçları okudum:

load("Newton_batch.RData")
library(lme4)

Geçen zaman ve sapma:

cbind(time=unname(sapply(res,function(x) x$time["elapsed"])),
          dev=sapply(res,function(x) deviance(x$fit)))
##                time      dev
## nloptwrap  1001.824 6067.706
## nlminbwrap 3495.671 6068.730
## bobyqa     4945.332 6068.731

Bu sapmalar OP tarafından R'den (6101.7) bildirilen sapmanın oldukça altındadır ve OP tarafından SAS'tan (6078.9) rapor edilenlerin biraz altındadır, ancak paketler arasındaki sapmaları karşılaştırmak her zaman mantıklı değildir.

SAS'ın sadece yaklaşık 100 fonksiyon değerlendirmesinde birleşmesinden gerçekten şaşırdım!

Süreler , bir Macbook Pro'da OP deneyimiyle tutarlı olarak 17 dakika ( nloptwrap) ila 80 dakika ( bobyqa) arasındadır. Sapkınlık biraz daha iyidir nloptwrap.

round(cbind(sapply(res,function(x) fixef(x$fit))),3)
##             nloptwrap nlminbwrap bobyqa
## (Intercept)    -5.815     -5.322 -5.322
## ps             -0.989      0.171  0.171
## th             -0.033     -1.342 -1.341
## rs              1.361     -0.140 -0.139
## hw             -2.100     -2.082 -2.082

nloptwrapStandart hatalar oldukça büyük olmasına rağmen - cevaplar oldukça farklı görünüyor ...

round(coef(summary(res[[1]]$fit)),3)
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept)   -5.815      0.750  -7.750    0.000
## ps            -0.989      1.275  -0.776    0.438
## th            -0.033      2.482  -0.013    0.989
## rs             1.361      2.799   0.486    0.627
## hw            -2.100      0.490  -4.283    0.000

(kod burada izlemem year:idgerektiği hakkında bazı uyarılar verir )

Devam edecek ... ?


Size tam veri kümesini göndermem daha yararlı olur mu? Tek sorun yakınsama tam veri seti ile yaklaşık 9 saat sürer, bu nedenle örnekleme ile ilgili öneri iyi bir olmasıdır. Bir günlük dönüşümü ile verileri dönüştürmeye çalıştım, ancak binned artık arsa hala çirkin - kalan arsa bu verilerle sorunun bir kısmını açıklıyor mu? Son olarak, SAS'taki sonuçlarınız R'lere benziyor muydu?
Nova
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.