A review of spline function procedures in R

「スプライン」という言葉は、職人の道具で、木や金属の柔軟な薄い帯で、滑らかな曲線を描くのに使われたものを指します。 いくつかの重りをいろいろな位置につけて、その数と位置に応じて帯が曲がるようにする。 これを、金属のピンや船の肋骨などの定点に押し当てて通過させる。 平らな面では、フック付きの錘(おもり)であることが多いので、簡単に操作することができる。 曲げられた材料の形状は、当然スプライン曲線になる。 統計学でも同様に、柔軟な形状を数学的に再現するためにスプラインが使われる。 データ範囲内の数カ所に「結び目」を設け、隣り合う機能部品が結合している箇所を特定する。 金属や木の縞模様ではなく、滑らかな関数片(通常は低次の多項式)が選ばれ、連続する2つの結び目の間でデータに適合させる。 多項式の種類とノットの数と配置が、次にスプラインの種類を定義するものである。

Motivating example 1986年の一般化加法モデル(GAM)の導入により、スプラインモデリングの使用は統計回帰分析で確立されたツールとなった。 これを説明するために、西アフリカの3つの村で収集された50歳未満の女性892人のデータ(データはAdditional file 1: Appendixで入手可能)を考える。 年齢と体脂肪の粗い指標である上腕三頭筋の皮下脂肪厚との関係を調べたい。 図1は、年齢と上腕三頭筋皮下脂肪厚の関係を対数スケールで測定したものである。 データの詳細については、.

Fig. 1

西アフリカの女性892人の年齢と上腕三頭筋皮厚のプロットをご覧下さい 。 破線は単純な線形フィット、実線は柔軟な3次多項式を用いたフィット

関係が線形ではないことは明らかなので、yi=β0+β1xi+ε、i=1、…、n、の形の単純回帰モデルは、観察パターンの近似をほとんど与えないだろう。 このモデルは、いくつかの多項式を用いて非線形効果に対応するように拡張することができる。 そして、非線形効果は、次式で与えられる次数3の多項式によってモデル化することができる。

$$ y_{i}=alpha_{0}+alpha_{1} u_{i}+alpha_{2} u_{i}^{2}+alpha_{3} u_{i}^{3}+epsilon $$
(1)

ここでuは基底関数と呼ぶxの関数で、次式のように定義する。

$$U=↵left $$

式1の回帰モデルは、予測変数の非線形関数を与えているにもかかわらず、依然として線形モデルであることが分かる。 このモデルは係数がまだ線形であり、通常の最小二乗法を使用して適合させることができます。 基底は、Rで関数 poly(x,3) を使って、入力 x(変数を指す)、p(多項式の次数を指す)を使って作成することができます。 これは,次の形式の単純な一変量平滑モデルをもたらします: yi=f(xi)+ε ここで,f()は予測変数の何らかの関数/変換です. このようなモデルは,Rで lm(y ∼poly(x,3)) を用いて簡単に適合させることができる. 多項式回帰は単純であるにもかかわらず,いくつかの欠点があり,最も重要なのは非局所性である. つまり、与えられた値x0における適合関数は、その点から遠く離れたデータ値に依存する。 あるデータセットに多項式を当てはめ、右端付近のデータ点の1つを上下に動かすと、この現象が簡単にわかる。

グローバルな多項式をフィットさせる代わりに、xの範囲をより小さな区間に分割し、任意の数と位置のポイント、τ(ノットとも呼ばれる)を利用することを考えてみてください。 f1(x)=1,f2(x)=x,f3(x)=(x-τ1)+,f4(x)=(x-τ2)+,…, “+” と定義した関数で、単純な区分連続モデルを当てはめることができる。

$$u_{+}=left{ \begin{array}{cc} u, & \text{if}, u>0} 0, & \text{if}, uleq 0 \୧⃛(๑⃙⃘◡̈๑⃙⃘)

これらの関数の集合は合成関数f(x)を導く。

Definition of splines

