【发布时间】:2012-06-06 01:19:18
【问题描述】:
我正在从我的数据集中删除错误的数据值。到目前为止,我是通过以下方法进行的:
假设 z[,1] 是我的时间序列变量。ei 是其中的各个元素。std_d is sd(abs( diff(z[,1], lag=1) ))
e1-e2> std_d... remove e2.
e1-e3> std_d...remove e3
e1-e4<std_d...move on to e4
e4-e5 <std_d..move on e5
e5-e6>std_d...remove e6
e5-e7<std_d...move on e7
我正在使用以下代码进行此操作:
zx <- as.numeric(coredata(z[,1]))
coredata(z[,1]) <- Reduce(function(y,xx){
if( abs(tail(y[!is.na(y)], 1) - xx) > std_d ) {
c(y,NA)} else {
c(y,xx)} },
zx )
我的问题是:
我想从 std_d (即滞后差的标准差)切换到“移动标准差”。例如,如果我们检查 e20 ,std_d 应该是--> 其前 15 个元素和其后 15 个元素之差的 std 偏差,lag=1。
我正在考虑在动物园中使用滚动平均值。但我没能把它放在上面的函数中。 怎么办?
感谢您的时间和考虑。 这是示例数据:
"timestamp" "mesured_distance" "IFC_Code" "from_sensor_to_river_bottom"
"1" "2012-06-04 21:30:09-05" 4818 995 5030
"2" "2012-06-04 21:15:11-05" 4820 995 5030
"3" "2012-06-04 21:00:10-05" 4818 995 5030
"4" "2012-06-04 20:45:10-05" 4817 995 5030
"5" "2012-06-04 20:30:09-05" 8816 995 5030
"6" "2012-06-04 20:15:09-05" 4816 995 5030
"7" "2012-06-04 20:00:08-05" 4811 995 5030
"8" "2012-06-04 19:45:07-05" 15009 995 5030
"9" "2012-06-04 19:30:07-05" 4810 995 5030
"10" "2012-06-04 19:15:09-05" 4795 995 5030
【问题讨论】:
-
对于第 16 行之前的任何项目,您无法测试前 15 个项目的条件,如果目标是某种预测,则检查未来没有任何意义。我不知道在这种情况下 lag=1 意味着什么。
-
1.我可以从第 16 个元素开始检查。 2. lag=1:- std_d=sd(abs(diff(x, lag=1))) 同样,我想用这个: std_d=sd (abs( diff(X, lag1)))...在这个case X 应该有前 15 个元素和后 15 个元素。