【问题标题】:predict newdata with NA for smooth.splines用 NA 预测新数据以获得 smooth.splines
【发布时间】:2017-11-24 15:15:13
【问题描述】:

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

我编写了一些可重现的代码来说明我的问题。 我希望我的 newdata 和我的预测长度相同。例如,当使用 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

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

【问题讨论】:

    标签: r regression predict spline smoothing


    【解决方案1】:

    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)
    

    玩得开心!

    【讨论】:

    • 好吧,我怀疑。不过我不确定,因为在命令中使用na.action=na.exclude时没有收到错误消息。您推荐的解决方法效果很好,谢谢! (我赞成你的回答,不幸的是,在我获得一定数量的徽章之前它不会公开显示 - 我认为是 10;编辑:它现在似乎有效)
    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 2021-12-28
    • 2023-01-30
    • 1970-01-01
    • 2023-03-14
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多