2012-08-30 43 views
4

在R中是否實現了任何插值方法,您可以避免使用負值插值缺失值?在R中插值(並避免負插值)

讓我們矢量:

d <- c(NA, NA, 5000, 17782, NA, NA, 21450, 42320, NA, NA, 52900, 54170, 
60600, 69000, 78000, 87000, 96900, 96900, 122000, 132700, 145000, 
171500, 198900, 213400, 229600, 250200, 272000, 291600, 318000, 
343000, 367000, 419200, 445000, 495000, 540000) 

plot(d) 

使用三次樣條插值

library(zoo) # for na.spline 
d.interpolation <- na.spline(d) 

這給

[1] -100174.12 -31198.04 5000.00 17782.00 16961.75 14160.17 21450.00 42320.00 53674.83 
[10] 54841.83 52900.00 54170.00 60600.00 69000.00 78000.00 87000.00 96900.00 96900.00 
[19] 122000.00 132700.00 145000.00 171500.00 198900.00 213400.00 229600.00 250200.00 272000.00 
[28] 291600.00 318000.00 343000.00 367000.00 419200.00 445000.00 495000.00 540000.00 

然而,負值沒有做出太大的意義在這方面。

顯然,像

d.interpolation <- na.spline(c(0,d)) 

也將無法正常工作。

您有任何解決方案嗎?

+0

標準警告適用於:你能指望什麼實際值應該在'NA'位置?例如,如果你的數據應該是「平滑的」,你可以用'mean(d [j-1],d [j + 1])替換每個NA,然後進行擬合。 –

回答

4

你可以在插log(d)

library(zoo) 
d.interpolation <- exp(na.spline(log(d))) 
d.interpolation 
# [1]  1.86 282.86 5000.00 17782.00 22424.08 19122.70 21450.00 
# [8] 42320.00 59826.52 58724.79 52900.00 54170.00 60600.00 69000.00 
# [15] 78000.00 87000.00 96900.00 96900.00 122000.00 132700.00 145000.00 
# [22] 171500.00 198900.00 213400.00 229600.00 250200.00 272000.00 291600.00 
# [29] 318000.00 343000.00 367000.00 419200.00 445000.00 495000.00 540000.00 

enter image description here

+0

感謝您指點我這個選項。但是,您是否知道如何確保不斷增加的價值?例如'42320,NA,NA,52900'被'42320.00 59826.52 58724.79 52900.00'取代。 – majom

+0

@majom - 您確定這不僅僅是由於樣條參數(基本上是高頻截止)應用於數據嗎? –

+0

由於您的數據似乎遵循指數,所以您可以在日誌空間中執行線性內部/外部數據量(而不是使用樣條線)。我在這個組合上看到很多問題。 – flodel