如何在R语言中平滑变量并忽略阈值为5的小幅波动
问题:忽略阈值内的小幅变量变化(视为噪声)
我有一个变量,希望将阈值5以内的小幅变化视为测量误差或噪声并忽略。
示例数据
mydf = data.frame(time = 1:14, variable=c(1,1,1,4,1,1,1,7,6,5,5,4,5,25))
尝试的平滑方法及问题
我尝试通过以下方法平滑这些小幅变化:
mydf %>% mutate(previous = lag(variable, n = 1, default = first(variable)), mytry = ifelse(abs(previous - variable) < 5, previous, variable))
运行结果:
time variable previous mytry 1 1 1 1 1 2 2 1 1 1 3 3 1 1 1 4 4 4 1 1 <- 从时间3到4出现小幅变化 5 5 1 4 4 <- 此处应同样为1 6 6 1 1 1 7 7 1 1 1 8 8 7 1 7 <- 首次大幅变化 9 9 6 7 7 <- 首次小幅变化被忽略 10 10 5 6 6 <- 二次小幅变化再次出现 11 11 5 5 5 12 12 4 5 5 13 13 5 4 4 14 14 25 5 25
上述方法能正确识别并忽略首次小幅变化,但后续出现的二次小幅变化仍会保留在平滑后的变量中。我认为最佳方案是将每次大幅变化设为新基准值,以此为基准忽略后续小幅变化。
理想结果
示例数据的理想结果如下:
time variable previous mytry optimal5 1 1 1 1 1 1 2 2 1 1 1 1 3 3 1 1 1 1 4 4 4 1 1 1 5 5 1 4 4 1 6 6 1 1 1 1 7 7 1 1 1 1 8 8 7 1 7 7 9 9 6 7 7 7 10 10 5 6 6 7 11 11 5 5 5 7 12 12 4 5 5 7 13 13 5 4 4 7 14 14 25 5 25 25
效果说明
变量平滑效果可视化:展示了首次小幅变化被忽略后的效果
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

