Rの自然な3次スプラインにノットを設定する


23

多くの相関する特徴を持つデータがあり、LDAを実行する前に、滑らかな基底関数で特徴を減らすことから始めたいと思います。関数でsplinesパッケージ内の自然な3次スプラインを使用しようとしていnsます。 ノットを割り当てるにはどうすればよいですか?

基本的なRコードは次のとおりです。

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

しかし、私はどのようにノットを選択するのか分からないns


3
ノットを指定する方法について(つまり、nsへの引数を使用して)尋ねていますか、またはノットを配置する場所を決定するための戦略について尋ねていますか?R
枢機

1
結び目を配置する場所の適切な議論については、Harrell、Regression Strategies 2015を参照してください(問題ではないので、分位数は何と同じくらい良いです-ある時点で行動の変化を信じる正当な理由がある場合は例外です)ノットの数(Nに応じて3、4、または5)
-statsguy

回答:


40

Rでノットを指定する方法

このns関数は、入力ベクトルが与えられると、自然回帰スプライン基底を生成します。ノットdfは、整数を取る自由度引数、またはノットの望ましい配置を与えるベクトルknots取るノット引数のいずれかで指定できます。あなたが書いたコードで

library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))

5ノットはリクエストしておらず、ロケーション 5 で単一の(内部)ノットをリクエストしています

df引数を使用すると、ベクトルの分位に基づいて内部ノットが選択されxます。たとえば、電話をかける場合

ns(x, df=5)

その場合、基底には、それぞれ20番目、40番目、60番目、および80番目の分位点に配置された2つの境界ノットと4つの内部ノットが含まれxます。デフォルトでは、境界ノットはの最小値と最大値に配置されますx

ノットの場所を指定する例を次に示します

x <- 0:100
ns(x, knots=c(20,35,50))

代わりにを呼び出すns(x, df=4)と、それぞれ25、50、75の位置に3つの内部ノットができます。

インターセプト条件が必要かどうかも指定できます。通常、これ指定されていません。これns、と組み合わせて使用​​されることが最も多いためですlm。これには、暗黙的にインターセプトが含まれます(強制されない限り)。のintercept=TRUE呼び出しでを使用する場合は、なぜそうnsするのかを確認してください。これを行ってから単純に呼び出すと、設計マトリックスのランクが不足することになります。lm

ノットを配置するための戦略

ノットは、のデフォルトの動作のように、最も一般的に変位値に配置されますns。直感的には、多数のデータが密集している場合、その領域の潜在的な非線形性をモデル化するために、より多くのノットが必要になる場合があります。ただし、これが(a)唯一の選択でも(b)最良の選択でもないという意味ではありません。

他の選択も明らかにでき、ドメイン固有です。予測変数のヒストグラムと密度推定値を調べると、データに「標準的な」選択がない限り、ノットが必要な場所に関する手がかりが得られる場合があります。

回帰の解釈に関しては、ノット配置で確かに「遊ぶ」ことができますが、このためにモデル選択のペナルティが発生することを理解する必要があることに注意してください。結果。


与えられた場合x <- 0:100、ブレークポイントを定義する「適切な」方法はdoでknots_x <- quantile(x, probs=c(.2, .35, .5))、これを使用しns(x, knots=knots_x)て、それぞれ位置25、50、75で3つの内部ノットを定義します。どのような私は答えに混乱してしまったことは私が必要な分位数を指定する必要があるため期待していたということであったknots私はからの入力の実際の値に必要なのに対し、引数をxベクトル...
landroni

自然スプラインのための健康調査、Durrlemanとサイモン(1989)を推奨していることにより、エドワード・L. Kornシェル、バリーI. GraubardのP.98状態(0.05,0.50,0.95)の分析
クリス・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.