2015-12-13 3 views
1

Мои кривые GAM смещаются вниз. Что-то не так с перехватом? Я использую тот же код, Introduction to statistical learning ... Любая помощь ценится ..Почему мой GAM подходит, кажется, не правильно? [R]

enter image description here

Вот код. Я смоделировал некоторые данные (прямая линия с шумом) и многократно подходил к 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

У меня точно нет ответа, но если вы удалите 'xlim' и' ylim' из обоих вызовов в 'plot', проблема исчезнет. Тем не менее, все еще пытаюсь выяснить, что такое точная проблема. –

ответ

2

вопрос с plot.gam. Если вы посмотрите на странице справки (?plot.gam), есть параметр, называемый scale, в котором говорится:

нижний предел для числа единиц, подпадающих под ограничением на «у» для каждого участка. По умолчанию используется шкала = 0, и в этом случае каждый график использует диапазон построенных функций для создания своего илим. Установив масштаб как максимальное значение 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 и ylim параметров от обоих вызовов в plot и автоматической настройкой plot, чтобы использовать весь диапазон да ta заставит все работать.