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, gam
digunakan 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?)
r
time-series
data-visualization
gam
KatyB
sumber
sumber
Jawaban:
"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
by
argumens
. Anda bisa mencoba memperluas ini agar argumennyaby
menjadi 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
sumber
gam
by
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:
Model sederhana kemudian harus bersarang dalam model yang lebih kompleks di atas. Model yang lebih sederhana itu adalah:
Perhatikan dua hal di sini:
Tod
atau di antaraDoy == 1
danDoy == 365.25
. Oleh karena itu splines kubik siklik sesuai, ditunjukkan di sini melaluibs = "cc"
.k = 5
). Ini cocok dengan dimensi dasar default untuk setiap smooth dalam suatute()
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.models
dalam mgcv .sumber
k
, sebaiknya Anda juga memperbaiki jumlah simpul (misfx=TRUE
.). Jika tidak, model yang dihasilkan menunjukkan beragamedf
untuk setiap istilah.s(Doy...)
dans(Doy, by =Loc...)
? Saya pikir yang pertama akan bersarang ke dalam yang terakhir dan dengan demikian tidak perlu ditentukan?m = 1
ditambahkan kepada mereka untuk menempatkan penalti pada turunan pertama untuk smooths perbedaan.te()
, itu tergantung apa yang Anda masukkan dalam produk tensor? Interaksi yang dijelaskan di sini adalah interaksi faktor-halus, tetapite()
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 bersamate(DoY, Year)
, meskipun ada cara lain untuk mencapai hal serupa menggunakan interaksi faktor-halus seperti efek acak dante()
istilah yang berisi spline efek acak.