2016-05-24 21 views
1

Ich versuche, die Platzierung der Knoten aus einem GAM-Modell zu extrahieren, um meine Prädiktorvariablen in Kategorien für ein anderes Modell einzugrenzen. Meine Daten enthalten eine binäre Antwortvariable (verwendet) und einen kontinuierlichen Prädiktor (offen).mgcv: Knotenpositionen für `tp` glatt aus einem GAM-Modell extrahieren

data <- data.frame(Used = rep(c(1,0,0,0),1250), 
        Open = round(runif(5000,0,50), 0)) 

ich passen die GAM als solche:

mod <- gam(Used ~ s(Open), binomial, data = data) 

Ich kann die vorhergesagten Werte bekommen, und die Modellmatrix usw. entweder mit type=c("response", "lpmatrix") innerhalb der predict.gam Funktion aber ich aus bin kämpfen, um den Knoten zu extrahieren Orte, an denen sich die Koeffizienten ändern. Jeder Vorschlag wird wirklich geschätzt!

out<-as.data.frame(predict.gam(model1, newdata = newdat, type = "response")) 

Ich würde auch interessieren, wenn möglich, wie etwas zu tun:

http://www.fromthebottomoftheheap.net/2014/05/15/identifying-periods-of-change-with-gams/

, in dem die statistischen Zunahme/Abnahme des Splines identifiziert wird, aber ich bin mit einem GAMM nicht Dieser Punkt und somit Probleme bei der Identifizierung ähnlicher Modellmerkmale in GAM, die aus seinem GAMM-Modell extrahiert werden. Dieser zweite Gegenstand ist mehr aus Neugier als alles andere.

Antwort

0

Kommentare:

  1. Sie sollten Ihre Frage mit R und mgcv wenn gefragt haben markiert;
  2. Zuerst möchte ich Ihre Frage als Duplikat zu mgcv: how to extract knots, basis, coefficients and predictions for P-splines in adaptive smooth? gestern ausgelöst, und my answer sollte es ziemlich nützlich sein. Aber dann habe ich gemerkt, dass es tatsächlich einen Unterschied gibt. Also werde ich hier eine kurze Erklärung geben.

Antwort:

In Ihrem gam Aufruf:

mod <- gam(Used ~ s(Open), binomial, data = data) 

Sie nicht bs Argument in s() daher die Standard-Basis angegeben haben: bs = 'tp' verwendet wird.

'tp', kurz für Dünnblech-Regression Spline, ist keine glatte Klasse, die konventionelle Knoten hat. Thin Plate Spline hat Knoten: Es platziert Knoten genau an Datenpunkten. Zum Beispiel, wenn Sie n eindeutige Open Werte haben, dann hat es n Knoten. Im univariaten Fall ist dies nur ein glättender Spline.

Allerdings ist die dünne Platte Regression Spline eine Annäherung an den vollständigen Thin-Plate-Spline, die auf einer abgeschnittenen Eigenzerlegung basiert. Dies ist eine ähnliche Idee zu principal components analysis(PCA). Anstatt die ursprüngliche n Nummer der dünnen Platte Spline-Basis zu verwenden, verwendet es die ersten k Hauptkomponenten. Dies reduziert die Berechnungskomplexität von O(n^3) herunter auf O(nk^2), während eine optimale Rang-K-Approximation sichergestellt wird.

Als Ergebnis gibt es wirklich keine Knoten, die Sie für eine angepasste dünne Platte Regression Spline extrahieren können.

Da Sie mit univariaten Spline arbeiten, gibt es wirklich keine Notwendigkeit, für 'tp' gehen. Verwenden Sie einfach bs = 'cr', die c ubic r Egress Spline. Dies war der Standard in mgcv vor 2003, als tp verfügbar wurde. cr hat Knoten, und Sie können Knoten extrahieren, wie ich in my answer gezeigt habe. Verwechseln Sie nicht die bs = 'ad' in dieser Frage: P-Splines, B-Splines, natürliche kubische Splines, sind alle Knoten-basierte Splines.

+0

Danke für die Einsicht. Die eine Sache, die ich nach dem Versuch hinzufügen würde, ist, dass der Befehl für glatte $ Knoten, den Sie in der vorherigen Antwort demonstriert haben, glatt $ xp ist, wenn Sie die kubischen Regressions-Splines verwenden (bs = "cr"). Bezogen auf diese Frage ist der kubische Spline, der adaptive Smooth-Knoten, der den Standard von 40 Knotenpositionen verwendet, die gleichmäßig über den Bereich der Variablen verteilt sind, auf der Grundlage der Kreuzvalidierung die am besten passende Anzahl von Knoten (gleichmäßig) (in meinem Fall habe ich am Ende 9?). Danke noch einmal. –