2017-06-22 9 views
2

mgcvパッケージを使用してGAMをフィッティングしました(このモデルはgam1.5と呼ぶ)。私はvis.gam関数で遊んでいて、解決できなかった質問があります。mgcvにvis.gamを使用しているときにz軸の値を[0、1]に正規化GAM

vis.gamを使用した場合、z軸には[0、1]の制限があります。しかし

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に正規化式を適用することでした。 GAMオブジェクト内の不正オブジェクト($fitted.valuesとは異なるオブジェクト)に正規化式を適用しているかどうかは疑問でした。

答えて

1

はい。 vis.gampredict.gamに基づいており、$fitted.valuesに変更しても効果がありません。

実際、vis.gamで目標を達成することはできません。この関数は単純にプロットを生成し、後でプロットを再現するために何も返しません(vis.gamが再度呼び出されない限り)。つまり、predict.gamで作業する必要があります。基本的な手順は次のとおりです。

  • 2次元グリッド/メッシュを設定します。ばらばらのスプライン/多項式外挿を避けるために、exclude.too.farをトレーニングデータから遠くにフィルタリングすることができます(vis.gamのように)。
  • (上のグリッドからの)新しいデータフレームnewdatを作成し、用語の予測を得るためにoo <- predict.gam(gam1.5, newdat, type = "terms")を呼び出します。これは行列です。プロットする2Dスムースに関連付けられた列のみを保持する必要があります。この列がベクトルzに格納されているとします。
  • Augment zデータのためにNAにパディングしてマトリックスに入れます。
  • z[0, 1]に正規化します。
  • プロットを自分で作成するには、imageまたはcontourを使用します。

理想的には、(多分?vis.gamから)の例を取ると、上記の手順を介して動作する必要があります。しかし、あなたはすぐにpredict.gamを使って問題を分類したと言ってくれました。それから私はデモンストレーションのための例を追加しません。

+0

ありがとうございました。最後に、predict.gamを使用して新しいデータフレームを作成し、この新しいデータフレームの値を正規化し、後で提案したようにwireframe()を使用して3Dサーフェスをプロットしました。 – gfmg1992

関連する問題