2016-07-21 11 views
2

Mein aktuelles Problem erklärt ist die Varianz von den verschiedenen Variablen eines allgemeinen additiven Modell (GAM) mit R.GAM R Varianz durch variable

Ich folgte die Erklärung von Wood hier angegebenen erklärt zu berechnen: https://stat.ethz.ch/pipermail/r-help/2007-October/142743.html

Aber ich möchte es mit drei Variablen tun. Ich versuchte dies:

library(mgcv) 

set.seed(0) 
n<-400 
x1 <- runif(n, 0, 1) 
x2 <- runif(n, 0, 1) 
x3 <- runif(n, 0, 1) 

f1 <- function(x) exp(2 * x) - 3.75887 
f2 <- function(x) 0.2*x^11*(10*(1-x))^6+10*(10*x)^3*(1-x)^10 
f3 <- function(x) 0.008*x^2 - 1.8*x + 874 
f <- f1(x1) + f2(x2) + f3(x3) 
e <- rnorm(n, 0, 2) 
y <- f + e 

b <- gam(y ~ s(x1, k = 3)+s(x2, k = 3)+ s(x3, k = 3)) 
b3 <- gam(y ~ s(x1) + s(x2), sp = c(b$sp[1], b$sp[2])) 
b2 <- gam(y ~ s(x1) + s(x3), sp = c(b$sp[1], b$sp[3])) 
b1 <- gam(y ~ s(x2) + s(x3), sp = c(b$sp[2], b$sp[3])) 

b0 <- gam(y~1) 

(deviance(b1)-deviance(b))/deviance(b0) 
(deviance(b2)-deviance(b))/deviance(b0) 
(deviance(b3)-deviance(b))/deviance(b0) 

Aber ich verstehe nicht, Ergebnisse. Zum Beispiel hat das Modell mit nur x1 und x2 eine Abweichung, die kleiner als die Abweichung mit den drei erklärenden Variablen ist.

Ist die Methode, die ich verwendet habe, um die Varianz zu erklären, die durch die Variable mit drei Variablen erklärt wurde, korrekt?

Bedeutet dies, dass es im globalen Modell einen verwirrenden Effekt gibt? Oder gibt es eine andere Erklärung?

Vielen Dank.

Antwort

4

Sie etwas falsch gemacht habe hier:

b <- gam(y ~ s(x1, k = 3) + s(x2, k = 3) + s(x3, k = 3)) 
b3 <- gam(y ~ s(x1) + s(x2), sp = c(b$sp[1], b$sp[2])) 
b2 <- gam(y ~ s(x1) + s(x3), sp = c(b$sp[1], b$sp[3])) 
b1 <- gam(y ~ s(x2) + s(x3), sp = c(b$sp[2], b$sp[3])) 

Warum Sie k = 3 in der ersten Zeile gesetzt haben, obwohl sie nicht k = 3 für den Rest Einstellung? Ohne Angabe von k, s() wird der Standardwert k = 10 übernommen. Jetzt bekommen Sie ein Problem: b1, b2, b3 sind nicht verschachtelt in b.

In Simon Woods ursprünglichem Beispiel ließ er k unspezifiziert, so dass k=10 für alle s() genommen wird. In der Tat können Sie Werte von k variieren, aber Sie müssen garantieren, dass Sie immer die gleichen k für die gleiche Kovariate haben (um die Verschachtelung zu gewährleisten). Zum Beispiel können Sie tun:

b <- gam(y ~ s(x1, k = 4) + s(x2, k = 6) + s(x3, k = 3)) 
b3 <- gam(y ~ s(x1, k = 4) + s(x2, k = 6), sp = c(b$sp[1], b$sp[2])) ## droping s(x3) from b 
b2 <- gam(y ~ s(x1, k = 4) + s(x3, k = 3), sp = c(b$sp[1], b$sp[3])) ## droping s(x2) from b 
b1 <- gam(y ~ s(x2, k = 6) + s(x3, k = 3), sp = c(b$sp[2], b$sp[3])) ## droping s(x1) from b 

Dann lassen Sie uns tun:

(deviance(b1)-deviance(b))/deviance(b0) 
# [1] 0.2073421 
(deviance(b2)-deviance(b))/deviance(b0) 
# [1] 0.4323154 
(deviance(b3)-deviance(b))/deviance(b0) 
# [1] 0.02094997 

Die positiven Werte bedeuten, dass jedes Modell Begriff fallen die Devianz aufzublasen, was sinnvoll ist, als unser wahres Modell haben alle drei Begriffe .

+0

Danke für Ihre Antwort, –

+0

Danke für Ihre Antwort, ich stimme Ihnen zu. es hat immer noch etwas, was ich nicht verstehe. Warum muss ich k angeben (was ist der maximale Grad der Glättung), wenn es keine Glättungsoptimierung gibt? Aus meiner Sicht bedeutet die Angabe von "sp = ...", dass die Optimierung nicht notwendig ist und daher keine Notwendigkeit besteht, k zu setzen. –