Bagaimana cara memasukkan istilah interaksi dalam GAM?


24

Kode berikut mengevaluasi kesamaan antara dua seri waktu:

set.seed(10)
RandData <- rnorm(8760*2)
America <- rep(c('NewYork','Miami'),each=8760)

Date = seq(from=as.POSIXct("1991-01-01 00:00"), 
           to=as.POSIXct("1991-12-31 23:00"), length=8760)

DatNew <- data.frame(Loc = America,
                     Doy = as.numeric(format(Date,format = "%j")),
                     Tod = as.numeric(format(Date,format = "%H")),
                     Temp = RandData,
                     DecTime = rep(seq(1, length(RandData)/2) / (length(RandData)/2),
                                   2))
require(mgcv)
mod1 <- gam(Temp ~ Loc + s(Doy) + s(Doy,by = Loc) +
  s(Tod) + s(Tod,by = Loc),data = DatNew, method = "ML")

Di sini, gamdigunakan untuk mengevaluasi bagaimana suhu di New York dan Miami bervariasi dari suhu rata-rata (dari kedua lokasi) pada waktu yang berbeda dalam sehari. Masalah yang saya miliki sekarang adalah bahwa saya perlu memasukkan istilah interaksi yang menunjukkan bagaimana suhu setiap lokasi bervariasi sepanjang hari untuk berbagai hari dalam setahun. Saya akhirnya berharap untuk menampilkan semua informasi ini pada satu grafik (untuk setiap lokasi). Jadi, untuk Miami saya berharap memiliki satu grafik yang menunjukkan bagaimana suhu bervariasi dari rata-rata selama waktu yang berbeda dalam sehari dan waktu yang berbeda dalam setahun (plot 3d?)


2
Anda mungkin menemukan jawaban untuk pertanyaan ini stats.stackexchange.com/questions/18937/… relevan.
jbowman

Jawaban:


18

"A" dalam "gam" adalah singkatan dari "additive" yang berarti tidak ada interaksi, jadi jika Anda cocok dengan interaksi, Anda benar-benar tidak lagi cocok dengan model gam.

Yang mengatakan, ada cara untuk mendapatkan beberapa interaksi seperti istilah dalam istilah aditif dalam gam, Anda sudah menggunakan salah satunya dengan menggunakan byargumen s. Anda bisa mencoba memperluas ini agar argumennya bymenjadi matriks dengan fungsi (sin, cos) dari doy atau tod. Anda juga bisa memasukkan spline smoothing dalam model linier biasa yang memungkinkan interaksi (ini tidak memberikan backfitting yang dilakukan oleh gam, tetapi masih bisa bermanfaat).

Anda mungkin juga melihat regresi pengejaran proyeksi sebagai alat lain yang pas. Loess atau lebih banyak model parametrik (dengan dosa dan / atau cos) mungkin juga berguna.

Bagian dari keputusan tentang alat apa yang digunakan adalah pertanyaan apa yang Anda coba jawab. Apakah Anda hanya mencoba menemukan model untuk memprediksi tanggal dan waktu mendatang? apakah Anda mencoba menguji untuk melihat apakah prediktor tertentu signifikan dalam model? apakah Anda mencoba memahami bentuk hubungan antara prediktor dan hasilnya? Sesuatu yang lain


3
x1,x2
y=f1(x1)+f2(x2)+f3(x1x2)+ε
gam
y=f1(x1)+f2(x2)+f3(x1)x2+f4(x2)x1+ε
by

1
@ Macro, Itu tergantung pada apakah Anda ingin membagi rambut atau tidak (baik secara teknis apa yang Anda tulis mungkin adalah milik saya karena Anda tidak benar-benar menggunakan bagian g).
Greg Snow

2
@ Macro, saya yakin banyak yang telah dikatakan tentang masalah ini, tetapi lihat halaman 4 tentang GAM dari artikel Venable ini, Exegeses on Linear Models . Tidak jelas persis bagaimana efek utama non-aditif dan efek interaksi diidentifikasi secara bersamaan.
Andy W

Terima kasih banyak untuk komentar Anda. Tujuan utama saya di sini adalah untuk tidak memprediksi nilai masa depan tetapi hanya untuk melihat bagaimana setiap rangkaian waktu berubah dari rata-rata kedua seri. Sebagai contoh, hasil mod1 menunjukkan bagaimana deret waktu di setiap lokasi bervariasi dari rata-rata pertama pada skala waktu hari dalam setahun (Doy) dan kemudian waktu hari (Tod). Dari sini saya ingin melihat bagaimana setiap seri bervariasi pada fungsi Doy dan Tod yang saya harapkan deret waktunya sangat berbeda selama periode musim panas.
KatyB

