用 NA 预测 smooth.splines 的新数据
predict newdata with NA for smooth.splines
我正在做 smooth.spline()
拟合,然后用拟合进行预测。我的问题是我的新数据有一些 NA。现在我也在尝试为预测获取 NA。但我没有让它工作。
我编写了一些可重现的代码来说明我的问题。
我希望我的新数据和我的预测具有相同的长度。例如,将 predict
与 loess
模型一起使用时,我没有遇到此问题。如果 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
中排除 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.spline
和 stats:::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)
玩得开心!
我正在做 smooth.spline()
拟合,然后用拟合进行预测。我的问题是我的新数据有一些 NA。现在我也在尝试为预测获取 NA。但我没有让它工作。
我编写了一些可重现的代码来说明我的问题。
我希望我的新数据和我的预测具有相同的长度。例如,将 predict
与 loess
模型一起使用时,我没有遇到此问题。如果 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
中排除 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.spline
和 stats:::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)
玩得开心!