Ich benutze GAM, um Zeittrends in einer logistischen Regression zu modellieren. Dennoch möchte ich den angepassten Spline daraus extrahieren, um ihn zu einem anderen Modell hinzuzufügen, das nicht in GAM oder GAMM eingebaut werden kann.
Ich habe also 2 Fragen:
Wie kann ich mit der Zeit einen Glätter einfügen, so dass ich einen Knoten zwinge, an einer bestimmten Stelle zu sein, während das Modell die anderen Knoten finden soll?
Wie kann ich die Matrix aus dem angepassten GAM extrahieren, sodass ich sie als Imput für ein anderes Modell verwenden kann?
Die Typen von Modellen, die ich ausführe, haben die folgende Form:
%Vor%Ich habe die umfangreiche Dokumentation für die GAM gelesen, bin mir aber noch nicht sicher. Jeder Vorschlag wird wirklich geschätzt.
In mgcv::gam
gibt es eine Möglichkeit, dies zu tun (Ihr Q2), über die predict.gam
-Methode und type = "lpmatrix"
.
?predict.gam
hat sogar ein Beispiel, das ich unten reproduziere:
Das durchläuft den gesamten Prozess sogar den Vorhersageschritt, der außerhalb von R oder des GAM-Modells erfolgen würde. Sie werden das Beispiel ein wenig ändern müssen, um das zu tun, was Sie wollen, da das Beispiel alle Begriffe im Modell auswertet und Sie neben dem Spline zwei weitere Begriffe haben - im Wesentlichen tun Sie dasselbe, aber nur für die Spline-Terme, die beinhaltet das Auffinden der relevanten Spalten und Zeilen der Xp
-Matrix für den Spline. Dann sollten Sie auch beachten, dass der Spline zentriert ist, so dass Sie das auch rückgängig machen können oder wollen.
Wählen Sie für Ihr Q1 geeignete Werte für den xn
Vektor / Matrix im Beispiel. Diese entsprechen Werten für den n
-Term im Modell. Setzen Sie also diejenigen, die Sie fixieren möchten, auf einen Mittelwert und variieren Sie dann die mit dem Spline verknüpfte.
Wenn Sie all dies in R tun, wäre es einfacher, den Spline nur an den Werten der Spline-Kovariate auszuwerten, für die Sie Daten haben, die in das andere Modell gehen. Sie tun dies, indem Sie einen Datenrahmen von Werten erstellen, bei denen vorherzusagen ist, und verwenden Sie dann
%Vor% Dabei ist mod
das angepasste GAM-Modell (über mgcv::gam
), newdat
ist der Datenrahmen, der für jede Variable im Modell eine Spalte enthält (einschließlich der Parameterbegriffe; legen Sie die Begriffe fest, die Sie nicht möchten) variieren zu einem konstanten Mittelwert [sagen Sie den Durchschnitt der Variablen in der Datei] oder bestimmte Ebene, wenn ein Faktor). Der type = "terms"
-Teil gibt eine Matrix für jede Zeile in newdat
mit dem "Beitrag" zum angepassten Wert für jeden Term im Modell zurück, einschließlich des Spline-Terms. Nimm einfach die Spalte dieser Matrix, die dem Spline entspricht - wieder zentriert.
Vielleicht habe ich dein Q1 falsch verstanden. Wenn Sie die Knoten steuern möchten, sehen Sie sich das knots
-Argument für mgcv::gam
an. Standardmäßig setzt mgcv::gam
einen Knoten an den äußersten Punkten der Daten und dann werden die verbleibenden "Knoten" gleichmäßig über das Intervall verteilt. mgcv::gam
findet die Knoten nicht - sie werden für Sie platziert und Sie können steuern, wohin sie sie über das Argument knots
setzen.