2
@AndyW Penting untuk dicatat bahwa GAM telah berjalan jauh sejak Venable mengomentari mereka - perkembangan dalam dekade terakhir atau lebih dengan splines sensu Simon Wood (sebagaimana diterapkan dalam mgcv ) dan perawatan sepenuhnya bayesian menangani masalah seperti pemilihan kelancaran, interaksi & cara menyesuaikan mereka (produk tensor dari basis marginal menjadi satu pendekatan) dalam kerangka model aditif. Saya cukup yakin keberatan Venable's & Cox terhadap GAM seperti yang diuraikan dalam Exegeses dari pembuatnya sebagian besar telah ditangani oleh perkembangan terbaru dalam teori GAM ini.
Pasang kembali Monica - G. Simpson

25

Untuk dua variabel kontinu maka Anda dapat melakukan apa yang Anda inginkan (apakah ini merupakan interaksi atau tidak, saya akan membiarkan orang lain untuk membahas sesuai komentar di @ Greg's Answer) menggunakan:

mod1 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1) +
                         te(Tod, Doy, by = Loc, bs = rep("cc",2)),
            data = DatNew, method = "ML")

Model sederhana kemudian harus bersarang dalam model yang lebih kompleks di atas. Model yang lebih sederhana itu adalah:

mod0 <- gam(Temp ~ Loc + s(Doy, bs = "cc", k = 5) + 
                         s(Doy, bs = "cc", by = Loc, k = 5, m = 1) + 
                         s(Tod, bs = "cc", k = 5) + 
                         s(Tod, bs = "cc", by = Loc, k = 5, m = 1),
            data = DatNew, method = "ML")

Perhatikan dua hal di sini:

  1. Tipe dasar untuk setiap halus dinyatakan. Dalam hal ini kami berharap bahwa tidak ada diskontinuitas di Temp antara 23:59 dan 00:00 untuk Todatau di antara Doy == 1dan Doy == 365.25. Oleh karena itu splines kubik siklik sesuai, ditunjukkan di sini melalui bs = "cc".
  2. Dimensi dasar dinyatakan secara eksplisit ( k = 5). Ini cocok dengan dimensi dasar default untuk setiap smooth dalam suatu te()istilah.

Bersama fitur-fitur ini memastikan bahwa model yang lebih sederhana benar-benar bersarang di dalam model yang lebih kompleks.

Untuk lebih lanjut lihat ?gam.modelsdalam mgcv .


Terkait dengan poin ke-2 Anda - selain spesifikasi k, sebaiknya Anda juga memperbaiki jumlah simpul (mis fx=TRUE.). Jika tidak, model yang dihasilkan menunjukkan beragam edfuntuk setiap istilah.
Marc di dalam kotak

Saya harus memperbarui jawaban ini sedikit mengingat beberapa fungsionalitas baru dalam paket mgcv dalam hal splines untuk basis marginal. Yang mengatakan, saya tidak setuju bahwa Anda perlu memperbaiki derajat kebebasan untuk spline. Kuncinya adalah memastikan bahwa basis untuk model bersarang dengan tepat. Kemudian perbedaan antara model dimungkinkan dengan menetapkan beberapa koefisien untuk fungsi dasar menjadi nol, seperti yang akan terjadi dalam model linier dengan suku non-spline.
Pasang kembali Monica - G. Simpson

3
Berharap seseorang masih menonton utas ini dan dapat menjawab. Dalam model ini, bagaimana Anda harus menentukan keduanya s(Doy...)dan s(Doy, by =Loc...)? Saya pikir yang pertama akan bersarang ke dalam yang terakhir dan dengan demikian tidak perlu ditentukan?
Ego_

3
Tidak, smooth pertama adalah fungsi global dan oleh smooth mewakili perbedaan spesifik situs antara itu dan smooth global. Oleh smooths benar-benar perlu m = 1ditambahkan kepada mereka untuk menempatkan penalti pada turunan pertama untuk smooths perbedaan.
Pasang kembali Monica - G. Simpson

2
@ JoshuaRosenberg Jika maksud Anda te(), itu tergantung apa yang Anda masukkan dalam produk tensor? Interaksi yang dijelaskan di sini adalah interaksi faktor-halus, tetapi te()akan menyiratkan dua atau lebih variabel kontinu. Jika Anda ingin istilah global dan penyimpangan khusus subjek, maka ya, te(DoY, Year, by = Loc, m = 1)dapat digunakan bersama te(DoY, Year), meskipun ada cara lain untuk mencapai hal serupa menggunakan interaksi faktor-halus seperti efek acak dan te()istilah yang berisi spline efek acak.
Pasang kembali Monica - G. Simpson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.