10

スムージング パラメーター (ラムダ) がスムージング スプラインをフィッティングするために非常に重要であることは知っていますが、合理的なラムダ (spar=?) を選択する方法に関する投稿はここでは見ませんでした。スパーは通常 0 から 1 の範囲であると言われました。 . Smooth.spline() を使用したときの経験を共有できますか? ありがとう。

    smooth.spline(x, y = NULL, w = NULL, df, spar = NULL,
          cv = FALSE, all.knots = FALSE, nknots = NULL,
          keep.data = TRUE, df.offset = 0, penalty = 1,
          control.spar = list(), tol = 1e-6 * IQR(x))
4

3 に答える 3

10

agstudy は、視覚的に選択する方法を提供しますspar。線形モデル クラスから学んだことを覚えていますが (正確ではありません)、クロス検証を使用して "best" を選択することsparです。以下は、agstudy から借用したおもちゃの例です。

x = seq(1:18)
y = c(1:3,5,4,7:3,2*(2:5),rep(10,4))
splineres <- function(spar){
  res <- rep(0, length(x))
  for (i in 1:length(x)){
    mod <- smooth.spline(x[-i], y[-i], spar = spar)
    res[i] <- predict(mod, x[i])$y - y[i]
  }
  return(sum(res^2))
}

spars <- seq(0, 1.5, by = 0.001)
ss <- rep(0, length(spars))
for (i in 1:length(spars)){
  ss[i] <- splineres(spars[i])
}
plot(spars, ss, 'l', xlab = 'spar', ylab = 'Cross Validation Residual Sum of Squares' , main = 'CV RSS vs Spar')
spars[which.min(ss)]
R > spars[which.min(ss)]
[1] 0.381

ここに画像の説明を入力

コードはきれいではありませんが、理解するのは簡単です。また、 in に指定するcv=Tと、次のようになりますsmooth.spline

R > xyspline <- smooth.spline(x, y, cv=T)
R > xyspline$spar
[1] 0.3881
于 2013-02-18T06:29:55.977 に答える
5

あなたの助けから、smooth.spline次のものがあります:

(\code{spar} の関数として) 使用される計算上の λ は、 λ = r * 256^(3*spar - 1) です。

spar は 1 よりも大きくなる可能性があります (ただし、多すぎるとは思いません)。このパラメータを変更して、異なるスパーの適合値をプロットすることでグラフィカルに選択できると思います。例えば:

spars <- seq(0.2,2,length.out=10)          ## I will choose between 10 values 
dat <- data.frame(
  spar= as.factor(rep(spars,each=18)),    ## spar to group data(to get different colors)
  x = seq(1:18),                          ## recycling here to repeat x and y 
  y = c(1:3,5,4,7:3,2*(2:5),rep(10,4)))
xyplot(y~x|spar,data =dat, type=c('p'), pch=19,groups=spar,
       panel =function(x,y,groups,...)
       {
          s2  <- smooth.spline(y,spar=spars[panel.number()])
          panel.lines(s2)
          panel.xyplot(x,y,groups,...)
       })

ここでは例として、スパー = 0.4で最良の結果が得られます。

ここに画像の説明を入力

于 2013-02-18T05:34:20.000 に答える
3

同じ x 値でポイントが重複していない場合は、GCV=TRUE を設定してみてください。Generalized Cross Validation (GCV) 手順は、ラムダ (スパン) の適切な値を選択する際に、非常に優れたスタブを選択する賢い方法です。GCV の優れた点の 1 つは、Simon Wood の本で強調されているように、1 つの取り残された点のすべてのセットに対して計算を行うという面倒な作業を実際に行う必要がないことです。詳細については、MGCVの Simon Wood の Web ページのメモを参照してください。

Adrian Bowman (sm) の r-package には、ラムダの値を選択するための単調な作業を行うことを特に意図した関数があります (ただし、基本パッケージ h.select()の関数と互換性があるかどうかは 100% 確信していません) 。smooth.spline()

于 2013-02-18T06:02:11.537 に答える