GAM'da bir etkileşim terimi nasıl dahil edilir?


24

Aşağıdaki kod, iki zaman serisi arasındaki benzerliği değerlendirir:

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

Burada, gamNew York ve Miami'deki sıcaklığın günün farklı zamanlarındaki ortalama sıcaklıktan (her iki konumun) nasıl değiştiğini değerlendirmek için kullanılır. Şimdi sahip olduğum sorun, yılın farklı günlerinde gün boyunca her bir yerin sıcaklığının nasıl değiştiğini gösteren bir etkileşim terimi eklemem gerekmesidir. Sonunda tüm bu bilgileri bir grafikte göstermeyi umuyorum (her konum için). Bu yüzden, Miami için sıcaklığın günün farklı zamanlarında ve yılın farklı zamanlarında ortalamadan nasıl değiştiğini gösteren bir grafiğe sahip olmayı umuyorum (3d arsa?


2
Bu sorunun cevabını istatistik.stackexchange.com/questions/18937/… ile ilgili bulabilirsiniz.
jbowman

Yanıtlar:


18

"Gam" daki "a" etkileşimi olmayan anlamına gelen "katkı" anlamına gelir, böylece etkileşimlere uyursanız, artık bir gam modeline uymazsınız.

Bununla birlikte, bir oyundaki ek terimler içindeki terimler gibi bazı etkileşimler elde etmenin yolları var, zaten bunlardan birini byargüman kullanarak kullanıyorsunuz s. Bunu argümanın bydoy veya tod işlevine sahip (sin, cos) bir matris olması için genişletmeyi deneyebilirsiniz . Ayrıca düzleştirici spline'ları etkileşime izin veren normal bir lineer modele sığdırabilirsiniz (bu, gamın yaptığı backfittingi vermez, ancak yine de yararlı olabilir).

Projeksiyon takibi regresyonuna başka bir montaj aracı olarak da bakabilirsiniz. Loess veya daha fazla parametrik model (günah ve / veya cos ile) de yararlı olabilir.

Hangi araçları kullanacağına ilişkin kararın bir kısmı, hangi soruyu yanıtlamaya çalıştığınızdır. Gelecekteki tarihleri ​​ve saatleri öngörecek bir model mi bulmaya çalışıyorsunuz? Modelde belirli belirleyicilerin anlamlı olup olmadığını görmek için test etmeye mi çalışıyorsunuz? Bir yordayıcıyla sonuç arasındaki ilişkinin şeklini anlamaya mı çalışıyorsunuz? Başka bir şey?


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

1
@ Makro, Saçları ayırmak isteyip istemediğinize bağlı olarak değişir (teknik olarak yazdığınız şey belki de g bölümünü kullanmadığınızdan beri olabilir).
Greg Snow,

2
@Macro, konuyla ilgili daha fazla şey söylendiğinden eminim, ancak bu Venable adlı makalenin GAM'leri , Lineer Modellerle İlgili Exegeses . Katkısız ana etkiler ve etkileşim etkilerinin aynı anda nasıl tanımlandığı tam olarak belli değil.
Andy W,

yorumlarınız için çok teşekkürler. Buradaki asıl amacım gelecekteki değerleri tahmin etmek değil, her zaman serisinin her iki serinin ortalamasından nasıl değiştiğini görmek. Örneğin, mod1'in sonucu, her bir konumdaki zaman serilerinin ilk önce yılın zaman çizelgesindeki (Doy) ve ardından günün zamanındaki (Tod) ortalamadan nasıl değiştiğini gösterir. Bundan, her yaz dizisinde zaman serisinin çok farklı olmasını beklediğim Doy ve Tod'ın işlevinde her dizinin nasıl değiştiğini görmek istiyorum.
KatyB

