2016-07-28 10 views
1

は、単純なGAMは、以下のようにフィット考えてみましょう:mgcv:推定スムージングパラメータを返すには?

library(mgcv) 
my.gam <- gam(y~s(x), data=mydata) 
  1. が、私はそれを保存することができるように推定平滑化パラメータ(ラムダ)を返すようにとにかくありますか?私はlambdaが 'GCV score'として出力されることを知っていますが、返すための特定のコードが必要です。
  2. ラムダを希望の値に設定するにはどうすればよいですか?

答えて

1

まず、summary()はスムージングパラメータを返しません。 GCVスコアとスムージングパラメータが混在しています。これらの概念を理解していない場合は、現地の統計家に相談するか、Cross Validatedについて質問をしてください。スムージングパラメータを抽出して設定する方法を説明します。

library(mgcv) 
set.seed(2) 
dat <- gamSim(1, n=400, dist="normal", scale=2) 
b <- gam(y ~ s(x0) + s(x1) + s(x2) + s(x3), data=dat) 

あなたが得ることができます(内部)の平滑化パラメータから:

は例を考えてみましょう

b$sp 
#  s(x0)  s(x1)  s(x2)  s(x3) 
#3.648590e+00 3.850127e+00 1.252710e-02 4.986399e+10 

厳密に言えばこれはlambdaはありませんが、それは唯一の正のスケーリング係数によってlambda異なり。実際には、スムージングパラメータにはspを使用すれば十分です。あなたが負の値にspを設定した場合、私は、0注に、すべての平滑化パラメータを設定している

b1 <- gam(y ~ s(x0, sp = 0) + s(x1, sp = 0) + s(x2, sp = 0) + s(x3, sp = 0), 
      data = dat) 

は、mgcvはそれを無視して、自動操作を行います:あなたは、固定値に設定たとえば行いたい場合 - 選択はspです。


備考

あなたが本当にlambdaを取得したいいくつかの目的のためならば、実行します。

b$sp * unlist(lapply(b$smooth, "[[", "S.scale")) 
#  s(x0)  s(x1)  s(x2)  s(x3) 
#8.712849e+01 7.896376e+01 2.339330e-01 1.018779e+12 

しかし、mgcvlambdaを養うためにそれほど単純です。ですから、spで作業することをお勧めします。


フォローアップは、実際に私はちょうど私が概念を知っているのに、私は、GCVスコアとラムダとしていた何の間違いに気づきました。

Good!

はい、正確な値はlambdaなので、きちんとしたコードに感謝します。しかし、私は倍率についてもっと知りたいと思っています。パッケージのマニュアルに加えて、どこで詳細を読むことができますか?

?smoothConで読んでいる:smoothConのソースコードで

smoothCon(object,data,knots=NULL,absorb.cons=FALSE, 
      scale.penalty=TRUE,n=nrow(data),dataX=NULL, 
      null.space.penalty=FALSE,sparse.cons=0, 
      diagonal.penalty=FALSE,apply.by=TRUE,modCon=0) 

scale.penalty: should the penalty coefficient matrix be scaled to have 
      approximately the same 'size' as the inner product of the 
      terms model matrix with itself? ... 

を、ある:

if (scale.penalty && length(sm$S) > 0 && is.null(sm$no.rescale)) { 
    maXX <- norm(sm$X, type = "I")^2 
    for (i in 1:length(sm$S)) { 
     maS <- norm(sm$S[[i]])/maXX 
     sm$S[[i]] <- sm$S[[i]]/maS 
     sm$S.scale[i] <- maS 
    } 
} 

手短に言えば、モデル行列X生ペナルティマトリックスSため、話しますスケーリングファクタmaSは、

です。
+0

お返事ありがとうございました。実際に私はGCVスコアとラムダで間違っていたことに気がつきましたが、私はそのコンセプトを知っています。そして、はい、私はラムダの正確な値が必要なので、きちんとしたコードに感謝します。しかし、私は倍率についてもっと知りたいと思っています。パッケージのマニュアルに加えて、どこで詳細を読むことができますか? –

関連する問題