2015-12-13 45 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會使一切正常。