Bagaimana cara saya mencocokkan model efek campuran nonlinear untuk data pengukuran berulang menggunakan nlmer ()?

12

Saya mencoba menganalisis data tindakan berulang dan berusaha untuk membuatnya bekerja R. Data saya pada dasarnya adalah sebagai berikut, saya memiliki dua kelompok perlakuan. Setiap subjek dalam setiap kelompok diuji setiap hari dan diberi skor (persentase benar pada suatu tes). Data dalam format panjang:

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

Data menyerupai kurva logistik, subjek melakukan sangat buruk selama beberapa hari diikuti oleh peningkatan cepat, diikuti oleh dataran tinggi. Saya ingin tahu apakah perawatan memiliki efek pada kurva kinerja tes. Pikiran saya adalah untuk menggunakan nlmer()dalam lme4paket di R. Saya dapat memasukkan baris untuk setiap grup menggunakan yang berikut:

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

Saya dapat membandingkan grup dengan melihat pada estimasi untuk parameter yang berbeda dan standar deviasi dari garis yang diestimasi tapi saya tidak yakin ini adalah cara yang tepat untuk melakukannya. Bantuan apa pun akan sangat dihargai.

Ian
sumber

Jawaban:

4

Anda dapat menggunakan tes rasio kemungkinan normal. Ini contoh sederhana. Pertama, mari kita buat pengamatan dari 10 orang berdasarkan parameter Anda:

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)))

Sekarang biarkan setengah dari mereka memiliki parameter asimtot dan titik tengah yang berbeda:

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)

Kami dapat mensimulasikan nilai respons untuk semua individu, berdasarkan model:

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")

Plot data spaghetti

Kita dapat melihat perbedaan yang jelas antara kedua kelompok, perbedaan yang harus diambil oleh model. Sekarang mari kita coba menyesuaikan model yang sederhana , dengan mengabaikan kelompok:

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

Mungkin seperti yang diharapkan, estimasi untuk Asymdan xmidberada di antara nilai parameter nyata untuk kedua grup. (Bahwa ini akan menjadi kasus tidak jelas, karena parameter skala juga berubah, untuk menyesuaikan spesifikasi kesalahan model.) Sekarang mari kita muat model lengkap , dengan parameter yang berbeda untuk dua kelompok:

> 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

Karena kedua model bersarang, kita dapat melakukan uji rasio kemungkinan:

> 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

Nilai p yang sangat kecil jelas menunjukkan bahwa model yang sederhana terlalu sederhana; kedua kelompok itu berbeda dalam parameternya.

Namun, estimasi dua parameter skala hampir identik, dengan perbedaan hanya 0,1. Mungkin kita hanya perlu satu parameter skala? (Tentu saja kita tahu jawabannya adalah ya, karena kita memiliki data yang disimulasikan.)

(Perbedaan antara dua parameter asimtot juga hanya 0,1, tapi itu perbedaan besar ketika kita memperhitungkan kesalahan standar - lihat summary(fm2).)

Jadi kami cocok dengan model baru, dengan scaleparameter umum untuk dua kelompok, tetapi berbeda Asymdan xmidparameter, seperti sebelumnya:

> 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

Dan karena model tereduksi bersarang dalam model penuh, kita dapat kembali melakukan uji rasio kemungkinan:

> 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

Nilai p yang besar menunjukkan bahwa model yang diperkecil cocok dengan model lengkap, seperti yang diharapkan.

Kita tentu saja dapat melakukan tes serupa untuk memeriksa apakah nilai parameter yang berbeda diperlukan untuk adil Asym, adil xmidatau keduanya. Yang mengatakan, saya tidak akan merekomendasikan melakukan regresi bertahap seperti ini untuk menghilangkan parameter. Sebaliknya, cukup uji model lengkap ( fm2) terhadap model sederhana ( fm1), dan senang dengan hasilnya. Untuk menghitung perbedaan, plot akan sangat membantu.

Karl Ove Hufthammer
sumber
itu jawaban yang bagus. Bagaimana Anda mengubah analisis ini jika beberapa individu diukur dua kali, dan Anda ingin mengendalikan korelasi dalam diri individu? Jika Anda dapat membantu, saya akan menghargai dua sen Anda! ( stats.stackexchange.com/questions/203040/... )
Nova
Bagaimana pendekatan ini dibandingkan dengan menggunakan nlmer()untuk memperhitungkan tindakan berulang pada sampel dari waktu ke waktu? Anda bisa melakukan jenis strategi yang sama tetapi cocok dengan 1 model dengan efek acak untuk subjectdan groupvs model lain dengan efek acak subjecthanya untuk dan membandingkan.
Stefan Avey