2016-12-21 11 views
3

У меня есть некоторые данные, которые я моделирую с использованием ограниченных кубических сплайнов. Я использую функцию преобразования rcs в пакете rms для генерации преобразованных переменных для линейной модели. Вот пример использования 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) 

После я вписываюсь данные, я хотел бы найти предсказанные y значения для конкретной области x значений. Вот что я делаю сейчас:

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, которые я им даю. Я могу избежать предупреждения, предоставив больше x значений в new_data и просто игнорируя те, которые мне не нужны, но меня беспокоит то, что на самом деле делает predict.

ответ

1

Согласно комментарию Хэдли об этом question, вы не должны ожидать lm для работы с rcs. Быстрая демонстрация, почему возникла проблема:

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

Предсказания варьируются в зависимости от числа х значений, даже при том же диапазоне, так что, безусловно, не очень хорошая идея, чтобы объединить эти функции.

+0

Является ли это документированным в любом месте? – user102162