2015-01-06 28 views
6

Tôi đang vật lộn với dự đoán "ngoài mẫu" bằng cách sử dụng loess. Tôi nhận được các giá trị NA cho x mới nằm ngoài mẫu ban đầu. Tôi có thể nhận được những dự đoán này không?r - dự đoán loess trả về 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) 

Tôi cần lập mô hình đường cong lợi suất đầy đủ, tức là lãi suất cho các kỳ hạn khác nhau.

Trả lời

11

Từ trang hướng dẫn của predict.loess:

Khi phù hợp đã được thực hiện sử dụng bề mặt = "suy" (mặc định), predict.loess sẽ không suy - vì vậy điểm bên ngoài một hypercube trục thẳng hàng kèm theo dữ liệu ban đầu sẽ có các dự đoán bị thiếu (NA) và lỗi chuẩn

Nếu bạn thay đổi tham số bề mặt thành "trực tiếp", bạn có thể ngoại suy các giá trị.

Ví dụ, điều này sẽ làm việc (trên một mặt lưu ý: sau khi vẽ dự đoán, cảm giác của tôi là bạn nên tăng tham số span trong loess gọi một chút):

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

Ngoài Câu trả lời của nico: Thay vào đó, tôi sẽ đề nghị để phù hợp với một gam (sử dụng splines hồi quy bị phạt). Tuy nhiên, ngoại suy không được khuyến khích nếu bạn không có một mô hình dựa trên khoa học.

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

Các vấn đề liên quan