2016-12-21 91 views
3

我有一些數據是使用受限三次樣條建模的。我在rms包中使用rcs轉換函數來生成線性模型的轉換變量。這是一個使用5節的例子。使用受限三次樣條的新數據的預測值

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) 

我適合數據後,我想找到的預測yx值的特定領域。這裏就是我現在做的:

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中定義,所以我不明白爲什麼它似乎試圖找到我給它的七個x值的新結。我可以通過在new_data中提供更多的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