R - serbestlik derecesinde PROC Mixed ve lme / lmer arasındaki farklar


12

Not: önceki sorumun yasal nedenlerle silinmesi gerektiğinden, bu soru bir gönderidir.


Fonksiyonlu SAS PROC MIXED karşılaştırarak birlikte lmegelen nlmeR paketin, bazı çok kafa farklılıklar tökezledi. Daha spesifik olarak, farklı testlerdeki özgürlük dereceleri ve arasında farklılık gösterir PROC MIXEDve lmenedenini merak ettim.

Aşağıdaki veri kümesinden başlayın (R kodu aşağıda verilmiştir):

  • ind: ölçümün yapıldığı kişiyi gösteren faktör
  • fac: ölçümün yapıldığı organ
  • trt: tedaviyi gösteren faktör
  • y: bazı sürekli tepki değişkenleri

Fikir aşağıdaki basit modelleri oluşturmaktır:

y ~ trt + (ind): indrastgele bir faktör olarak y ~ trt + (fac(ind)): rastgele bir faktör olarak faciç içeind

Sadece 1 değeri yok geçen model tekilli˘ge yol gerektiğini unutmayın yher kombinasyonu için indve fac.

İlk Model

SAS'ta aşağıdaki modeli oluşturuyorum:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind /s;
run;

Öğreticilere göre, R'deki aynı model şöyle nlmeolmalıdır:

> require(nlme)
> options(contrasts=c(factor="contr.SAS",ordered="contr.poly"))
> m2<-lme(y~trt,random=~1|ind,data=Data)

Her iki model de katsayılar ve SE'leri için aynı tahminleri verir, ancak etkisi için bir F testi gerçekleştirirken trt, farklı miktarda serbestlik derecesi kullanırlar:

SAS : 
Type 3 Tests of Fixed Effects 
Effect Num DF Den DF     F  Value Pr > F 
trt         1      8  0.89        0.3724 

R : 
> anova(m2)
            numDF denDF  F-value p-value
(Intercept)     1     8 70.96836  <.0001
trt             1     6  0.89272  0.3812

Soru1: Her iki test arasındaki fark nedir? Her ikisi de REML kullanılarak takılır ve aynı kontrastları kullanır.

NOT: DDFM = seçeneği için farklı değerler denedim (teorik olarak lme ile aynı sonuçları vermesi gereken BETWITHIN dahil)

İkinci Model

SAS'ta:

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM fac(ind) /s;
run;

R'deki eşdeğer model şöyle olmalıdır:

> m4<-lme(y~trt,random=~1|ind/fac,data=Data)

