Bagaimana saya bisa menjelaskan kovarian spasial dalam model linier?

10

Latar Belakang

Saya memiliki data dari studi lapangan di mana ada empat tingkat pengobatan dan enam ulangan di masing-masing dua blok. (4x6x2 = 48 pengamatan)

Blok berjarak sekitar 1 mil, dan di dalam blok, ada grid 42, 2m x 4m plot dan jalan setapak lebar 1m; studi saya hanya menggunakan 24 plot di setiap blok.

Saya ingin mengevaluasi mengevaluasi kovarian spasial.

Berikut ini adalah contoh analisis menggunakan data dari satu blok, tanpa memperhitungkan kovarian spasial. Dalam dataset, plotadalah id plot, xadalah lokasi x dan lokasi yy dari setiap plot dengan plot 1 berpusat pada 0, 0. leveladalah tingkat perlakuan dan responsemerupakan variabel respons.

layout <- structure(list(plot = c(1L, 3L, 5L, 7L, 8L, 11L, 12L, 15L, 16L, 
17L, 18L, 22L, 23L, 26L, 28L, 30L, 31L, 32L, 35L, 36L, 37L, 39L, 
40L, 42L), level = c(0L, 10L, 1L, 4L, 10L, 0L, 4L, 10L, 0L, 4L, 
0L, 1L, 0L, 10L, 1L, 10L, 4L, 4L, 1L, 1L, 1L, 0L, 10L, 4L), response = c(5.93, 
5.16, 5.42, 5.11, 5.46, 5.44, 5.78, 5.44, 5.15, 5.16, 5.17, 5.82, 
5.75, 4.48, 5.25, 5.49, 4.74, 4.09, 5.93, 5.91, 5.15, 4.5, 4.82, 
5.84), x = c(0, 0, 0, 3, 3, 3, 3, 6, 6, 6, 6, 9, 9, 12, 12, 12, 
15, 15, 15, 15, 18, 18, 18, 18), y = c(0, 10, 20, 0, 5, 20, 25, 
10, 15, 20, 25, 15, 20, 0, 15, 25, 0, 5, 20, 25, 0, 10, 20, 
25)), .Names = c("plot", "level", "response", "x", "y"), row.names = c(NA, 
-24L), class = "data.frame")

model <- lm(response ~ level, data = layout)      
summary(model)

Pertanyaan

  1. Bagaimana saya bisa menghitung matriks kovarians dan memasukkannya ke dalam regresi saya?
  2. Bloknya sangat berbeda, dan ada interaksi blok pengobatan * yang kuat. Apakah pantas untuk menganalisisnya secara terpisah?
David LeBauer
sumber
1
Plot 37 dan 39 keduanya pada x = 18, y = 10. Salah ketik?
Aaron meninggalkan Stack Overflow
@ Harun terima kasih telah menunjukkan itu. y = [0,10]. Tetap.
David LeBauer

Jawaban:

10

1) Anda dapat memodelkan korelasi spasial dengan nlmeperpustakaan; ada beberapa model yang mungkin Anda pilih. Lihat halaman 260-266 dari Pinheiro / Bates.

Langkah pertama yang baik adalah membuat variogram untuk melihat bagaimana korelasi tergantung pada jarak.

library(nlme)
m0 <- gls(response ~ level, data = layout)  
plot(Variogram(m0, form=~x+y))

Di sini sampel semivariogram meningkat dengan jarak yang menunjukkan bahwa pengamatan memang berkorelasi spasial.

Salah satu opsi untuk struktur korelasi adalah struktur bola; yang bisa dimodelkan dengan cara berikut.

m1 <- update(m0, corr=corSpher(c(15, 0.25), form=~x+y, nugget=TRUE))

Model ini tampaknya lebih cocok daripada model tanpa struktur korelasi, meskipun sangat mungkin juga dapat ditingkatkan dengan salah satu struktur korelasi lain yang mungkin.

> anova(m0, m1)
   Model df     AIC      BIC    logLik   Test  L.Ratio p-value
m0     1  3 46.5297 49.80283 -20.26485                        
m1     2  5 43.3244 48.77961 -16.66220 1 vs 2 7.205301  0.0273

2) Anda juga dapat mencoba memasukkan xdan ylangsung ke dalam model; ini bisa tepat jika pola korelasional bergantung pada lebih dari sekadar jarak. Dalam kasus Anda (melihat gambar sesqu) sepertinya untuk blok ini, Anda mungkin memiliki pola diagonal.

Di sini saya memperbarui model asli, bukan m0 karena saya hanya mengubah efek tetap, sehingga model keduanya harus pas menggunakan kemungkinan maksimum.

