首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NA预测smooth.splines的新数据

用NA预测smooth.splines的新数据
EN

Stack Overflow用户
提问于 2017-06-21 15:47:38
回答 1查看 876关注 0票数 2

我正在做一个smooth.spline()拟合,然后用fit进行预测。我有一个问题,我的新数据有一些NAs。现在我也在试着得到预测的数字。但我不想让它起作用。

我编了一些可复制的代码来说明我的问题。我希望我的新数据和我的预测是一样长的。例如,在使用predictloess模型时,我没有这个问题。如果y是NA,它会自动将NA放入x。我看到这个问题是为了预测其他模型(lmglm,.)但是设置na.action=na.exclude的答案对我不起作用。

代码语言:javascript
复制
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,则我的预测命令也不能工作,例如:

代码语言:javascript
复制
> spl.pr <- predict(spl, x=x.new, na.action=na.exclude)
Error in double(n) : vector size cannot be NA

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-21 16:07:32

对于不同的模型类,predict的行为不同。na.action不适用于stats:::predict.smooth.splinestats:::predict.smooth.spline.fit。所以你只能预测非NA值。

代码语言:javascript
复制
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()参数。所以基本上你可以把任何未使用的论点传递给它。尝尝这个

代码语言:javascript
复制
predict(spl, x = 5, this.answer.is.useful = TRUE)

玩得开心!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44680805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档