2017-06-21 66 views
2

我正在做一個smooth.spline()擬合,然後進行適合的預測。我有問題,我的新數據有一些NAs。現在我正在嘗試爲預測也獲得新手。但我沒有得到它的工作。預測用於光滑的NA的新數據。樣本

我已經編寫了一些可重現的代碼來說明我的問題。 我想要我的新數據和我的預測長度相同。例如,當使用predictloess模型時,我沒有這個問題。如果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例如NAS會無法正常工作:

> 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,但數字矢量列表。


好吧,我懷疑。我不確定,因爲在命令中使用na.action = na.exclude時沒有收到錯誤信息。你的推薦方式很好,謝謝!

@Katharina哈哈,因爲有一個...論點predict()功能,你沒有得到錯誤。所以基本上你可以傳遞任何未被使用的參數。試試這個

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

玩得開心!

+0

好的,我懷疑這一點。我不確定,因爲在命令中使用'na.action = na.exclude'時沒有收到錯誤信息。你的推薦方式很好,謝謝! (我提高了你的答案,不幸的是它沒有公開展示,直到我獲得了一定數量的徽章 - 我認爲;編輯:它現在似乎工作了) – Katharina