2017-06-21 17 views
2

私はsmooth.spline()をフィットさせた後に予測しています。新しいデータにいくつかのNAがあるという問題があります。今私は予測のためにNAを取得しようとしています。しかし、私はそれを働かせることはありません。smooth.splinesのためのNAで新しいデータを予測

私は自分の問題を説明するためにいくつかの再現可能なコードを作りました。 新しいデータと予測が同じ長さになるようにしたい。 loessモデルでpredictを使用しているときなど、この問題は発生しませんでした。 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 

私は私の問題を理解できたと思う。ヘルプは非常に高く評価されます。ありがとう

答えて

2

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付きリストが、数値ベクトルではないことに注意してください。


[OK]を私はそれを疑いました。コマンド内でna.action = na.excludeを使用したときにエラーメッセージが表示されなかったため、私は不明でした。あなたのお勧めの方法はうまくいきます、ありがとう!

@Katharina predict()機能で...引数があるためハハ、あなたがエラーを取得できませんでした。だから、基本的には未使用の引数を渡すことができます。試してみてください

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

楽しくお楽しみください!

+0

私はそれを疑った。私は、コマンド内に 'na.action = na.exclude'を使用するとエラーメッセージが表示されなかったので、わかりませんでした。あなたのお勧めの方法はうまくいきます、ありがとう! (私はあなたの答えをupvoted、残念ながら、私はバッジの一定量を獲得するまでは公に表示されません - 私は思う、編集:それは今働いていたようです) – Katharina

関連する問題