我希望对时间序列进行平滑处理,以避免出现虚假的抖动/错误。换句话说,我想要进行一些非常局部的鲁棒平滑处理。
我在zoo包中发现了rollmean和rollmedian函数,但遇到了一个问题,因为我的向量中有一个NA值。后来我在某个地方读到,这些zoo函数使用runmed,其中就存在问题。
==示例==
median(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10),na.rm = TRUE)
runmed(c(1,1,1,2,2,2,7,NA,1,2,3,10,10,10),k=3)
第一行返回2,但如果没有包括na.rm = TRUE
,则将返回NA。第二行返回Error in runmed(c(1, 1, 1, 2, 2, 2, 7, NA, 1, 2, 3, 10, 10, 10), k = 3) :
NA/NaN/Inf in foreign function call (arg 1)
。该行没有办法添加na.rm参数。
如何使runmed处理NA?顺便提一下,rollmean返回一个向量,在NA之前的值是正确的,之后的每个值都是NA。
rollmean
和zoo
中的rollmean
旨在提高速度,因此具有某些限制,以便它们运行更快-如其帮助文件中所述。 如果您的情况不符合这些限制,则仍可以使用rollapply
,在这种情况下,您可以提供任何函数,例如rollapply(x,k,function(x)median(x,na.rm = TRUE))
。 请注意,帮助文件说:“‘rollmean’的默认方法无法处理包含‘NA’的输入。在这种情况下,请改用 ‘rollapply’。” - G. Grothendieck