【问题标题】:GAM R variance explained by variableGAM R 方差由变量解释
【发布时间】:2016-07-21 23:54:41
【问题描述】:

我目前的问题是用 R 计算由通用加法模型 (GAM) 的不同变量解释的方差。

我遵循了 Wood 在这里给出的解释: https://stat.ethz.ch/pipermail/r-help/2007-October/142743.html

但我想用三个变量来做。 我试过这个:

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)

但我不明白结果。例如,只有 x1 和 x2 的模型的偏差小于具有三个解释变量的偏差。

我用三个变量来提取变量解释的方差的方法是否正确?

这是否意味着全局模型中存在混杂效应?还是有其他解释?

非常感谢。

【问题讨论】:

    标签: r variance gam mgcv


    【解决方案1】:

    你在这里做错了:

    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]))
    

    为什么你在第一行设置了k = 3,而其余的没有设置k = 3?如果不指定ks() 将采用默认值k = 10。现在你遇到了一个问题:b1b2b3 没有嵌套在 b 中。

    在 Simon Wood 的原始示例中,他未指定 k,因此所有 s() 均采用 k=10。事实上,您可以改变k 的值,但您必须保证对于相同的协变量,您始终拥有相同的k(以确保嵌套)。例如,您可以这样做:

    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
    

    那就开始吧:

    (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
    

    正值意味着删除任何模型项都会扩大偏差,这是明智的,因为我们的真实模型具有所有三个项。

    【讨论】:

    • 感谢您的回答,
    • 感谢您的回答,我同意您的看法。它仍然有一些我不明白的东西。如果没有平滑优化,为什么我需要指定 k(最大平滑度)?在我看来,指定“sp = ...”意味着不需要优化,因此不需要设置 k。
    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2018-08-19
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多