用 NA 预测 smooth.splines 的新数据

predict newdata with NA for smooth.splines

我正在做 smooth.spline() 拟合,然后用拟合进行预测。我的问题是我的新数据有一些 NA。现在我也在尝试为预测获取 NA。但我没有让它工作。

我编写了一些可重现的代码来说明我的问题。 我希望我的新数据和我的预测具有相同的长度。例如,将 predictloess 模型一起使用时,我没有遇到此问题。如果 x 是 NA,它会自动将 NA 放入 y。我看到了这个关于其他模型预测的问题(lmglm,..)但是通过设置 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 中排除 NA,我的预测命令也将不起作用。 :

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

我希望我的问题可以理解。帮助将不胜感激。谢谢

predict 对于不同的模型 class 表现不同。 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 的列表,而是一个数值向量。


Ok I suspected that. I was unsure though because I did not get an error message when using na.action = na.exclude within the command. Your recommended way around it works well, thank you!

@Katharina 哈哈,你没有得到错误,因为 predict() 函数中有一个 ... 参数。所以基本上你可以将任何未使用的参数传递给它。试试这个

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

玩得开心!