Beberapa perbandingan pada model efek campuran

31

Saya mencoba menganalisis beberapa data menggunakan model efek campuran. Data yang saya kumpulkan mewakili bobot beberapa hewan muda dari genotipe berbeda dari waktu ke waktu.

Saya menggunakan pendekatan yang diusulkan di sini: https://gribblelab.wordpress.com/2009/03/09/repeat-measures-anova-using-r/

Secara khusus saya menggunakan solusi # 2

Jadi saya punya sesuatu seperti

require(nlme)
model <- lme(weight ~ time * Genotype, random = ~1|Animal/time, 
         data=weights)    
av <- anova(model)

Sekarang, saya ingin memiliki beberapa perbandingan. Menggunakan multcompbisa saya lakukan:

require(multcomp)
comp.geno <- glht(model, linfct=mcp(Genotype="Tukey"))
print(summary(comp.geno))

Dan, tentu saja, saya bisa melakukan hal yang sama dengan waktu.

Saya punya dua pertanyaan:

  1. Bagaimana saya menggunakan mcpuntuk melihat interaksi antara Waktu dan Genotipe?
  2. Ketika saya menjalankan glhtsaya mendapatkan peringatan ini:

    covariate interactions found -- default contrast might be inappropriate

    Apa artinya? Bisakah saya mengabaikannya dengan aman? Atau apa yang harus saya lakukan untuk menghindarinya?

EDIT: Saya menemukan PDF ini yang mengatakan:

Karena tidak mungkin untuk menentukan parameter yang diminati secara otomatis dalam kasus ini, mcp () di multcomp secara default akan menghasilkan perbandingan untuk efek utama saja, mengabaikan kovariat dan interaksi . Sejak versi 1.1-2, seseorang dapat menentukan rata-rata lebih dari istilah interaksi dan kovariat menggunakan argumen interaksi_average = TRUE dan covariate_average = TRUE masing-masing, sedangkan versi yang lebih tua dari 1,0-0 secara otomatis dirata-rata atas istilah interaksi. Kami menyarankan kepada pengguna, bahwa mereka menulis, secara manual, set kontras yang mereka inginkan.Orang harus melakukan ini setiap kali ada keraguan tentang apa ukuran kontras default, yang biasanya terjadi pada model dengan istilah interaksi tingkat tinggi. Kami merujuk ke Hsu (1996), Bab ~ 7, dan Searle (1971), Bab ~ 7.3, untuk diskusi dan contoh lebih lanjut tentang masalah ini.

Saya tidak memiliki akses ke buku-buku itu, tetapi mungkin seseorang di sini memiliki?

nico
sumber
Silakan lihat di InvivoStat ( invivostat.co.uk ), itu harus melakukan jenis analisis yang Anda cari

Jawaban:

29

Jika timedan Genotypekeduanya merupakan prediktor kategori, dan Anda tertarik untuk membandingkan semua pasangan waktu / Genotipe satu sama lain, maka Anda dapat membuat satu variabel interaksi, dan menggunakan kontras Tukey di atasnya:

weights$TimeGeno <- interaction(weigths$Time, weights$Geno)
model <- lme(weight ~ TimeGeno, random = ~1|Animal/time, data=weights) 
comp.timegeno <- glht(model, linfct=mcp(TimeGeno="Tukey")) 

Jika Anda tertarik pada kontras lain, maka Anda dapat menggunakan fakta bahwa linfctargumen dapat mengambil matriks koefisien untuk kontras - dengan cara ini Anda dapat mengatur perbandingan yang Anda inginkan.

EDIT

Tampaknya ada beberapa kekhawatiran dalam komentar bahwa model yang dilengkapi dengan TimeGenoprediktor berbeda dari model asli yang dilengkapi dengan Time * Genotypeprediktor. Ini tidak terjadi , modelnya setara. Satu-satunya perbedaan adalah dalam parametrization dari efek tetap, yang diatur untuk membuatnya lebih mudah untuk menggunakan glhtfungsi tersebut.

Saya telah menggunakan salah satu dataset bawaan (memiliki Diet dan bukan Genotipe) untuk menunjukkan bahwa kedua pendekatan memiliki kemungkinan yang sama, nilai prediksi, dll:

