我的GAM曲线向下移动。拦截有什么问题吗?我使用与Introduction to statistical learning
相同的代码...任何帮助都表示赞赏..
这是代码。我模拟了一些数据(带噪声的直线),并使用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='')
}
答案 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='')
你得到:
或者您可以从xlim
的两次调用中删除ylim
和plot
个参数,并自动设置plot
以使用全部数据让一切顺利。