2016-12-21 148 views
3

制限付き3次スプラインを使用してモデリングしているデータがあります。私はrmsパッケージのrcs変換関数を使用して、線形モデルの変換された変数を生成しています。ここでは、5ノットを使用した例を示します。制限付き3次スプラインを使用した新しいデータの予測値

library('rms') 

my_df <- data.frame(
    y = -4 * -100:100 + -1.5 * (-100:100)**2 + 3 * (-100:100)**3 + rnorm(201, 0, 1e5), 
    x = -100:100 
) 

mod <- lm(y ~ rcs(x, 5), data = my_df) 

私はデータに合わせた後、私はx値の特定のドメインの予測y値を見つけるしたいと思います。ここで私が今やっていることです:

new_data <- data.frame(x = -3:3) 

predict(mod, newdata = new_data) 

ただし、これは警告メッセージを生成します。

Warning message: 
In rcspline.eval(x, nk = nknots, inclx = TRUE, pc = pc, fractied = fractied) : 
    5 knots requested with 7 unique values of x. knots set to 5 interior values. 

何をこれは意味し、そして何が起こっていますか?結び目の場所はすでにmodに定義されているはずなので、なぜそれが私が与える7つのxの値の新しい結び目を見つけようとしているのか分かりません。私はにもっと多くのxの値を提供することによって警告メッセージを避けることができ、私は必要のないものを無視するだけですが、私はpredictが実際にやっていることを心配しています。

答えて

1

このquestionに関するハドリーのコメントによれば、lmrcsと動作するとは限りません。問題がある理由は簡単なデモ:

mod <- lm(y ~ rcs(x, 5), data = my_df) 

new_data <- data.frame(x = -3:3) 
new_data2 <- data.frame(x = -300:300/100) 

plot(new_data2$x, predict(mod, newdata = new_data2), type='l') 
lines(new_data$x,predict(mod, newdata = new_data), col='red') 

Graph produced as code output

予測でも同じ範囲のために、x値の数によって異なりますので、絶対にない良いアイデアは、これらの機能を組み合わせること。

+0

これはどこに文書化されていますか? – user102162

関連する問題