多くの相関する特徴を持つデータがあり、LDAを実行する前に、滑らかな基底関数で特徴を減らすことから始めたいと思います。関数でsplines
パッケージ内の自然な3次スプラインを使用しようとしていns
ます。 ノットを割り当てるにはどうすればよいですか?
基本的なRコードは次のとおりです。
library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))
しかし、私はどのようにノットを選択するのか分からないns
。
多くの相関する特徴を持つデータがあり、LDAを実行する前に、滑らかな基底関数で特徴を減らすことから始めたいと思います。関数でsplines
パッケージ内の自然な3次スプラインを使用しようとしていns
ます。 ノットを割り当てるにはどうすればよいですか?
基本的なRコードは次のとおりです。
library(splines)
lda.pred <- lda(y ~ ns(x, knots=5))
しかし、私はどのようにノットを選択するのか分からないns
。
回答:
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
ベクトル...