製図用金属スプラインは任意の形状、例えば飛行機の翼の断面や遠心ポンプの螺旋を仮定することができます。 統計的なアプリケーションでは、f(X) の形の曲線、すなわち、各 x に対して単一の y 値を仮定します。 ここでは、ほぼ一変量関数で、且つ、 \in ゙mathbb {R} ゙ であることを前提とする。 スプラインf(X)は後述する微分可能性を満たす滑らかな関数で、次数dの多項式となる。 しかし、統計的スプラインはそうではない。 むしろ我々は、d以下の次数の導関数はすべて連続であるという滑らかさの基準を課しています。 物理的なスプラインは最後の結び目から先は線形であり、さらに2次以上の導関数が左端と右端の結び目でゼロであるという制約を課すことができる。この追加制約を持つスプラインは「制限付き」または「自然」スプラインとして知られている。 より柔軟な曲線を得るために、結び目の数や多項式の次数を増やすことができる。 しかし、ノットの数を増やすと、データに過剰にフィットして分散が大きくなり、ノットの数を減らすと、より偏りのある硬い制限的な関数になってしまうというトレードオフがある。

基底関数による表現

未知関数fが固定ノット列、固定次数dのスプライン関数で表されるとする。後者はベクトル空間Vを形成するので、fを

$$ f(X)=THERISUM LIMITS_{k=1}^{K+d+1} BETA_{k} と書けば良い。 B_{k} (X) \,, $$
(2)

ここで、BkはVを定義する基底関数の集合、βkは関連するスプライン係数である。 k個のノットでは次数dの多項式がk+1個、制約がd*k個あり、(d+1)(k+1)-d*k=d+k+1の自由パラメータとなり、自然スプラインではk個の自由パラメータとなります。 任意の非特異行列Aに対してβB=(βA)(A-1B)=γB*なので、スプラインフィットの基底セットは無限にありえます。 具体的には、(2)の式は係数ベクトルβ=(β1,…,βK+d+1)に対して線形である。 したがって、fの推定は、変換された変数B1(X),…,BK+d+1(X)において線形である最適化問題とみなすことができ、広範囲の(一般化)多変量回帰モデルにおけるスプラインの使用に関する確立した推定技術を使用できるようにする。 重要なことは、スプラインモデリングは関数f()の推定を実数値の係数の小さなセットの推定に減らすことである。

様々な著者によって指摘されているように(例えば、スプラインモデリングの高い柔軟性は、多くの調整パラメータの代償としてもたらされる。 これらのうち2つ、基底関数Bの選択と基礎となる多項式の次数dはほとんど影響を及ぼさないことが判明している。 実際、スプラインフィットは次数dに対して驚くほど頑健です。人間の目には完全に滑らかに見える曲線が得られるため、3次多項式(d=3)が通常の標準となっています。 フィットした曲線の導関数に興味がある場合は、より高い次数が適切な場合もありますが、一般にd>3のフィットは事実上区別がつきません。 d=1またはd=2でのフィットはほぼ同じ統計的特性を持つが、よりギザギザしているように見える。

2つの重要な選択は、ノットの数と間隔、そしてペナルティ関数、例えばスプラインの2階微分の積分を使用するかしないかである。 ペナルティがない場合、変換された変数の作成は個別に行うことができ、新しい変数は単に標準的なモデルの適合に含まれるだけで、基本的な回帰手順を変更する必要はありません。 この方法は、回帰スプラインと呼ばれることが多く、得られる非線形関数の柔軟性は、完全にノットの数の関数である。 一方、平滑化ペナルティを含めると、それに対応するためにフィットルーチンを修正する必要がある。 これは、各回帰関数に個別に含まれなければならない。

様々なスプラインアプローチの数学的特性を探るためにかなりの研究が行われているが(参照)、応用統計学者やデータ分析者は、実際のアプリケーションでスプラインモデリングを使うときに、これらの結果をほとんど意識していないようである。 実際、我々のウェブ検索で特定された論文の多くには、使用されるスプライン手法の選択の根拠について正当化がなされていない。

Popular spline basis

基底関数Bkの定義については多くの選択肢があり、様々なスプライン基底はその数値的特性に関して異なっている。 本節では、最もポピュラーなスプライン基底、すなわち、切断された冪級数基底、Bスプライン基底、カーディナルスプライン基底を紹介する。

切断された冪級数とキュービックスプライン

切断された冪級数基底は基底関数

$$B_{1}(x)= 1, B_{2}(x)= x,…., B_{d+1}(x) = x^{d}, $$5637>
$$B_{d+2}(x) = (x- \tau_{1})_{+}^{d},…, B_{K+d+1} = (x – attenuated_{k})_{+}^{d} $$ 5637>

上の基底関数がもたらす利点はその解釈が簡単なことである。 (式の1行目)で定義された次数dの「基本」多項式から始めて、基本多項式からの偏差をK個のノットのそれぞれの右側のスプライン関数に順次追加していく(2行目)。 切り捨てられたパワーベーススプラインは結び目でd-1倍微分可能であり、d+K個の自由度を持つ。 x が , の観測値を表すとすると、Additional file 1: Appendix の Code 1 を用いて、x の範囲に等間隔に5つのノットを持つ次数 d=3 の切断されたべき乗基底を作成することができる(Fig.2)。

Fig. 2

等距離5ノット(K=5)の3次(d=3)の切り捨て多項式のスプライン基底関数。) プロットはAdditional file 1: Appendix

