我正在做一个smooth.spline()拟合,然后用fit进行预测。我有一个问题,我的新数据有一些NAs。现在我也在试着得到预测的数字。但我不想让它起作用。
我编了一些可复制的代码来说明我的问题。我希望我的新数据和我的预测是一样长的。例如,在使用predict和loess模型时,我没有这个问题。如果y是NA,它会自动将NA放入x。我看到这个问题是为了预测其他模型(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我希望我的问题可以理解。我们将非常感谢你的帮助。谢谢
发布于 2017-06-21 16:07:32
对于不同的模型类,predict的行为不同。na.action不适用于stats:::predict.smooth.spline和stats:::predict.smooth.spline.fit。所以你只能预测非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)玩得开心!
https://stackoverflow.com/questions/44680805
复制相似问题