2017-06-22 288 views
2

我剛完成使用mgcv程序包(我將稱這個模型爲gam1.5)來完成擬合GAM。我一直在玩vis.gam函數,我有一個問題,我一直無法解決。當使用vis.gam進行mgcv GAM時,將z軸值歸一化到[0,1]

我想標準化我的模型的擬合值,所以當我使用vis.gam時,z軸的限制爲[0,1]。

我的想法就是將正常化公式在我的GAM模型的$fitted.values如下:

gam1.5$fitted.values<-(gam1.5$fitted.values-min(gam1.5$fitted.values))/(max(gam1.5$fitted.values)-min(gam1.5$fitted.values)) 

然而,當我運行vis.gam,它不會改變z軸的規模。我想知道我是否將規範化公式應用於GAM對象內的不正確對象(與$fitted.values不同)。

回答

1

是的。因爲vis.gam基於predict.gam而您對$fitted.values的更改沒有任何影響!

實際上,您無法通過vis.gam實現目標。此功能僅生成一個繪圖,並且不會爲用戶返回任何內容,以便以後重現該繪圖(除非再次調用vis.gam)。這意味着,我們需要與predict.gam合作。這是基本步驟。

  • 設置2D網格/網格。您可能希望使用exclude.too.far過濾遠離訓練數據的數據,以避免可笑的樣條/多項式外推(如vis.gam一樣);
  • 構建一個新的數據框newdat(來自上面的網格)並且調用oo <- predict.gam(gam1.5, newdat, type = "terms")來獲得按照期望的預測。這是一個矩陣。您只需保留與想要繪製的2D平滑相關的列。假設該列存儲在向量z中;
  • 增強z填充爲矩陣NA對於那些太遠數據。
  • z標準化爲[0, 1]
  • 使用imagecontour自己生成圖。

理想情況下,我們應該舉一個例子(也許從?vis.gam),並通過上述步驟。然而,你回到我身邊說你很快就用predict.gam來解決問題。然後我不會添加示例。

+0

非常感謝您的回答!最後,我使用predict.gam創建了一個新的數據框,並對這個新數據框中的值進行規範化處理,然後按照您的建議使用wireframe()繪製一個3d表面。 – gfmg1992