スプラインは、おそらく複雑で非線形の関数形式をモデル化するための回帰モデリングで使用されます。スプライン平滑化トレンドは、各ブレークポイントまたはノットでリーディング係数が変化する区分的連続多項式で構成されます。スプラインは、トレンドの多項式次数とブレークポイントで指定できます。共変量のスプライン表現は、観測値の単一のベクトルを、多項式次数とノットの数を加えた次元の行列に拡張します。
周期スプラインのバージョンは、単に任意の回帰の周期的バージョンである:データは期間の長さの複製に切断されます。したがって、たとえば、ラットでの複数日実験の日内傾向をモデル化するには、実験の時間を24時間単位で記録する必要があるため、154時間目は24を法とする10の値(154 = 6 * 24 + 10)になります。カットデータに線形回帰を当てはめると、トレンドのノコギリ波が推定されます。期間のどこかにステップ関数を当てはめると、系列に当てはまる方形波になります。スプラインは、はるかに洗練されたウェーブレットを表現できます。価値があるのは、splines
パッケージ内に、periodicSpline
まさにこれを行う関数があります。
Rのデフォルトのスプライン "bs"実装が解釈に役立つとは思いません。だから私は下に自分のスクリプトを書いた。ノットを持つ次数スプラインの場合、この表現は最初の列に標準の多項式表現を与え、番目の列()はここで、はノットの実際のベクトルです。pんkpp + iI ≤ n個kSp + i= (X− k私)p私(X< k私)k
myspline <- function(x, degree, knots) {
knots <- sort(knots)
val <- cbind(x, outer(x, knots, `-`))
val[val < 0] <- 0
val <- val^degree
if(degree > 1)
val <- cbind(outer(x, 1:{degree-1}, `^`), val)
colnames(val) <- c(
paste0('spline', 1:{degree-1}, '.1'),
paste0('spline', degree, '.', seq(length(knots)+1))
)
val
}
少しのケーススタディでは、次のように0から(または)のドメインで正弦波の傾向を補間します。2個のπτ
x <- seq(0, 2*pi, by=pi/2^8)
y <- sin(x)
plot(x,y, type='l')
s <- myspline(x, 2, pi)
fit <- lm(y ~ s)
yhat <- predict(fit)
lines(x,yhat)
あなたはそれらがかなり調和しているのを見るでしょう。さらに、命名規則により解釈が可能になります。回帰出力には、次のように表示されます。
> summary(fit)
Call:
lm(formula = y ~ s)
Residuals:
Min 1Q Median 3Q Max
-0.04564 -0.02050 0.00000 0.02050 0.04564
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.033116 0.003978 -8.326 7.78e-16 ***
sspline1.1 1.268812 0.004456 284.721 < 2e-16 ***
sspline2.1 -0.400520 0.001031 -388.463 < 2e-16 ***
sspline2.2 0.801040 0.001931 414.878 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 0.02422 on 509 degrees of freedom
Multiple R-squared: 0.9988, Adjusted R-squared: 0.9988
F-statistic: 1.453e+05 on 3 and 509 DF, p-value: < 2.2e-16
私のスプライン1.1度の最初の共変量セットは、最初のブレークポイントの背後にある最初のドメインの多項式トレンドです。線形項は、原点での接線の勾配X = 0です。これはほぼ1であり、正弦曲線の導関数(cos(0)= 1)によって示されますが、これらは近似であり、2次トレンドを外挿するエラーは外れやすいことに注意してくださいエラーに。2次項は、負の凹型形状を示します。spline2.2項は、最初の2次勾配との差を示し、0.4の正のリーディング係数になり、上に凸の形状を示します。これで、スプライン出力の解釈が可能になり、それに応じて推論と推定を判断できるようになりました。π/ 2
手元にあるデータの周期性を知っていると仮定します。データに成長または移動平均コンポーネントがない場合、長い時系列を1期間の短い系列の複製に変換できます。これで複製が作成され、データ分析を使用して再発傾向を推定できます。
次のややノイズのある、非常に長い時系列を生成するとします。
x <- seq(1, 100, by=0.01)
y <- sin(x) + rnorm(length(x), 0, 10)
xp <- x %% (2*pi)
s <- myspline(xp, degree=2, knots=pi)
lm(y ~ s)
結果の出力は、妥当なパフォーマンスを示しています。
> summary(fit)
Call:
lm(formula = y ~ s)
Residuals:
Min 1Q Median 3Q Max
-39.585 -6.736 0.013 6.750 37.389
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) -0.48266 0.38155 -1.265 0.205894
sspline1.1 1.52798 0.42237 3.618 0.000299 ***
sspline2.1 -0.44380 0.09725 -4.564 5.09e-06 ***
sspline2.2 0.76553 0.18198 4.207 2.61e-05 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 9.949 on 9897 degrees of freedom
Multiple R-squared: 0.006406, Adjusted R-squared: 0.006105
F-statistic: 21.27 on 3 and 9897 DF, p-value: 9.959e-14