解释包过滤器(robust.filter)的输出

解释包过滤器(robust.filter)的输出,r,filtering,time-series,R,Filtering,Time Series,我正在使用R包robfilter分析一些时间序列数据。更具体地说,函数健壮.filter。但是,当我将长度为38的时间序列作为参数传递时,组成输出列表的向量的长度不一致。我本以为它们的长度是一样的,但我可能误解了输出。这里有一个例子 tmp1 <- c(21.40253, 21.71123, 23.62187, 23.34300, 22.81753, 25.05459, 19.13591, 18.75162, 19.92034, 19.98294, 20.07355, 19.76710,

我正在使用R包
robfilter
分析一些时间序列数据。更具体地说,函数
健壮.filter
。但是,当我将长度为38的时间序列作为参数传递时,组成输出列表的向量的长度不一致。我本以为它们的长度是一样的,但我可能误解了输出。这里有一个例子

tmp1 <- c(21.40253, 21.71123, 23.62187, 23.34300, 22.81753, 25.05459, 19.13591,
18.75162, 19.92034, 19.98294, 20.07355, 19.76710, 18.87155, 20.06639,
19.69027, 21.33667, 21.57617, 20.84389, 22.28439, 21.73989, 21.82995,
23.02375, 21.99251, 24.88138, 27.75982, 28.84098, 27.67645, 27.04585,
27.16779, 25.62208, 25.90392, 26.92163, 26.83929, 26.83194, 30.43352,
30.95034, 32.41596, 31.87539)

length(tmp1)
同样,表示哪个数据点是异常值的向量长度不一致


请注意,此问题并不总是发生。向量的长度通常是一致的

查看了源代码和文件robust filter.R,并注意到由天花板(m/2)和天花板(m/3)产生的一些索引值可能会导致填充向量。向量$ol、$level、ect的长度似乎与窗口大小有关。例如,在给定的情况下,如果集合大小为42,窗口大小为7,则所有结果集均为42,因为42/7等分

library(robfilter)
tmp2 <- robust.filter(tmp1, width=7, shiftd=4, extrapolate=TRUE)
length(tmp2[["y"]])
length(tmp2[["ol"]])
length(tmp2[["level"]])
tmp3 <- c(9.590999, 10.736618, 11.213917, 11.486491,  9.727762,
7.564208,  7.995007,  7.718619,  7.908130, 7.598344,  7.884147,
8.560636,  9.490633,  9.768715,  9.221128,  8.535356,  9.589786,
9.900386, 10.496643, 10.817289, 11.371327, 12.310138, 11.572224,
13.117717, 13.720533, 12.880585, 12.830893, 12.578935, 11.910936,
11.063447, 10.916194, 10.881677, 11.246900, 11.264994,  9.844785,
10.512842, 10.609419, 10.866941, 11.541334, 12.041648, 12.188250,
12.289139, 11.412508, 11.603581, 11.018384, 12.374552, 12.010114,
11.701049, 11.550803, 11.029398, 11.109258, 11.263335, 11.201110,
11.047172, 11.398097, 11.068206, 11.639072, 12.182218, 11.574394,
12.970866, 12.214502, 12.271814, 11.529558, 13.413776, 13.452780,
12.854925, 13.494725, 13.381464, 13.054178, 13.346170, 12.622088,
15.365530, 10.252811, 11.067396, 10.791832,  9.584768, 10.765442,
10.781584, 9.646298, 10.452633)

length(tmp3) #80
tmp4 <- robust.filter(tmp3, width=9, shiftd=4, extrapolate=TRUE)
length(tmp4[["y"]]) #80
length(tmp4[["ol"]]) #81
length(tmp4[["level"]]) #80