Bu durumda, bazı garip farklılıklar vardır:

  • R, şikayet etmeden uyurken SAS, nihai kendirin kesin olarak kesin olmadığını belirtiyor (bu beni biraz şaşırtmıyor, yukarıya bakın)
  • Katsayılardaki SE farklıdır (SAS'ta daha küçüktür)
  • Yine, F testi farklı miktarda DF kullandı (aslında, SAS'ta bu miktar = 0)

SAS çıkışı:

Effect     trt Estimate Std Error  DF t Value Pr > |t| 
Intercept        0.8863    0.1192  14    7.43 <.0001 
trt       Cont  -0.1788    0.1686   0   -1.06 . 

R Çıkışı:

> summary(m4)
...
Fixed effects: y ~ trt 
               Value Std.Error DF   t-value p-value
(Intercept)  0.88625 0.1337743  8  6.624963  0.0002
trtCont     -0.17875 0.1891855  6 -0.944840  0.3812
...

(Bu durumda, F ve T testinin eşdeğer olduğunu ve aynı DF'yi kullandığını unutmayın.)

İlginçtir, lme4R'de kullanıldığında model bile uymuyor:

> require(lme4)
> m4r <- lmer(y~trt+(1|ind/fac),data=Data)
Error in function (fr, FL, start, REML, verbose)  : 
  Number of levels of a grouping factor for the random effects
must be less than the number of observations

Soru 2 : İç içe faktörlü bu modeller arasındaki fark nedir? Doğru bir şekilde belirtilmiş mi ve eğer öyleyse, sonuçlar nasıl bu kadar farklı?


R'deki Simüle Edilmiş Veriler:

Data <- structure(list(y = c(1.05, 0.86, 1.02, 1.14, 0.68, 1.05, 0.22, 
1.07, 0.46, 0.65, 0.41, 0.82, 0.6, 0.49, 0.68, 1.55), ind = structure(c(1L, 
2L, 3L, 1L, 3L, 4L, 4L, 2L, 5L, 6L, 7L, 8L, 6L, 5L, 7L, 8L), .Label = c("1", 
"2", "3", "4", "5", "6", "7", "8"), class = "factor"), fac = structure(c(1L, 
1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("l", 
"r"), class = "factor"), trt = structure(c(2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Cont", 
"Treat"), class = "factor")), .Names = c("y", "ind", "fac", "trt"
), row.names = c(NA, -16L), class = "data.frame")

Simüle Edilmiş Veriler:

   y ind fac   trt
1.05   1   l Treat
0.86   2   l Treat
1.02   3   l Treat
1.14   1   r Treat
0.68   3   r Treat
1.05   4   l Treat
0.22   4   r Treat
1.07   2   r Treat
0.46   5   r  Cont
0.65   6   l  Cont
0.41   7   l  Cont
0.82   8   l  Cont
0.60   6   r  Cont
0.49   5   l  Cont
0.68   7   r  Cont
1.55   8   r  Cont

@Aaron: Lütfen yanıtınızı bu yayında bulun. Bunu kopyalayıp bir cevap olarak yapıştırabilirseniz, size bunun için destek vereceğim. Çok yardımcı oldu, bu yüzden gerçekten burada çapraz onaylanmış tutmak istiyorum. Bunu yaptıktan sonra cevabınızı sorudan siliyorum.
Joris Meys

Ekibin orijinal Q'nuzu canlandırmaya çalışıyorum, bu talihsiz revizyon iyice silindi - bu yüzden orijinal cevapları geri yükleme ve burada birleştirme şansı çok yüksek.

@mbq: (Burada kullandığım) bazı verileri simüle etsem ve Aaron'un cevabını buna göre düzenlesem de bu iyi olurdu. Diğer cevap için, bu biraz daha karmaşık olacak, ama ben de deneyebilirim.
Joris Meys

Aaron'un cevabı inanılmaz derecede iyi. Umarım görürler. Ne yazık ki, @Aaron bu konuya katılmadıkça onunla temasa geçmeyecek.
Wayne

1
Evet bu güzel bir cevaptı. Burada silinen gönderiye bir bağlantı verdim: stats.stackexchange.com/questions/26556/… Bağlantıyı bu gönderiye ekleyeceğim.
Stéphane Laurent

Yanıtlar:


11

İlk soru için, SAS'ta df'yi bulmak için varsayılan yöntem çok akıllı değildir; Rastgele efektte, sabit efekti sözdizimsel olarak içeren terimleri arar ve bunu kullanır. Bu durumda, trtiçinde indbulunmadığından, doğru olanı yapmaz. Hiç denemedim BETWITHINve detayları bilmiyorum, ama Satterthwaite seçeneği ( satterth) veya ind*trtrastgele etkisi olarak kullanarak doğru sonuçlar verir.

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s ddfm=satterth;
    RANDOM ind /s;
run;

PROC MIXED data=Data;
    CLASS ind fac trt;
    MODEL y = trt /s;
    RANDOM ind*trt /s;
run;

İkinci soruya gelince, SAS kodunuz R kodunuzla tam olarak eşleşmiyor; bu sadece bir terim olan fac*indR kodu her ikisi için bir terim sahipken, indve fac*ind. (Bunu görmek için Varyans Bileşenleri çıkışına bakın.) Bunu eklemek, trtQ1 ve Q2'deki (0.1892) tüm modellerde aynı SE'yi verir .

Belirttiğiniz gibi, bu fac*indterimin her seviye için bir gözlemi olduğu için uyması gereken garip bir modeldir , bu nedenle hata terimine eşdeğerdir. Bu, fac*indterimin sıfır varyansa sahip olduğu SAS çıktısında yansıtılır . Bu aynı zamanda lme4'ten gelen hata mesajının size söylediği şeydir; hatanın nedeni, hata terimini modele iki farklı şekilde dahil ettiğiniz için büyük olasılıkla bir şeyi yanlış belirtmiş olmanızdır. İlginçtir, nlme modelinde ufak bir fark vardır; bir şekilde fac*indhata terimine ek olarak terim için bir varyans terimi bulur , ancak bu iki varyansın toplamının, hata terimini hem SAS hem de nlme'den fac*indterim olmadan eşitlediğini fark edeceksiniz . Bununla birlikte, SE trtile aynıdır (0,1892) halinde trtiç içeind, bu nedenle bu düşük sapma terimleri onu etkilemez.

Son olarak, bu modellerde serbestlik dereceleri hakkında genel bir not: Model uygun olduktan sonra hesaplanır ve bu nedenle farklı programlar veya bir programın seçenekleri arasındaki serbestlik derecelerindeki farklılıklar, modelin farklı şekilde uyduğu anlamına gelmez. Bunun için, hem sabit etki parametreleri hem de kovaryans parametreleri gibi parametrelerin tahminlerine bakılmalıdır.

Ayrıca, belirli bir serbestlik derecesi ile t ve F yaklaşımlarının kullanılması oldukça tartışmalıdır. Sadece df'ye yaklaşmanın birkaç yolu değil, bazıları bunu yapmanın zaten iyi bir fikir olmadığını düşünüyor. Birkaç öneri:

  1. Her şey dengelenirse, sonuçları hemfikir olması gerektiği gibi geleneksel en küçük kareler yöntemiyle karşılaştırın. Dengeye yakınsa, kullandığınızların doğru basketbol sahasında olduğundan emin olmak için bunları kendiniz hesaplayın (denge varsa).

  2. Büyük bir örneklem büyüklüğünüz varsa, dağılımlar normal ve ki-kare oranına yaklaştıkça, serbestlik dereceleri çok önemli değildir.

  3. Doug Bates'nin çıkarsama yöntemlerine göz atın. Eski yöntemi MCMC simülasyonuna dayanmaktadır; onun daha yeni yöntemi, olasılığın profilini oluşturmaya dayanmaktadır.


Gerçekten de iyi bir cevap, olasılığın profillenmesinin, MCMC simülasyonundan (hem sonlu boyut düzeltmesini hem de karesel olmayanı işleyen) farklı bir soruyu (varyans parametrelerinde uygun CI'ler) uygun CI'leri çözdüğünü düşünüyorum . Ben bootMer (parametrik bootstrap) mcmcsamp için confint (profil (...)) den eşdeğer daha yakın olduğunu düşünüyorum
Ben Bolker

@BenBolker: Elbette olabilir. Doug Bates geçen ay burada bir konuşma yaptı ve olasılığını ortaya çıkarma konusundaki fikirlerinden bahsetti. Bu şimdiye kadar bildiklerimle ilgili.
Aaron Stack Overflow'dan ayrıldı
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.