GAMのノットの選択


9

GAMに適切な数のノットを選択する場合、データの数とx軸の増分を考慮に入れることができます。

x軸に100の増分があり、各増分に1000のデータポイントがある場合はどうなるでしょうか。

ここの情報言う:

それらが指定されていない場合、スプラインのノットは、用語が参照する共変量値全体に均等に配置されます。たとえば、101データをxの11ノットスプラインでフィッティングすると、10番目ごとにノットが存在します(順序付け) x値。

この例では、基本的な開始は9ノットである必要がありますか?非常に小さな数から非常に大きな数までフィッティングできるため、このデータセットにどのノットの範囲が適しているかはわかりません。

set.seed(1)
dat <- data.frame(y = rnorm(10000), x = 100)

library(ggplot)
ggplot(dat, aes(x = x, y = y)) + 
              geom_point(size= 0.5) +                      
stat_smooth(method = "gam", 
            formula = y ~ s(x, bs = "cs"),k=9, col = "black")

k = 25が有用な適合を提供した場合、このデータに妥当でしょうか?

回答:


12

はるかに優れたオプションは、一般化交差検証(GCV)と呼ばれるメソッドを含むmgcvパッケージのgam()を使用してモデルを適合させることです。GCVはモデルのノットの数を自動的に選択するので、単純さと説明力のバランスが取れています。mgcvでgam()を使用する場合は、kを-1に設定してGCVをオンにします。

ちょうどこのような:

set.seed(1)
dat <- data.frame(y = rnorm(10000), x = rnorm(10000))

library(mgcv)
G1 <- gam(y ~ s(x, k = -1, bs = "cs"), data = dat)
summary(G1) # check the significance of your smooth term
gam.check(G1) # inspect your residuals to evaluate if the degree of smoothing is good

滑らかなラインをプロットするには、モデルフィットを抽出する必要があります。これでうまくいくはずです:

plot(y~x, data = dat, cex = .1)
G1pred <- predict(G1)
I1 <- order(dat$y)
lines(dat$x, G1pred)

また、kを手動で調整して、GCVによって自動的に設定されたk値に最も近いkの数を確認することもできます。


bs = "cs"スプラインの用語は何をしますか?
user321627

1
"cs"は、平滑化の基準が3次スプラインであることを指定します。
マヌエル・ビッケル

指定kすることは指定することと同等ではありませんk=-1か?
Nakx

Nakxを完全に理解していることはわかりませんが、k = -1を使用すると、一般化交差検証を使用してモデルがノードの最適な数を決定できることを明確にします。手動で調整すると、ノードの数に基づいてモデルがどのように変化するかを比較できます。これは洞察に富み、興味のある現象を描写するのに役立ちます。
Ira S

+1正解です。スプラインがどうなるかをどのように視覚化しますか?つまり、係数のグラフ?
Erosennin

5

そのGCVからのアイデアはどこで自動的にノットの数を選択しますか?ノットの数(つまり、基本次元)は固定されており、モデルのフィット中に変更することはできません。関数gam()のGCVスコアが「自動的に」実行しているのは、Ira Sが言うように基底次元kを選択するのではなく、最小化またはフィッティング目標にウィギネスペナルティを導入することによって各基底スプラインの滑らかなレベルを選択しています。ノットkの数を選択するには、予想される自由度の数より大きい値を使用する必要があります。choose.kのヘルプを引用する:「kの正確な選択は一般的に重要ではありません。根本的な「真理」を適切に表すのに十分な自由度があることを合理的に確信できる十分に大きいが、十分に小さい値を選択する必要があります。合理的な計算効率を維持するため」したがって、たとえばプロットに変化が見られなくなるまで、基本的にkを大きなステップで増やします。要約:Ira Sが言っているように、kには「自動」選択のようなものは何もありません。ユーザーはモデル設計の一部として常に k値を選択します。それ以外の場合は、おそらくモデルの適合が不十分です!


もう一つの明確化の質問です。パッケージmgcvビネットファイルでは、kは、smoothが関数である変数の基底の次元です。3次回帰スプラインであるbs = "cr"を使用する場合、基底の次元は3だと思いました。つまり、bs = "cr"の場合、k = 3でしたが、間違っていましたか?
vtshen

ほぼ正しいですが、完全ではありません。スプラインが単一の3次多項式で構成される場合、あなたが言うことは真実です。これは、スプラインの特殊なケースにすぎません。スプラインは、一連の連結された多項式(通常は複数)です。平滑化スプラインの作成に使用される基本スプラインは、ノットに結合する多くの多項式で構成され、ノットが多いほど、自由度が高くなります。そのため、kは本質的にノットの数に関連します。詳細は、Simon Woodsの本に記載されています。
nukimov
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.