Truncated power seriesの特徴は、関数のサポートがローカルではなく、いくつかのBkがデータの全範囲にわたって定義されていることである 。 このため、いくつかの基底スプラインの間に高い相関が生じ、スプライン推定における数値的不安定性を示唆する。 truncated power series basisについては、5章に例が示されている。

キュービックスプラインは、連続する2つのノット間の区間で3次多項式を使用して作成される。

3次スプライン関数は、3つの結び目(τ1,τ2,τ3)を持つ場合、7自由度を持つことになります。 式2で示される表現を用いると、この関数は次のように書くことができる。

$$ f(X)= \beta_{0} + \beta_{1} X + \beta_{2} X^{2} + \beta_{3} X^{3} + \beta_{4} (X-tau_{1})^{3} + \beta_{5} (X-tau_{2})^{3} + \beta_{6} (X-tau_{3})^{3} $$

B-splines

B-spline basisはよく使われるスプライン基底で、3次スプラインの特別なパラメータ化に基づいています。 B-スプライン基底は、結び目列

$$begin{aligned} に基づいています。 \ЪЪЪ \ʕ-̫͡-ʔʔ \♪♪~ < \xi_{d+2}. < \xi_{d + K + 1}。 = τ1,…,ξd+K+1:=τK および ξd+K+2:=b をそれぞれ inner knots および boundary knots と呼ぶ。 追加の結び目ξ1,…,ξdとξd+K+3,…,ξ2d+K+2の選択は基本的に任意である。 一般的な方法は、それらを境界ノットと等しくすることである。 あるいは、内側の結び目と境界の結び目ξd+1<…<ξd+K+2が等距離になるように選ぶと、即ち ξk+1-ξk=δ∀k∈{d+1-δ,…,d+K+1}, 境界ノットはξd+K+2+δ,…,ξd+K+2+d-δに配置することができる。

d>0において次数dのBスプライン基底関数( \(B_{k}^{d}(x)\ で示す)は再帰式Footnote 1

$$ \begin{aligned} で定義できる。} B_{k}^{d}(x)&=\frac{x-\xi_{k}}{\xi_{k+d}-\xi_{k}}B_{k}^{d-1}(x)-\frac{\xi_{k+d+1}-x}{\xi_{k+d+1}-\xi_{k+1}}B_{k+1}^{d-1}(x),\\k &= 1,….,K+d+1, \end{aligned} $$

where

$$B_{k}^{0}(x)=THERELEFT{ \begin{array}{cc} 1, & \xi_{k}}. \leq x < \xi_{k+1} 0, & \text{else}. \end{array} \ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ $$

and ξk=ξk+1 ならば \(B_{k}^{0}(x) \equiv 0) となります。 B-splineは基底関数が局所支持を持つという利点があります。 具体的には、d+2個のノットで区切られた区間では0より大きく、それ以外の区間では0である。 この性質は高い数値安定性をもたらし、また基底関数の構築のための効率的なアルゴリズムにもなる。

Natural cubic and cardinal splines

