R の平滑化関数の簡易紹介

R は幾つかのデータの平滑化関数を持つ。一部は時系列オブジェクトの 平滑化を行う。ここでは R の基本パッケージ stats 中の、特に散布図の平滑化を行う関数を紹介する。


核関数による平滑化

核関数を用いた平滑化

Nadaraya-Watson による核関数を用いた回帰平滑化を行う。

ksmooth(x, y, kernel = c("box", "normal"), bandwidth = 0.5,
        range.x = range(x), n.points = max(100, length(x)), x.points)

多項式の局所的当てはめによる平滑化

散布図平滑化

LOWESS 平滑化による計算を実行する。 lowess89 は平滑結果の座標である x と y を成分に持つリストを 返す。平滑結果は lines() 関数で元の散布図プロットに描き加えることができる。

lowess(x, y = NULL, f = 2/3, iter=3, delta = 0.01 * diff(range(xy$x[o])))

散布図と Loess 平滑化曲線の同時プロット

散布図を描き、それに Loess による平滑化曲線を上描きする。

scatter.smooth(x, y, span = 2/3, degree = 1,
    family = c("symmetric", "gaussian"),
    xlab = deparse(substitute(x)), ylab = deparse(substitute(y)),
    ylim = range(y, prediction$y), evaluation = 50, ...)
loess.smooth(x, y, span = 2/3, degree = 1,
    family = c("symmetric", "gaussian"), evaluation = 50, ...)

スプライン関数当てはめによる平滑化

スプライン関数当てはめによる予測

スプライン関数当てはめによる新しい点での予測を行う。 予測は元のデータ範囲外では直線になる。

##  クラス "smooth.spline" に対する S3 メソッド
predict(object, x, deriv = 0, ...)

スプライン関数による平滑化

与えられたデータに3次の平滑化スプライン関数を当てはめる。

smooth.spline(x, y = NULL, w = NULL, df, spar = NULL,
              cv = FALSE, all.knots = FALSE, nknots = NULL,
              df.offset = 0, penalty = 1, control.spar = list())

散布図と Loess 平滑化曲線の同時プロット

散布図を描き、それに Loess による平滑化曲線を上描きする。

scatter.smooth(x, y, span = 2/3, degree = 1,
    family = c("symmetric", "gaussian"),
    xlab = deparse(substitute(x)), ylab = deparse(substitute(y)),
    ylim = range(y, prediction$y), evaluation = 50, ...)
loess.smooth(x, y, span = 2/3, degree = 1,
    family = c("symmetric", "gaussian"), evaluation = 50, ...)

移動直線平滑化、Friedman の supersmoother 法

Friedman の SuperSmoother

Friedman の「super smoother」を用いて (x,y) 値を 平滑化する。

supsmu(x, y, wt, span = "cv", periodic = FALSE, bass = 0)

移動中央値による平滑化

移動中央値平滑化

奇数スパンの移動中央値(running median)を計算する。 これは考えられる限り「最も頑健」な散布図平滑化である。効率化(そして歴史的理由から)、 同じ結果を与える二つの方法を選ぶことができる。

runmed(x, k, endrule = c("median","keep","constant"),
       algorithm = NULL, print.level = 0)

Tukey の移動中央値平滑化

Tukey の移動中央値平滑化(runnning median)を行う。

smooth(x, kind = c("3RS3R", "3RSS", "3RSR", "3R", "3", "S"),
       twiceit = FALSE,
       endrule = "Tukey", do.ends = FALSE)

移動中央値に対する端点平滑化

最端点で順次小さくなる中央値と Tukey の端点規則を使用し、 ベクトル y の端点を平滑化する。

smoothEnds(y, k = 3)

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-03-25 (土) 11:19:16