为什么我的GAM适合似乎没有正确的意图? [R]

时间:2015-12-13 08:02:02

标签: r intercept gam

我的GAM曲线向下移动。拦截有什么问题吗?我使用与Introduction to statistical learning相同的代码...任何帮助都表示赞赏..

enter image description here

这是代码。我模拟了一些数据(带噪声的直线),并使用bootstrap多次拟合GAM。 (我花了一些时间来弄清楚如何在一个图表中绘制多个GAM拟合。感谢this post Sam的回答,以及this post

library(gam)

N = 1e2

set.seed(123)

dat = data.frame(x = 1:N,
                 y = seq(0, 5, length = N) + rnorm(N, mean = 0, sd = 2))
plot(dat$x, dat$y, xlim = c(1,100), ylim = c(-5,10))


gamFit = vector('list', 5)

for (ii in 1:5){

        ind = sample(1:N, N, replace = T)  #bootstrap
        gamFit[[ii]] = gam(y ~ s(x, 10), data = dat, subset = ind)

        par(new=T)

        plot(gamFit[[ii]], col = 'blue',
             xlim = c(1,100), ylim = c(-5,10),
             axes = F, xlab='', ylab='')
}

1 个答案:

答案 0 :(得分:2)

问题在于plot.gam。如果您查看帮助页面(?plot.gam),则会有一个名为scale的参数,其中指出:

  

每个地块的'y'限制所涵盖的单位数量的下限。默认值为scale = 0,在这种情况下,每个绘图使用绘制的函数范围来创建它们的ylim。通过将比例设置为所有图的diff(ylim)的最大值,则所有后续图将以相同的垂直单位生成。这对于比较拟合项在加性模型中的重要性至关重要。

这是一个问题,因为您没有使用被绘制函数的范围(即y的范围不是-5到10)。所以你需要做的就是改变

plot(gamFit[[ii]], col = 'blue',
     xlim = c(1,100), ylim = c(-5,10),
     axes = F, xlab='', ylab='')

plot(gamFit[[ii]], col = 'blue',
     scale = 15,
     axes = F, xlab='', ylab='')

你得到:

gam

或者您可以从xlim的两次调用中删除ylimplot个参数,并自动设置plot以使用全部数据让一切顺利。