cubicやBスプラインなどの多項式スプラインは、データの境界で不安定になることがある。 この問題に対処するため、ナチュラルスプラインは、境界ノットのテールにおいて線形であるという追加の制約を持つ3次スプラインである(-∞,a]、第4章)

切り捨てられた冪級数ナチュラルスプライン、Bスプライン、カーディナルスプライン基底に加えて、他の様々な-あまり知られていない-基底が存在する。 概要については、

ペナルティ付きスプライン

これまで紹介したスプラインは、しばしば回帰スプラインと呼ばれる。 スプラインの基底(B-spline, truncated power seriesなど)の選択に加えて、ノットの数、ノット位置の選択が必要である。 明らかに、これらの調整パラメータは、スプライン関数の推定形状に重要な影響を与える可能性があります。 ノット数が多いほど柔軟性が高いが、データをオーバーフィットさせてしまう可能性もある。 逆に、ノットの数が少ないと、アンダーフィットバイアスになりやすい「オーバースムーズ」な推定になることがある(参照)。

スプラインモデリングでノット位置の選択を容易にする一般的なアプローチは、ペナルティ付きスプラインを使うことである。 i.i.d.が与えられると データのサンプル(x1,y1),….(xn,yn), a penalized spline is the solution to the problem

$$hat{beta} = \text{argmax}_{beta} \left,, $$

where lβ is log-likelihood (or., log-light)を表します。 はスプライン関数が「滑らか」である場合に小さくなる粗さのペナルティです。 一般にペナルティ付きスプラインは、未知関数fをノット数の多いスプラインでモデル化するという考え方に基づいており、高い柔軟性を持たせることができます。 一方、lβの値が大きく、データ値に近い粗いスプラインの推定値は、Jβの値が大きくなる。 この関数の最大化は、チューニングパラメータλ≧0による滑らかさとモデル適合度のトレードオフを意味する。

特殊なケースとして、ガウス回帰におけるペナルティ付き最小二乗問題

$$ \hat{atibeta} = \text{argmin}_{atibeta} \left $
(3)

が挙げられる。 というペナルティがあります。 \Ίταμμα ταμμα ταμμα ταμμα ταμμα ταμμα \λが与えられた場合、解は結び目 x(1)<…<x(n) の自然立方スプラインであることが示されます。 すなわち、結び目の位置は選択する必要がなく、Xの順序付けられたユニークなデータ値によって「自然に」与えられるのである。 注意すべきは、λ=0のとき、平滑化スプラインはデータを補間し、λ=∞のときは線形関数を意味することが示されることです。 平滑化スプラインは、より一般的なクラスである薄板スプラインの特別なケースであり、式(3)の基準をより高次元のxiに拡張することができることに注意してください(詳細は、[ 4.15 ]を参照)

平滑化スプラインの便利な特性は、ペナルティJββが適切に定義したペナルティ行列Ωを用いてβ⊤Ωβと記述できることにあります。 したがって、(3)の解はペナルティ付き最小二乗推定値

$$hat{beta} = \left(B^{top} B + \lambda ¥Omega ¥right)^{-> で与えられます。1} B^{top} y $$
(4)

ここで、Bはデータ値で評価した自然スプライン基底関数を含むn×nの次元の行列である。 ベクトルyは応答値y1,…,ynを含む。 実際には、(4) の \hat {beta } を計算する非常に効率的なアルゴリズムが存在する。 また、(3)のペナルティによりノットx(1)とx(n)に自動的に線形性制約がかかるため、fに自然スプライン基底を指定する代わりに、無制約B-スプライン基底で作業することもできる( , Chapter 5, , Chapter 2参照)。 B-スプライン基底に関しては、推定結果は境界ノットの選択に依存しない。x(1) と x(n) を境界ノットとして使用することも、x(1) と x(n) を内部ノットの集合に含めることも可能である。 その代わり、平滑化スプラインはノット数を減らしたペナルティ付き回帰スプラインで近似することができます。 ペナルティ付き回帰スプラインの非常に一般的なクラスはP-スプラインで,これは3次B-スプライン基底と等距離ノットの「大きな」セット(通常,10-40)に基づくものである. (3)の積分を評価する代わりに、P-splineは

