2016-12-21 59 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