> # extract a subset of a built-in dataset for the example
> data(BodyWeight)
> ex <- as.data.frame(subset(BodyWeight, Time %in% c(1, 22, 44)))
> ex$Time <- factor(ex$Time)
> 
> #create interaction variable
> ex$TimeDiet <- interaction(ex$Time, ex$Diet)
    > 
    > model1 <- lme(weight ~ Time * Diet, random = ~1|Rat/Time,  data=ex)    
    > model2 <- lme(weight ~ TimeDiet, random = ~1|Rat/Time, data=ex)    
    > 
    > # the degrees of freedom, AIC, BIC, log-likelihood are all the same 
    > anova(model1, model2)
           Model df      AIC      BIC    logLik
    model1     1 12 367.4266 387.3893 -171.7133
    model2     2 12 367.4266 387.3893 -171.7133
    Warning message:
    In anova.lme(model1, model2) :
      fitted objects with different fixed effects. REML comparisons are not meaningful.
    > 
    > # the second model collapses the main and interaction effects of the first model
    > anova(model1)
                numDF denDF   F-value p-value
    (Intercept)     1    26 1719.5059  <.0001
    Time            2    26   28.9986  <.0001
    Diet            2    13   85.3659  <.0001
    Time:Diet       4    26    1.7610  0.1671
    > anova(model2)
                numDF denDF   F-value p-value
    (Intercept)     1    24 1719.5059  <.0001
    TimeDiet        8    24   29.4716  <.0001
    > 
    > # they give the same predicted values
    > newdata <- expand.grid(Time=levels(ex$Time), Diet=levels(ex$Diet))
    > newdata$TimeDiet <- interaction(newdata$Time, newdata$Diet)
> newdata$pred1 <- predict(model1, newdata=newdata, level=0)
    > newdata$pred2 <- predict(model2, newdata=newdata, level=0)
> newdata
  Time Diet TimeDiet   pred1   pred2
1    1    1      1.1 250.625 250.625
2   22    1     22.1 261.875 261.875
3   44    1     44.1 267.250 267.250
4    1    2      1.2 453.750 453.750
5   22    2     22.2 475.000 475.000
6   44    2     44.2 488.750 488.750
7    1    3      1.3 508.750 508.750
8   22    3     22.3 518.250 518.250
9   44    3     44.3 530.000 530.000

Satu-satunya perbedaan adalah bahwa hipotesis apa yang mudah diuji. Misalnya, dalam model pertama mudah untuk menguji apakah dua prediktor berinteraksi, dalam model kedua tidak ada tes eksplisit untuk ini. Di sisi lain, efek gabungan dari dua prediktor mudah diuji dalam model kedua, tetapi bukan yang pertama. Hipotesis lain dapat diuji, itu hanya lebih banyak pekerjaan untuk mengaturnya.

Aniko
sumber
3
glhtmenggunakan derajat kebebasan yang diberikan dalam model lme. Saya tidak yakin derajat kebebasan ini sesuai ...?
Stéphane Laurent
2
Saya juga ingin tahu bagaimana cara terbaik untuk melakukannya. Namun pendekatan ini memberikan efek dari model yang berbeda - yang pada dasarnya hanya menguji interaksi. Model kedua tidak termasuk dua efek utama potensial sama sekali. Ini tampaknya bukan metode yang tepat untuk memeriksa efek pada model pertama.
Marcus Morrisey
@ Aniko, saya berpikir untuk menggabungkan 2 variabel kategori menjadi satu seperti yang baru saja Anda lakukan, tapi saya ragu karena hanya satu dari variabel yang ada dalam subjek, yang lainnya adalah antara. Bisakah Anda mengonfirmasi bahwa ini bukan masalah? Saya perhatikan bahwa dalam contoh Anda menyimpan Animal/timeyang sekarang bukan salah satu faktor. Apakah aku benar-benar seperti understandini?
toto_tico
@toto_tico, saya telah mengedit respons untuk menunjukkan bahwa model kedua sama dengan yang pertama.
Aniko
3
@toto_tico, saya memberi Anda contoh yang bisa direproduksi. Mengapa Anda tidak mencoba all.equal(resid(model1), resid(model2))dan melihat bahwa keduanya sama sebelum menebak sebaliknya? Hanya parametriisasi efek tetap yang berbeda. TimeDietbukan istilah interaksi murni, dan itu tidak setara dengan Time:Diet, tetapi lebih kepada Time + Diet + Time:Diet.
Aniko