$$J^{*}_{beta} = \sumlimits_{k=3}^{K+4} で定義される2次の差分ペナルティに基づいている。 \の近似値であることが示される。 2次差分演算子Δ2はΔ2βk:=(βk-βk-1)-(βk-1-βk-2)で定義される。 したがって、ペナルティはβ⊤Pβと表すことができ、ここでPはD⊤Dで定義され、Dは差の行列である。 P-スプラインの便利な点は、数値的に安定で、定義や実装が非常に簡単なことで、βの推定量も2と同じ構造であることが容易に導かれる。 特に差分行列Dを設定するのは、行列Ωよりはるかに容易である。 また、ペナルティJβ(したがって行列D)をq>2の高次差分Δqに拡張するのも簡単です。 また、等間隔でないノット列を使うことも可能ですが、この場合は重みを導入する必要があります。 この場合、重みを導入する必要がある。不均等なノットを持つP-スプラインは実際にはほとんど使われないので、ここでは考慮せず、代わりに

平滑化スプラインとP-スプラインがノット選択の問題をある程度克服している。 彼らの哲学は、多数のノットを使用し、そしてλが平滑化の量を制御するようにすることです。 この結果、チューニングパラメータが1つ増えることになりますが、このパラメータをどのようにチューニングするかについて、一般的なコンセンサスは得られていません。 λの「最適」値を決定するいくつかの一般的な方法は、一般化クロスバリデーション (GCV) や AIC、混合モデル表現を用いる。

Splines in R

The basic installation bundle of R contains a set of functions that can fit simple polynomial splines and smoothing splines.これは、単純な多項式スプラインと平滑化スプラインをフィットさせる関数のセットを含んでいる。 更なる関数はDM BatesとWN Venablesによって書かれたライブラリsplinesに含まれています。 このパッケージは長年にわたりスプラインフィットの主力であり、現在ではRの基本配布物の一部となっています。 このパッケージには、Bスプラインのbsや自然スプラインのnsなど、広く使われているスプライン基底を作成する関数がいくつかありますが、基底関数を作成するためのより特殊な関数(周期補間スプラインを作成するperiodicSplineなど)やpredictなどの便利なコマンドも含まれています。

デフォルトのbs値は、2つの境界ノットと1つの内部ノットを持つ3次Bスプライン基底を作成し、観測データ値の中央値に配置されます。 ノットの配置や数を増やしたり、位置を変えたりすることで、より柔軟に対応することができる。 図3(Additional file 1: Appendix のコード2)は、異なるオプションで作成されたBスプラインを示す。 上段は線形スプライン、すなわち1次多項式(次数は1)を等距離のノットで接続したものである。 図3

library splinesのbsコマンドによるB-splineの基底。 左上。 3自由度を持つ1次のスプライン基底。 右上: 1次のスプライン基底、4自由度。 左下: 3自由度の立方体スプライン基底。 右下: 自由度4の立方体スプライン基底。 Code #2

Rでbs()で作成したBスプラインは、自動的にデータの範囲で区切られ、追加のノット(τ1、…、τd)が境界ノットと同じになり、領域の両端に複数のノットができることに注意する必要があります。 この方法は一変量の場合に有効であり、計算上も魅力的である。

自然スプラインはsplinesパッケージの中でnsコマンドを使って作成することができる。 デフォルトでは、ユーザーが自由度かノットを指定しない限り、関数は境界のノット内の直線を返す。 図4(Additional file 1: Appendixのcode 3)は、異なるオプションで作成したナチュラルスプラインを示す。

Fig. 4

library splinesのコマンドnsを使って、ナチュラルキュービスプラインを作成。 左上。 2自由度を持つスプライン基底。 右上: 3自由度のスプライン基底。 左下: スプライン基底(4自由度). 右下: スプライン基底(5自由度) Code#3