> model2 <- update(model, .~.+x*y)
> anova(model, model2)
Analysis of Variance Table

Model 1: response ~ level
Model 2: response ~ level + x + y + x:y
  Res.Df    RSS Df Sum of Sq      F   Pr(>F)   
1     22 5.3809                                
2     19 2.7268  3    2.6541 6.1646 0.004168 **

Untuk membandingkan ketiga model, Anda harus menyesuaikan semuanya dengan glsdan metode kemungkinan maksimum alih-alih metode standar REML.

> m0b <- update(m0, method="ML")
> m1b <- update(m1, method="ML")
> m2b <- update(m0b, .~x*y)
> anova(m0b, m1b, m2b, test=FALSE)
    Model df      AIC      BIC     logLik
m0b     1  3 38.22422 41.75838 -16.112112
m1b     2  5 35.88922 41.77949 -12.944610
m2b     3  5 29.09821 34.98847  -9.549103

Ingatlah bahwa terutama dengan pengetahuan Anda tentang studi ini, Anda mungkin dapat menemukan model yang lebih baik dari semua ini. Artinya, model m2btidak harus dianggap sebagai yang terbaik.

Catatan: Perhitungan ini dilakukan setelah mengubah nilai x plot 37 menjadi 0.

Aaron meninggalkan Stack Overflow
sumber
terima kasih atas jawaban bermanfaat Anda; tidak jelas mengapa di bagian 2 Anda memperbarui modelbukan m0, misalnya. m2 <- update(m0, .~.+x*y)sehingga ketiga model dapat dibandingkan menggunakan anova(m0,m1,m2); setelah melakukan ini, m2lebih longgar (AIC = 64) tampaknya bagian Anda
David LeBauer
ps baris terakhir harus 'setelah mengubah nilai-y dari plot 37 ke 5'; nilai sebenarnya adalah 0, tetapi hasilnya setara.
David LeBauer
Jika Anda membandingkan m0,, m1dan m2seperti yang Anda sarankan Anda mendapatkan peringatan: Fitted objects with different fixed effects. REML comparisons are not meaningful. Untuk membandingkan efek tetap Anda harus menggunakan kemungkinan maksimum reguler daripada REML. Lihat edit.
Aaron meninggalkan Stack Overflow
terima kasih atas semua bantuannya. Saya tidak yakin mengapa, tapi saya mendapatkan kesalahan ketika saya mencoba menyesuaikan struktur korelasi lainnya, misalnya menggunakan corExp seperti pada contoh Pinheiro dan Bates. Saya telah membuka pertanyaan pada SO tentang kesalahan ini, tetapi masukan Anda akan dihargai.
David LeBauer
4

1) Apa variabel yang menjelaskan spasial Anda? Sepertinya bidang x * y akan menjadi model yang buruk untuk efek spasial.

plot perawatan dan respons

i=c(1,3,5,7,8,11,14,15,16,17,18,22,23,25,28,30,31,32,35,36,39,39,41,42)
l=rep(NA,42)[i];l[i]=level
r=rep(NA,42)[i];r[i]=response
image(t(matrix(-l,6)));title("treatment")
image(t(matrix(-r,6)));title("response")

2) Melihat bagaimana jarak blok 1 mil dan Anda berharap untuk melihat efek hanya 30 meter, saya akan mengatakan itu sepenuhnya tepat untuk menganalisis secara terpisah.

sesqu
sumber
Visualisasi sangat membantu, tetapi jika Anda membandingkan kanan bawah dengan kanan atas gambar, tampak bagi saya bahwa lokasi memiliki efek yang lebih kuat daripada level. (ps Saya pikir saya [i] = respons harus r [i] = ...)
David LeBauer
Iya. Efek lokasi luar biasa, dan Anda tentu menginginkan model yang bagus untuk itu sebelum mulai memperkirakan efek perawatan. Sayangnya, ada banyak data yang hilang sehingga sulit untuk mengatakan apa yang seharusnya - yang terbaik yang bisa saya dapatkan adalah efek lokasi pemodelan sebagai rata-rata respon tetangga + komponen acak, dan kemudian mencoba perawatan pada itu . Itu sangat mencurigakan, jadi pengetahuan domain tambahan apa pun akan berharga. kesalahan ketik diperbaiki.
sesqu
@sesqu ... tidak ada data yang hilang, ada data dari semua 24 plot yang berlokasi secara acak.
David LeBauer
Ada data yang hilang dalam arti bahwa tidak setiap pasangan x, y memiliki data.
Aaron meninggalkan Stack Overflow