2015-01-06 3 views
6

Я борюсь с предсказанием «вне выборки», используя loess. Я получаю NA значения для нового x, которые находятся за пределами исходного образца. Могу ли я получить эти прогнозы?r - leess предсказание возвращает NA

x <- c(24,36,48,60,84,120,180) 
y <- c(3.94,4.03,4.29,4.30,4.63,4.86,5.02) 
lo <- loess(y~x) 
x.all <- seq(3,200,3) 
predict(object = lo,newdata = x.all) 

Мне нужно моделировать полную кривую доходности, то есть процентные ставки для разных сроков погашения.

ответ

11

На странице руководства по predict.loess:

Когда припадок был изготовлен с использованием поверхности = «интерполировать» (по умолчанию), predict.loess не экстраполировать - так точки вне оси выровнено гиперкуб заключени исходные данные будут отсутствовать (NA) и стандартные ошибки

Если вы измените параметр поверхности на «прямой», вы можете экстраполировать значения.

Например, это будет работать (на стороне записки: после построения прогноза, мне кажется, что вы должны увеличить параметр span в loess вызов немного):

lo <- loess(y~x, control=loess.control(surface="direct")) 
predict(lo, newdata=x.all) 
4

В дополнение к Ответ на nico: я бы предложил установить gam (который использует оштрафованные сплайны регрессии). Однако экстраполяция не рекомендуется, если у вас нет модели, основанной на науке.

x <- c(24,36,48,60,84,120,180) 
y <- c(3.94,4.03,4.29,4.30,4.63,4.86,5.02) 
lo <- loess(y~x, control=loess.control(surface = "direct")) 
plot(x.all <- seq(3,200,3), 
    predict(object = lo,newdata = x.all), 
    type="l", col="blue") 
points(x, y) 

library(mgcv) 
fit <- gam(y ~ s(x, bs="cr", k=7, fx =FALSE), data = data.frame(x, y)) 
summary(fit) 

lines(x.all, predict(fit, newdata = data.frame(x = x.all)), col="green") 

resulting plot

Смежные вопросы