2017-06-21 70 views
2

我正在做一个smooth.spline()拟合,然后进行适合的预测。我有问题,我的新数据有一些NAs。现在我正在尝试为预测也获得新手。但我没有得到它的工作。预测用于光滑的NA的新数据。样本

我已经编写了一些可重现的代码来说明我的问题。 我想要我的新数据和我的预测长度相同。例如,当使用predictloess模型时,我没有这个问题。如果x为NA,它会自动将NA置于y。我看到这个问题的其他模型的预测(lm, glm,..但通过设置na.action=na.exclude那里的答案不适用于我。

x <- c(1:5, NA, 7:12, NA, 15:19, 22:23) 
y <- rnorm(length(x)) 
y[which(is.na(x))] <-NA 
length(y) #20 

x.new <- c(x[1:18],20,21,x[19:20]) 
length(x.new) #22 

spl <- smooth.spline(x=x[!is.na(y)], y=y[!is.na(y)], spar=0.001) 
spl.pr <- predict(spl, x=x.new[!is.na(x.new)], na.action=na.exclude) 
length(spl.pr$y) #20 

我的预测命令还,如果我不排除右内predict例如NAS会无法正常工作:

> spl.pr <- predict(spl, x=x.new, na.action=na.exclude) 
Error in double(n) : vector size cannot be NA 

我希望我让我的问题可以理解。帮助将非常感激。谢谢

回答

2

predict对不同的模型类别表现不同。对于stats:::predict.smooth.splinestats:::predict.smooth.spline.fit没有na.action。所以你只能预测非NA值。

spl.pr <- rep(NA, length(x.new)) 
spl.pr[!is.na(x.new)] <- predict(spl, x = x.new[!is.na(x.new)])$y 

注意spl.pr不符合$x$y,但数字矢量列表。


好吧,我怀疑。我不确定,因为在命令中使用na.action = na.exclude时没有收到错误信息。你的推荐方式很好,谢谢!

@Katharina哈哈,因为有一个...论点predict()功能,你没有得到错误。所以基本上你可以传递任何未被使用的参数。试试这个

predict(spl, x = 5, this.answer.is.useful = TRUE) 

玩得开心!

+0

好的,我怀疑这一点。我不确定,因为在命令中使用'na.action = na.exclude'时没有收到错误信息。你的推荐方式很好,谢谢! (我提高了你的答案,不幸的是它没有公开展示,直到我获得了一定数量的徽章 - 我认为;编辑:它现在似乎工作了) – Katharina