Poly () ve poly () ile karşılaştırıldığında neden çılgınca farklı sonuçlar alıyorum?


10

Bazı verilerimde (yaş + kohort = periyot) büyük oranda eş zamanlı olan iki farklı zaman değişkenini modellemek istiyorum. Bunu yaparken lmerve bazı etkileşimlerle karşılaştım poly(), ama muhtemelen bununla sınırlı değil lmer, nlmeIIRC ile aynı sonuçları aldım .

Açıkçası, poly () işlevinin ne yaptığına dair anlayışım eksik. Ne yaptığını anlıyorum poly(x,d,raw=T)ve raw=Tortogonal polinomlar yapmadan düşündüm (bunun ne anlama geldiğini gerçekten anladığımı söyleyemem), bu da uydurmayı kolaylaştırır, ancak katsayıları doğrudan yorumlamanıza izin vermez.
Ben okumak ben işlevini tahmin kullanarak olduğum için, tahminler aynı olmalıdır.

Ancak, modeller normal bir şekilde birleştiğinde bile değiller. Merkezlenmiş değişkenler kullanıyorum ve ilk önce belki dik polinomun kolinear etkileşim terimi ile daha yüksek sabit etki korelasyonuna yol açtığını düşündüm, ancak karşılaştırılabilir görünüyor. Buraya iki model özeti yapıştırdım .

Bu grafikler, umarım farkın boyutunu gösterir. Ben sadece geliştirmede mevcut olan tahmin fonksiyonunu kullandım. sürümü ( burada duydum ), ancak sabit efektler CRAN sürümünde aynıdır (ve kendileri de kapalı görünüyorlar, örneğin DV'm 0-4 aralığında olduğunda etkileşim için ~ 5).

Lmer çağrısı

cohort2_age =lmer(churchattendance ~ 
poly(cohort_c,2,raw=T) * age_c + 
ctd_c + dropoutalive + obs_c + (1+ age_c |PERSNR), data=long.kg)

Tahmin, yalnızca orijinal verilerdeki aralığı ekstrapolasyon = F olarak işaretlediğim sahte verilerde (diğer tüm öngörücüler = 0) sabit etkilerdi.

predict(cohort2_age,REform=NA,newdata=cohort.moderates.age)

Gerekirse daha fazla bağlam sağlayabilirim (kolayca tekrarlanabilir bir örnek üretmeyi başaramadım, ama elbette daha fazla deneyebilirim), ama bunun daha temel bir plea olduğunu düşünüyorum: poly()fonksiyonu bana açıklayın, lütfen.

Ham polinomlar

Ham polinomlar

Ortogonal polinomlar (kırpılmış en nonclipped Imgur )

Dik polinomlar

Yanıtlar:


10

Ben bu gerçeği nlme yaptığı, hangi işlevi (ve dolayısıyla benim hatam) tahmin bir hata olduğunu düşünüyorum değildir payı. ( Düzenle : en son R-forge sürümünde düzeltilmelidir lme4.) Örnek için aşağıya bakın ...

Ortogonal polinom anlayışınız muhtemelen iyi. Bir model sınıfı için bir tahmin yöntemi yazmaya çalışıyorsanız, onlar hakkında bilmeniz gereken zor şey , ortogonal polinomların temelinin belirli bir veri kümesine dayanarak tanımlanmasıdır, bu yüzden safça (yaptığım gibi! ) kullanarak model.matrixyeni bir veri kümesi için tasarım matrisi oluşturmaya çalışın, yeni bir temel elde edersiniz - bu artık eski parametrelerle anlam ifade etmez. Bunu düzeltene kadar predict, ortogonal polinom bazları (veya aynı özelliğe sahip spline tabanları) ile çalışmayan insanlara söyleyen bir tuzak koymam gerekebilir .

d <- expand.grid(x=seq(0,1,length=50),f=LETTERS[1:10])
set.seed(1001)
u.int <- rnorm(10,sd=0.5)
u.slope <- rnorm(10,sd=0.2)
u.quad <- rnorm(10,sd=0.1)
d <- transform(d,
               ypred = (1+u.int[f])+
               (2+u.slope[f])*x-
               (1+u.quad[f])*x^2)
d$y <- rnorm(nrow(d),mean=d$ypred,sd=0.2)
ggplot(d,aes(x=x,y=y,colour=f))+geom_line()+
    geom_line(aes(y=ypred),linetype=2)

library(lme4)
fm1 <- lmer(y~poly(x,2,raw=TRUE)+(1|f)+(0+x|f)+(0+I(x^2)|f),
            data=d)


fm2 <- lmer(y~poly(x,2)+(1|f)+(0+x|f)+(0+I(x^2)|f),
            data=d)
newdat <- data.frame(x=unique(d$x))
plot(predict(fm1,newdata=newdat,REform=NA))
lines(predict(fm2,newdata=newdat,REform=NA),col=2)
detach("package:lme4")

library(nlme)
fm3 <- lme(y~poly(x,2,raw=TRUE),
           random=list(~1|f,~0+x|f,~0+I(x^2)|f),
            data=d)
VarCorr(fm3)

fm4 <- lme(y~poly(x,2),
           random=list(~1|f,~0+x|f,~0+I(x^2)|f),
            data=d)

newdat <- data.frame(x=unique(d$x))
lines(predict(fm3,newdata=newdat,level=0),col=4)
lines(predict(fm4,newdata=newdat,level=0),col=5)

Teşekkür ederim, güven verici. Tekrarlamak için: Ortogonal polinom sabit etkileri yüz değerinde alamayacağınızı okudum, ancak bazen delice büyük görünüyorlar. Örneğin , iki kübik polinom ile etkileşime girersem, polinomlar ve bunların etkileşimleri için -22 ila -127400 aralığında sabit etkiler elde ederim. Bu, özellikle tüm sabit etkilerin negatif olduğu düşünüldüğünde bana çok uzak görünüyor. Gözden geçirilmiş bir tahmin fonksiyonu bu sabit etkilerden anlam çıkarır mı yoksa modeller yanlış bir şekilde birleşir mi yoksa sonuçta lmer'de bir sorun mu var?
Ruben

Yine, her şeyin yolunda olduğundan şüpheleniyorum (ama kesinlikle bilmiyorum). Orth. polinomlar sayısal kararlılık ve hipotez testleri için iyidir, ancak (tahmin ettiğiniz gibi) gerçek parametre değerlerini yorumlamak daha zor olabilir. Mevcut lme4-devel sürümü (Testleri geçmesi gereken bir sürüm yayınladım, r-forge üzerinde yeniden inşa etmek ~ 24 saat sürebilir, SVN'den kendiniz oluşturamazsanız) size ham / orto polinomları arasında eşleşen tahminler vermelidir. Alternatif Schielzeth 2010 Ekoloji ve Evrim Yöntemleri ile sürekli tahmin edicileri ortalamak ve ölçeklendirmektir ...
Ben Bolker

Evet, iki polinom şimdi çok iyi anlaşıyor. Çok teşekkürler! Tahmincilerimi ölçeklendirdim ve ortaladım, ancak bazı modeller ham polinomlara uymadı.
Ruben
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.