2
@AndyW Venable'ın kendilerine yorum yaptığı için GAM'lerin uzun bir yol kat ettiğine dikkat etmek önemlidir - son on yıldaki gelişmeler ve cezalandırılmış spline sensu Simon Wood ( mgcv'de uygulandığı gibi ) ve tamamen bayes tedavileri, pürüzsüzlük seçimi, etkileşimler ve bunlara nasıl uyulacağı (marjinal bazların tensör ürünleri bir yaklaşımdır) ek model çerçevesinde. Eski özetlendiği gibi ben Gams için Venable en & Cox'un itirazlarını makul eminim tefsirlerden GAM teoride bu son gelişmeler ele been büyük ölçüde var.
Monica'yı yeniden kurun - G. Simpson

25

İki sürekli değişken için o zaman istediğiniz şeyi yapabilirsiniz (bunun bir etkileşim olup olmadığına bakmadan başkalarını @ Greg'in Cevabı'na yapılan yorumlara göre tartışmaya bırakacağım):

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

Daha basit model daha sonra yukarıdaki daha karmaşık modelde yuvalanmalıdır. Bu basit model:

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

Burada iki şeyi not edin:

  1. Her pürüzsüz için temel tipi belirtilmiştir. Bu durumda Temp'de 23:59 ile 00:00 Todarasında Doy == 1ve arasında hiçbir süreksizlik olmadığını beklerdik Doy == 365.25. Bu nedenle, burada belirtildiği gibi siklik kübik eğri çizgiler uygundur bs = "cc".
  2. Temel boyut açıkça belirtilmiştir ( k = 5). Bu, bir terimdeki her yumuşak için varsayılan temel boyutu ile eşleşir te().

Bu özellikler bir arada, daha basit olan modelin gerçekten daha karmaşık modelin içine yerleştirilmiş olmasını sağlar.

Mgcv?gam.models içinde daha fazla görmek için .


2. puanınızla ilgili - şartnameye ek olarak, kbir tane de düğüm sayısını (örn. fx=TRUE) Sabitlemelisiniz . Aksi takdirde, ortaya çıkan model edfher terim için değişkenlik gösterir .
Marc,

Mgcv paketinde marjinal bazlar için spline'lara yeni bir işlevsellik verilmişse, bu cevabı biraz güncellemeliyim . Bununla birlikte, spline için serbestlik derecelerini belirlemeniz gerektiğine katılıyorum. Anahtar, modellerin tabanlarının uygun şekilde yuvalanmış olmasını sağlamaktır. Ardından, temel fonksiyonlar için bazı katsayıların, spline olmayan terimlerle lineer bir modelde olduğu gibi sıfıra ayarlanmasıyla modeller arasındaki farklar mümkündür.
Monica’yı eski durumuna getirin - G. Simpson

3
Birisi hala bu konuyu izliyor ve cevap verebilir umuduyla. Bu modellerde, ikisini de s(Doy...)ve neden belirtmelisiniz s(Doy, by =Loc...)? Birincisinin ikincisine yuvalanacağını ve dolayısıyla belirtmenin gereksiz olacağını düşündüm?
ego_

3
Hayır, ilk yumuşaklık global fonksiyondur ve yumuşaklık, onunla global yumuşaklık arasındaki alana özgü farklılıkları temsil eder. m = 1Farklılık pürüzsüzlüğü için ilk türevde cezayı koymak için pürüzsüzlükler tarafından gerçekten onlara eklenmesi gerekir .
Monica'yı eski

2
@JoshuaRosenberg Eğer demek te()istiyorsan, tensör ürününe ne dahil ettiğine bağlı? Burada tarif edilen etkileşimler faktör-pürüzsüz etkileşimlerdir, ancak te()iki veya daha fazla sürekli değişken anlamına gelir. Global terimler ve özneye özgü sapmalar istiyorsanız, evet, bununla te(DoY, Year, by = Loc, m = 1)birlikte te(DoY, Year), rastgele etki benzeri faktör-düz etkileşimi ve te()rastgele bir etki spline içeren terimler kullanarak benzer şeyler elde etmenin başka yolları olmasına rağmen, birlikte kullanılabilir .
Monica'yı eski durumuna getirme - G. Simpson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.