2015-12-13 34 views
1

我的GAM曲线正在向下移动。拦截有什么问题吗?我使用相同的代码Introduction to statistical learning ...任何帮助的感激..为什么我的GAM适合似乎没有正确的概念? [R]

enter image description here

下面的代码。我模拟了一些数据(有噪声的直线),并使用bootstrap多次适应GAM。 (我花了一段时间来弄清楚如何绘制多个GAM在一个图表。由于this post萨姆的回答千篇一律,和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='') 
} 
+0

我没有准确的答案,但是如果从两次调用'plot'中删除'xlim'和'ylim',那么问题就会消失。然而,仍然试图找出确切的问题是什么。 –

回答

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

或者,你可以从两个呼叫删除xlimylim参数plot,并自动设置为plot使用全系列的da ta会使一切正常。