GAM에 상호 작용 용어를 포함시키는 방법은 무엇입니까?


24

다음 코드는 두 시계열의 유사성을 평가합니다.

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

여기 gam에서 뉴욕과 마이애미의 온도가 하루 중 다른 시간의 두 위치의 평균 온도와 어떻게 다른지 평가하는 데 사용됩니다. 지금 가지고있는 문제는 각 지역의 온도가 연중 다른 날 동안 하루 종일 어떻게 변하는지를 나타내는 상호 작용 항을 포함시켜야한다는 것입니다. 결국이 모든 정보를 하나의 그래프 (각 위치마다)에 표시하고 싶습니다. 마이애미의 경우 하루 중 다른 시간대와 연중 다른 시간대의 평균과 온도가 어떻게 다른지 보여주는 하나의 그래프를 원합니다 (3d 플롯?)


2
이 질문에 대한 답변은 stats.stackexchange.com/questions/18937/… 와 관련이 있습니다.
jbowman

답변:


18

"gam"의 "a"는 "additive"를 나타내며 상호 작용이 없음을 의미하므로 상호 작용에 적합하면 더 이상 게임 모델에 적합하지 않습니다.

즉, 게임의 추가 용어 내에서 용어와 같은 상호 작용을 얻는 방법이 있습니다 .에 대한 by인수를 사용하여 이미 그 중 하나를 사용하고 s있습니다. 인수 by를 doy 또는 tod 함수 (sin, cos) 를 갖는 행렬로 확장하도록 시도해 볼 수 있습니다. 상호 작용을 허용하는 규칙적인 선형 모델에 스무딩 스플라인을 맞출 수도 있습니다 (이것은 게임이하는 백 피팅을 제공하지는 않지만 여전히 유용 할 수 있습니다).

프로젝션 추적 회귀 분석을 다른 피팅 도구로 볼 수도 있습니다. 손실 또는 더 많은 파라 메트릭 모델 (sin 및 / 또는 cos 포함)도 유용 할 수 있습니다.

사용할 도구에 대한 결정의 일부는 어떤 질문에 대답하려고 하는가입니다. 미래의 날짜와 시간을 예측하기위한 모델을 찾고 있습니까? 모형에서 특정 예측 변수가 유의한지 확인하기 위해 테스트하려고합니까? 당신은 예측 자와 결과 사이의 관계의 형태를 이해하려고 노력하고 있습니까? 다른 것?


3
두 예측이 있다고 가정하자 -하지 아직이 할머니? 이것은 어떤 의미에서 '상호 작용'으로 생각 될 수 있습니다. 또한, 나는 생각 패키지에는 같은 모델에 맞게 할 수 있습니다 (나는 무엇을 생각 인수하고있다)를. 아직도 게임인가요? x1,x2
y=f1(x1)+f2(x2)+f3(x1x2)+ε
gam
y=f1(x1)+f2(x2)+f3(x1)x2+f4(x2)x1+ε
by
매크로

1
@ 매크로, 그것은 머리카락을 나누고 싶은지 아닌지에 달려 있습니다 (기술적으로 글을 쓰는 것은 실제로 g 부분을 사용하지 않기 때문에 아마도 아마 am 일 것입니다).
Greg Snow

2
@Macro, 나는이 주제에 대해 더 많은 언급을 하였지만이 Venable의 기사 인 Exegeses on Linear Models 의 GAM에 대해서는 4 페이지를 참조하십시오 . 비 첨가 주 효과와 상호 작용 효과가 동시에 어떻게 식별되는지는 명확하지 않습니다.
앤디 W

귀하의 의견에 감사드립니다. 여기서 나의 주요 목표는 미래의 가치를 예측하는 것이 아니라 각 시계열이 두 시리즈의 평균에서 어떻게 바뀌는 지 단순히 보는 것입니다. 예를 들어, mod1의 결과는 각 위치의 시계열이 일의 시간 척도 (Doy)와 하루 중 시간 (Tod)의 평균과 어떻게 다른지 보여줍니다. 이것으로부터 나는 여름 동안 시계열이 크게 다를 것으로 예상되는 Doy와 Tod의 기능에서 각 시리즈가 어떻게 다른지보고 싶다.
KatyB

