So stimmen Sie die Glättung im mgcv GAM-Modell


14

Ich versuche herauszufinden, wie die Glättungsparameter in einem mgcv: gam-Modell gesteuert werden.

Ich habe eine Binomialvariable, die ich hauptsächlich als Funktion der x- und y-Koordinaten auf einem festen Gitter modellieren möchte, sowie einige andere Variablen mit geringfügigeren Einflüssen. In der Vergangenheit habe ich ein einigermaßen gutes lokales Regressionsmodell unter Verwendung des Pakets locfit und nur der (x, y) -Werte erstellt.

Ich möchte jedoch versuchen, die anderen Variablen in das Modell einzubeziehen, und es sah so aus, als wären generalisierte additive Modelle (GAM) eine gute Möglichkeit. Nachdem ich mir die Pakete gam und mgcv angesehen hatte, die beide eine GAM-Funktion haben, entschied ich mich für Letzteres, da einige Kommentare in Mailinglisten-Threads dies zu empfehlen scheinen. Ein Nachteil ist, dass es nicht scheint, eine lokale Regression wie Löss oder locfit glatter zu unterstützen.

Zunächst wollte ich nur versuchen, das Locfit-Modell mit nur (x, y) Koordinaten zu replizieren. Ich habe es sowohl mit regulären als auch Tensor-Glättungen versucht:

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)

Zeichnet man jedoch die Vorhersagen aus dem Modell, so sind sie im Vergleich zum Locfit-Modell wesentlich geglätteter. Also habe ich versucht, das Modell so abzustimmen, dass es nicht so stark überglättet. Ich habe versucht, die Parameter sp und k anzupassen, aber mir ist nicht klar, wie sie sich auf die Glättung auswirken. In locfit steuert der Parameter nn die Spanne der verwendeten Nachbarschaft, wobei kleinere Werte eine geringere Glättung und ein stärkeres "Wackeln" ermöglichen. Auf diese Weise können einige Bereiche im Raster erfasst werden, in denen sich die Wahrscheinlichkeit der Binomialergebnisse schnell ändert. Wie würde ich vorgehen, um das Gam-Modell so einzurichten, dass es sich ähnlich verhält?

Antworten:


22

Das kArgument legt effektiv die Dimensionalität der Glättungsmatrix für jeden Term fest. gam()verwendet eine GCV- oder UBRE-Bewertung, um einen optimalen Grad an Glätte auszuwählen, kann jedoch nur innerhalb der Dimensionalität der Glättungsmatrix arbeiten. Standardmäßig haben te()Glättungen k = 5^2für 2D-Oberflächen. Ich vergesse, wofür es ist, s()also überprüfe die Dokumente. Der aktuelle Rat von Simon Wood, Autor von mgcv , lautet, dass Sie, wenn der vom Modell gewählte Grad der Glätte an oder nahe an der Grenze der durch den verwendeten Wert auferlegten Dimensionalität liegt, das Modell kerhöhen kund neu anpassen sollten , um festzustellen , ob a Ein komplexeres Modell wird aus der höherdimensionalen Glättungsmatrix ausgewählt.

Ich weiß jedoch nicht, wie locfit funktioniert, aber Sie müssen etwas haben, das Sie davon abhält, eine zu komplexe Oberfläche (GCV und UBRE oder (RE) ML) zu montieren, wenn Sie sie verwenden möchten [Sie können nicht wie Sie set scale = -1], versuche genau das zu tun), das von den Daten nicht unterstützt wird. Mit anderen Worten, Sie könnten sehr lokale Merkmale der Daten anpassen, aber passen Sie das Rauschen in die Stichprobe der von Ihnen gesammelten Daten ein oder passen Sie den Mittelwert der Wahrscheinlichkeitsverteilung an? gam() kann erzählen Sie etwas über das, was kann aus Ihren Daten geschätzt werden, unter der Annahme , dass Sie aus der Basis Dimensionalität sortiert haben ( siehe oben).

Zu beachten ist auch, dass die von Ihnen derzeit verwendeten Glättungen global sind, da die ausgewählte Glätte über den gesamten Bereich der Glättung angewendet wird. Adaptive Glätter können die zugewiesene Glättungszugabe in Teilen der Daten verwenden, in denen sich die Reaktion schnell ändert. gam()verfügt über Funktionen zur Verwendung adaptiver Smoothers.

Sehen ?smooth.termsund ?adaptive.smoothsehen, was sich damit montieren lässt gam(). te()kann die meisten, wenn nicht alle dieser Glätter kombinieren (prüfen Sie, welche Dokumente in Tensor-Produkten enthalten sein können und welche nicht), sodass Sie eine adaptiv glattere Basis verwenden können, um zu versuchen, die feinere lokale Skala in den Teilen der Daten zu erfassen, in denen die Antwort variiert schnell.

Ich sollte hinzufügen, dass Sie R dazu bringen können, ein Modell mit einer festen Menge von Freiheitsgraden zu schätzen, die von einem glatten Term verwendet werden, indem Sie das fx = TRUEArgument zu s()und verwenden te(). Grundsätzlich Satz k sein , was Sie wollen und fx = TRUEund gam()wird nur eine Regression Spline fester Freiheitsgrade passen nicht bestraft Regression Spline.


Vielen Dank, Gavin, für diese detaillierte Antwort. Ich habe die adaptiven Smoothers komplett verpasst und werde sie ausprobieren. Ich verstehe die Besorgnis über die Überanpassung, aber was ich bisher mit Gam gemacht habe, war, dass in den Daten keine Funktionen gezeigt wurden, von denen bekannt ist, dass sie durch Fachkenntnisse auf dem Gebiet vorhanden sind.
Colonel Triq
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.