Nlmer () kullanarak tekrarlanan ölçüm verileri için doğrusal olmayan karışık efektler modeline nasıl uyabilirim?


12

Tekrarlanan ölçüm verilerini analiz etmeye çalışıyorum ve çalışmasını sağlamak için mücadele ediyorum R. Verilerim aslında aşağıdaki, iki tedavi grubum var. Her gruptaki her denek her gün test edilir ve bir puan verilir (bir testte doğru yüzde). Veriler uzun biçimde:

Time Percent Subject   Group
   1       0    GK11 Ethanol
   2       0    GK11 Ethanol
   3       0    GK11 Ethanol
   4       0    GK11 Ethanol
   5       0    GK11 Ethanol
   6       0    GK11 Ethanol

Veriler lojistik bir eğriye benziyor, denekler birkaç gün boyunca çok kötü yapıyorlar, ardından hızlı iyileşme ve ardından bir plato. Tedavinin test performans eğrisi üzerinde bir etkisi olup olmadığını bilmek istiyorum. Benim düşünce kullanmaktı nlmer()içinde lme4de paketin R. Aşağıdakileri kullanarak her grup için çizgiler sığdırabilirim:

print(nm1 <- nlmer(Percent ~ SSlogis(Time,Asym, xmid, scal) ~ Asym | Subject,
salinedata, start = c(Asym =.60,  xmid = 23, scal = 5)), corr = FALSE)

Tahmin edilen çizgilerin farklı parametreleri ve standart sapmaları için tahminlere bakarak grupları karşılaştırabilirim, ancak bunun doğru bir yol olduğundan emin değilim. Herhangi bir yardım büyük mutluluk duyacağız.

Yanıtlar:


4

Normal olabilirlik oranı testlerini kullanabilirsiniz. İşte basit bir örnek. İlk olarak, parametrelerinize göre 10 kişiden gözlem oluşturalım:

Asym = .6
xmid = 23
scal = 5

n = 10
time = seq(1,60,5)

d = data.frame(time=rep(time,10),
               Asym, xmid, scal, group=0)
d$subj = factor(rep(1:n, each=length(time)))

Şimdi yarısının farklı asimptotlara ve orta nokta parametrelerine sahip olmasına izin verin:

ind = (nrow(d)/2):nrow(d)
d$Asym[ind] = d$Asym[ind] + .1
d$xmid[ind] = d$xmid[ind] + 10
d$group[ind] = 1
d$group=factor(d$group)

Modele dayanarak tüm bireyler için yanıt değerlerini simüle edebiliriz:

set.seed(1)
d = transform(d, y = Asym/(1+exp((xmid-time)/scal)) +
                     rnorm(nrow(d), sd=.04))
library(lattice)
xyplot(y~time | group, group=subj,
       data=d, type=c("g","l"), col="black")

Verilerin spagetti grafikleri

İki grup arasındaki açık farkları, modellerin alabilmesi gereken farklılıkları görebiliriz. Şimdi önce grupları görmezden gelerek basit bir modele uymaya çalışalım :

> fm1 = nls(y ~ SSlogis(time, Asym, xmid, scal), data=d)
> coef(fm1)
      Asym       xmid       scal 
 0.6633042 28.5219166  5.8286082

Belki de beklendiği gibi, tahminler Asymve xmidiki grup için gerçek parametre değerleri arasındadır. (Bununla birlikte, durum yanlıştır, çünkü ölçek parametresi de değiştirildiğinden, model yanlış tanımlamasını ayarlamak için.) Şimdi iki grup için farklı parametrelerle tam bir model yerleştirelim:

> fm2 = nls(y ~ SSlogis(time, Asym[group], xmid[group], scal[group]),
          data=d,
          start=list(Asym=rep(.6,2), xmid=rep(23,2), scal=rep(5,2)))
> coef(fm2)
    Asym1     Asym2     xmid1     xmid2     scal1     scal2 
 0.602768  0.714199 22.769315 33.331976  4.629332  4.749555

İki model iç içe olduğundan, olasılık oranı testi yapabiliriz:

> anova(fm1, fm2)
Analysis of Variance Table

Model 1: y ~ SSlogis(time, Asym, xmid, scal)
Model 2: y ~ SSlogis(time, Asym[group], xmid[group], scal[group])
  Res.Df Res.Sum Sq Df  Sum Sq F value    Pr(>F)    
1    117    0.70968                                 
2    114    0.13934  3 0.57034  155.54 < 2.2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Son derece küçük p- değeri, basit modelin çok basit olduğunu açıkça göstermektedir; İki grup yok onların parametreleri farklıdır.

Bununla birlikte, iki ölçek parametresi tahmini, neredeyse .1'lik bir farkla neredeyse aynıdır. Belki de sadece bir ölçek parametresine ihtiyacımız var? (Elbette cevabın evet olduğunu biliyoruz, çünkü verileri simüle ettik.)

(İki asimptot parametresi arasındaki fark da sadece .1'dir, ancak standart hataları dikkate aldığımızda büyük bir fark vardır - bkz summary(fm2).)

Bu nedenle scale, iki grup için ortak bir parametreye, ancak daha önce olduğu gibi farklı Asymve xmidparametrelere sahip yeni bir model takıyoruz:

> fm3 = nls(y ~ SSlogis(time, Asym[group], xmid[group], scal),
          data=d,
          start=list(Asym=rep(.6,2), xmid=rep(23,2), scal=5))
> coef(fm3)
     Asym1      Asym2      xmid1      xmid2       scal 
 0.6035251  0.7129002 22.7821155 33.3080264  4.6928316

Ve indirgenmiş model tam modelde iç içe olduğundan, tekrar olabilirlik oranı testi yapabiliriz:

> anova(fm3, fm2)
Analysis of Variance Table

Model 1: y ~ SSlogis(time, Asym[group], xmid[group], scal)
Model 2: y ~ SSlogis(time, Asym[group], xmid[group], scal[group])
  Res.Df Res.Sum Sq Df     Sum Sq F value Pr(>F)
1    115    0.13945                             
2    114    0.13934  1 0.00010637   0.087 0.7685

Büyük p değeri, azaltılmış modelin beklendiği gibi tam modele uyduğunu gösterir.

Elbette, sadece Asym, sadece xmidveya her ikisi için farklı parametre değerlerine gerek olup olmadığını kontrol etmek için benzer testler yapabiliriz . Ben olacağını söyledi değil parametreleri ortadan kaldırmak için böyle aşamalı regresyon yapıyor öneriyoruz. Bunun yerine, tam modeli ( fm2) basit modele ( fm1) karşı test edin ve sonuçlardan memnun olun. Farklılıkları ölçmek için grafikler yararlı olacaktır.


bu harika bir cevap. Birkaç kişi iki kez ölçüldüyse ve birey içindeki korelasyonu kontrol etmek isteseydiniz bu analizi nasıl değiştirirdiniz? Eğer yardım edebilirsen, iki sentini takdir ediyorum! ( stats.stackexchange.com/questions/203040/… )
Nova

Bu yaklaşım nlmer()zaman içinde numuneler üzerinde tekrarlanan ölçümleri hesaba katmakla nasıl karşılaştırılır ? Sen strateji aynı tür yapmak ama için rastgele etkilerle 1 model sığabilir subjectve groupiçin rasgele efektleri ile başka modelde vs subjectsadece ve karşılaştırın.
Stefan Avey
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.