2
@AndyW Venable이 그들에 대해 언급 한 이후로 GAM이 먼 길을 왔다는 점에 주목하는 것이 중요합니다-지난 10 년 동안의 개발은 처벌 스플라인 sensu Simon Wood ( mgcv 로 구현 )와 완전히 베이지안 처리가 다음과 같은 문제를 해결합니다. 추가 모델 프레임 워크에서 부드러움 선택, 상호 작용 및 이들을 맞추는 방법 (한계의 텐서 제품이 하나의 접근법 임). 의 이전에 설명 된대로 나는 GAMS에 베너 블의 & 콕스의 반대를 합리적으로 확신 Exegeses GAM 이론에서 이러한 최근의 발전에 의해 해결되어 큰 정도있다.
복원 모니카

25

두 개의 연속 변수의 경우 다음을 사용하여 원하는 것을 수행 할 수 있습니다 (상호 작용 여부에 관계없이 다른 사람들이 @Greg의 답변에 대한 의견에 따라 토론하도록 할 것입니다).

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

간단한 모델은 위의 더 복잡한 모델 내에 중첩되어야합니다. 더 간단한 모델은 다음과 같습니다.

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

여기에 두 가지가 있습니다.

  1. 각 스무더의 기본 유형이 설명되어 있습니다. 이 경우, 23:59에서 00:00 Tod사이 Doy == 1및 사이에 불연속이 없을 것으로 예상 Doy == 365.25됩니다. 따라서 순환 입방 스플라인이 여기에 표시됩니다 bs = "cc".
  2. 기본 치수는 명시 적으로 표시됩니다 ( k = 5). 이는 te()항의 각 스무드에 대한 기본 기준 치수와 일치합니다 .

이러한 기능을 함께 사용하면 더 단순한 모델이 더 복잡한 모델 내에 중첩됩니다.

더 참조 ?gam.modelsmgcv .


두 번째 포인트와 관련하여-의 사양 외에도 k매듭 수 (예 :)를 수정해야합니다 fx=TRUE. 그렇지 않은 경우 결과 모형은 edf각 항에 따라 달라 집니다.
Marc in the box

한계베이스에 대한 스플라인 측면 에서 mgcv 패키지 의 일부 새로운 기능이 제공되면이 답변을 약간 업데이트해야합니다 . 즉, 스플라인의 자유도를 수정해야한다는 데 동의하지 않습니다. 핵심은 모델의베이스가 적절히 중첩되도록하는 것입니다. 그러면 스플라인이 아닌 항이있는 선형 모델에서와 같이 기본 함수에 대한 일부 계수를 0으로 설정하여 모델 간의 차이가 가능합니다.
복원 Monica Monica-G. Simpson

3
누군가이 스레드를 계속보고 있기를 바라며 대답 할 수 있습니다. 이 모델에서, 당신은 어떻게 모두 지정해야합니다 온 s(Doy...)과를 s(Doy, by =Loc...)? 첫 번째는 후자에 중첩되어 지정할 필요가 없다고 생각 했습니까?
ego_

3
아니요, 첫 번째 스무드는 전역 함수이고 by by smooth은 전역 함수와 사이트 간 차이를 나타냅니다. 바이 스무딩 m = 1은 차이 스무딩에 대한 첫 번째 미분에 페널티를두기 위해 실제로 추가되어야합니다.
복원 Monica Monica-G. Simpson

2
@JoshuaRosenberg 당신이 의미한다면 te(), 그것은 당신이 텐서 제품에 포함하고있는 것에 달려 있습니까? 여기에 설명 된 교호 작용은 요인이 평활 한 교호 작용이지만 te()둘 이상의 연속 변수를 암시합니다. 전역 항과 주제별 편차를 원한다면 임의의 효과와 같은 요인-평활 한 상호 작용 및 임의의 효과 스플라인을 포함하는 항을 사용하여 유사한 것을 달성하는 다른 방법이 있지만, 그래도 te(DoY, Year, by = Loc, m = 1)함께 사용할 수 있습니다 . te(DoY, Year)te()
복원 모니카
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.