これらの関数が実際にどのように使われるかを説明するために、2.0.1節のデータをもう一度見てみよう。 図5(Additional file 1: Appendixのコード4)は、以下のコマンドを用いたフィットを示している:poly()は単純直交多項式スプライン、smooth.spline()は平滑スプライン、bs()とns()はそれぞれライブラリスプラインで、Bスプラインと自然スプラインである。 左上のグラフは、データに対する単純な線形フィット(破線)と、変数間のより複雑な関係を捕らえることができる3次多項式フィットを示しています。 右上のグラフは特に興味深いもので、スプライン関数のデフォルト値を使ったフィットを示しています。 緑色の線は関数poly()とns()によるもので、デフォルトではどちらも直線を定義しています。 一方、青い線は関数smooth.spline()によるフィットで、自由度が指定されていない場合、データをアンダースローにする傾向があり、つまり、自由度45に基づく非常に柔軟なくねくねしたフィットを生成するものです。 自由度を4つ指定すると、データに対して視覚的に合理的なフィットが得られます(左下のグラフ)。 選択した基底によって、いくつかの違いがあることがわかる。 多項式基底(黒線)は他の基底より少し柔軟で、特に年齢が高いほど柔軟である。 一方、自由度を4つに限定した平滑化スプラインは、他のアプローチよりも硬いですが、おそらく0歳から10歳の間の小さな年齢では、データを過剰に平滑化しています。 両者の中間では、B-スプラインとナチュラルスプラインが非常によく似たフィットを提供し、小さい年齢の影響を捕らえ、年齢スペクトルの端の極端なケースの影響を受けにくい傾向があります。 最後に、右下のグラフは、自由度を増やすとフィットがどれだけ柔軟になるかを示し、過剰な自由度の使用による過剰フィットの可能性を示唆している。

Fig. 5

西アフリカの女性892人の上腕三頭筋皮膚厚に対する年齢(歳)のグラフ。 左上。 破線は単純な線形フィット、実線は柔軟な3次多項式を用いたフィットを表す。 右上: Rのデフォルト値を使用したスプラインフィット。 緑線は次数1の多項式スプライン(関数polyのデフォルト値)、自由度を指定しない自然スプライン(関数nsのデフォルト値)のフィット結果です。 赤線は自由度3のbスプライン(関数bs、青線は平滑化スプライン(関数smooth.splineによる)から得られたもの。 左下。 黒線は多項式フィット、赤線はbスプラインフィット、緑線は自然スプラインフィットとスムージングスプラインで、いずれも4自由度で定義されている。 右下。 同じ関数を10自由度で定義したもの。 Code #4

A note on degrees of freedom

実際には、自由度によってスプラインを定義すると常に便利です。 この方法はB-splineやナチュラルスプラインを扱うときに特に有用である。 B-スプラインは d+K の自由度を持ち、一方 K 個のノットを持つ自然立方スプライン基底関数は、それぞれ K+1 の自由度を持ちます。 デフォルトでは、Rの関数bsは、内部ノットを持たず、境界ノットがX変数の範囲で定義された次数3のB-スプラインを作成します。 このように、この関数は3つの基底関数を作成します。 ここで、次のような場合を考えてみましょう。ユーザーがXの中央値に内部ノットを持つBスプラインを定義した場合(bs(x,knots=median(x))、ソフトウェアは4つの関数(d=3 + K=1内部ノット、4自由度)を作成することになります。) しかし, knots 引数に境界ノットを指定した場合 (bs(x,knots=c(min(x),median(x),max(x))), 関数は6自由度 (d =3 + k =3) になる.) 同様の注意は関数ns.でもなされるべきです。

平滑化スプラインを扱う場合、自由度はペナルティの大きさによって変わるので、指定するのは簡単ではありません。 しかし実際には、ペナルティ付きスプラインは最大自由度数や希望する自由度に制限することもできる。

Other spline packages

大まかに言えば、スプラインパッケージの拡張リストにはここで紹介したものと非常に似たアプローチか、特定のアプリケーションを対象とした非常に特殊なケースが含まれている。 表1では,これらのパッケージのいくつかを,ダウンロード数とともに示している. この数字はダウンロードされた回数であり,ユニークユーザーの数ではない. これらのアプローチのすべてを詳細に説明することは、この作業の範囲外です。

表 1 スプラインの作成に使用した R パッケージ

コメントを残す

メールアドレスが公開されることはありません。