mgcv GAM 모델에서 스무딩 조정 방법


14

mgcv : gam 모델에서 스무딩 매개 변수를 제어하는 ​​방법을 알아 내려고합니다.

고정 그리드에서 주로 x 및 y 좌표의 함수로 모델링하려는 이항 변수가 있으며 더 작은 영향을 미치는 다른 변수도 있습니다. 과거에는 패키지 위치 지정과 (x, y) 값을 사용하여 합리적으로 좋은 로컬 회귀 모델을 만들었습니다.

그러나 다른 변수를 모델에 통합하려고 시도하고 일반 가산 모델 (GAM)이 좋은 가능성처럼 보였습니다. GAM 기능이있는 gam 및 mgcv 패키지를 살펴본 후 메일 링리스트 스레드의 여러 주석이 권장하는 것처럼 보이기 때문에 후자를 선택했습니다. 한 가지 단점은 황토 나 로크 핏과 같은 국소 회귀를 더 매끄럽게 지원하지 않는 것입니다.

시작하기 위해 단지 (x, y) 좌표를 사용하여 대략 locfit 모델을 복제하려고했습니다. 나는 일반 및 텐서 제품을 모두 사용해 보았습니다.

my.gam.te <- gam(z ~ te(x, y), family=binomial(logit), data=my.data, scale = -1)

my.gam.s  <- gam(z ~  s(x, y), family=binomial(logit), data=my.data, scale = -1)

그러나 모델의 예측을 플로팅하면 로크 핏 모델에 비해 훨씬 매끄럽게 다듬어집니다. 그래서 나는 모델을 너무 매끄럽게하지 않도록 조정하려고 노력했습니다. 매개 변수 sp와 k를 조정하려고 시도했지만 스무딩에 어떤 영향을 미치는지 명확하지 않습니다. locfit에서 nn 매개 변수는 사용 된 이웃의 범위를 제어하며, 값이 작을수록 스무딩이 적고 "흔들기"가 가능하여 이항 결과의 확률이 급격히 변하는 그리드의 일부 영역을 캡처하는 데 도움이됩니다. 게임이 유사하게 작동하도록 게임 모델을 설정하는 방법은 무엇입니까?

답변:


22

k인수는 각 항에 대해 평활 행렬의 차원을 효과적으로 설정합니다. gam()최적의 평활도를 선택하기 위해 GCV 또는 UBRE 점수를 사용하지만 평활화 행렬의 차원 내에서만 작동 할 수 있습니다. 기본적으로 te()스무딩에는 k = 5^22D 표면이 있습니다. 그것이 무엇인지 잊었 s()으므로 문서를 확인하십시오. mgcv의 저자 Simon Wood의 현재 조언 은 모형에 의해 선택된 부드러움의 정도가에 사용 된 값에 의해 부과 된 차원의 한계에 가깝거나 그에 가까운 경우 모형을 k증가 k시키고 다시 조정하여 보다 복잡한 모델은 더 높은 차원의 스무딩 행렬에서 선택됩니다.

그러나 locfit 이 어떻게 작동 하는지 모르겠지만 , 너무 복잡한 곡면 (GCV 및 UBRE 또는 (RE) ML)을 사용하도록 선택하지 않을 경우 무언가를 가져와야합니다. 세트는 scale = -1, 데이터를 지원하지 않습니다이) 단지 그렇게하려고합니다. 다시 말해, 데이터의 지역적 특성에 맞출 수 있지만 수집 한 데이터 샘플에 노이즈를 맞추거나 확률 분포의 평균을 맞추고 있습니까? gam() 당신에게 무엇에 대해 뭔가 얘기 할 는 기준 차원 (위)에서 분류 한 가정, 데이터로부터 추정 할 수있다.

고려해야 할 또 다른 사항은 현재 사용중인 스무더가 선택한 스무딩이 스무드의 전체 범위에 적용된다는 점에서 전역 적이라는 것입니다. 적응 형 스무더는 응답이 빠르게 변하는 데이터 부분에서 할당 된 부드러움 "허용"을 사용할 수 있습니다. gam()적응 형 스무더를 사용하는 기능이 있습니다.

참조 ?smooth.terms?adaptive.smooth사용하여 장착 할 수있는 볼 gam(). te()이 모든 스무더가 아닌 대부분을 결합 할 수 있습니다 (텐서 제품에 포함될 수 있거나 포함 할 수없는 문서를 확인하십시오). 어댑티브 스무스 기준을 사용하여 데이터 부분의 미세한 로컬 스케일을 캡처하려고 할 수 있습니다 응답이 빠르게 변하고 있습니다.

덧붙여서, 와에 fx = TRUE인수를 사용하여 부드러운 항에 의해 사용되는 고정 된 자유도 세트를 가진 모델을 R이 추정 할 수있게해야합니다 . 기본적으로 설정 k는 당신이 원하는 무엇을 할 수 와 단지 자유의 고정도 아닌 범 회귀 스플라인의 회귀 스플라인을 맞게됩니다.s()te()fx = TRUEgam()


자세한 답변에 대해 Gavin에게 대단히 감사합니다. 나는 적응 스무더를 완전히 놓쳤으며 시도해 볼 것입니다. 과적 합에 대한 우려를 이해했지만 지금까지 gam으로 수행 한 작업은 도메인 전문 지식을 통해 알려진 데이터의 기능을 보여주지 않았습니다.
대령 triq
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.