Not: önceki sorumun yasal nedenlerle silinmesi gerektiğinden, bu soru bir gönderidir.
Fonksiyonlu SAS PROC MIXED karşılaştırarak birlikte lme
gelen nlme
R 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 MIXED
ve lme
nedenini 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)
: ind
rastgele bir faktör olarak y ~ trt + (fac(ind))
: rastgele bir faktör
olarak fac
iç içeind
Sadece 1 değeri yok geçen model tekilli˘ge yol gerektiğini unutmayın y
her kombinasyonu için ind
ve 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 nlme
olmalı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, lme4
R'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