目标:由于基于黄土的方法存在问题,我试图使用带通滤波器从时间序列中提取季节和趋势分量,您可以阅读更多有关{{ 3}}。
数据:数据是10年间的每日降雨量测量值,其随机性很高,并且具有明显的年度季节性。可以找到数据here。
问题:执行过滤器时,“周期”组件按预期方式显示(捕获年度季节性),但“趋势”组件似乎过拟合,因此残差变成很小的值,结果模型对于样本外预测没有用。
US1ORLA0076 <- read_csv("US1ORLA0076_cf.csv")
head(US1ORLA0076)
water_date PRCP prcp_log
<date> <dbl> <dbl>
1 2006-12-22 0.09 0.0899
2 2006-12-23 0.75 0.693
3 2006-12-24 1.63 1.26
4 2006-12-25 0.06 0.0600
5 2006-12-26 0.36 0.353
6 2006-12-27 0.63 0.594
然后我使用here包中的以下命令,应用Christiano-Fitzgerald带通滤光片(旨在使波长在半年到全年之间,即单次年波)通过。
library(mFilter)
US1ORLA0076_cffilter <- cffilter(US1ORLA0076$prcp_log,pl=180,pu=365,root=FALSE,drift=FALSE,
type=c("asymmetric"),
nfix=NULL,theta=1)
创建一个S3对象,其中除其他事项外,还包含“趋势”值的向量和“周期”值的向量,例如:
head(US1ORLA0076_cffilter$trend)
[,1]
[1,] 0.1482724
[2,] 0.7501137
[3,] 1.3202868
[4,] 0.1139883
[5,] 0.4051551
[6,] 0.6453462
head(US1ORLA0076_cffilter$cycle)
[,1]
[1,] -0.05839342
[2,] -0.05696651
[3,] -0.05550995
[4,] -0.05402422
[5,] -0.05250982
[6,] -0.05096727
绘制:
plot(US1ORLA0076_cffilter)
我对这个输出感到困惑。这个周期看起来与我预期的差不多。趋势没有。
问题:mfilter是否甚至以与decompose()或stl()之类的函数相同的方式定义“趋势”?如果没有,那我应该怎么考虑呢?
问题:我是否对cffilter()进行了错误的校准,我可以更改哪些内容以改善趋势分量的定义?
答案 0 :(得分:0)
答案是,“否” mfilter()并未像某些分解函数(例如stl())那样定义“趋势”。通常将其定义为“ 周期所偏离的事物”。将通滤波器设置为180-365的带宽,我隔离了年度循环分量,该分量已从数据中减去,留下了其他所有内容,在这里定义为“趋势”,可以将其视为种残留物。
要使用相同的方法识别像stl()或decomp()这样的分解包中显示的“趋势”,可以应用与上述相似的带通滤波器,但在(针对该数据集)366-3652,它将捕获反映整个10年周期的频率范围,但不包括诸如年度季节性之类的年内频率范围。
#Overall trend captured with similar code (and slightly different data):
US1ORLA0076_cffilter_trend <- cffilter(US1ORLA0076$prcp_log,pl=366,pu=3652,root=FALSE,drift=FALSE,
type=c("asymmetric"),
nfix=1,theta=1)
plot(US1ORLA0076_cffilter_trend)