如何有条件地 select 时间序列

How to select time series conditionally

假设我有一个时间序列对象,B_ts。有些系列可能需要差分才能使它们平稳,而其他系列可能不需要。我想对所有系列执行增强的 Dickey-Fuller 测试,并将 diff(x) 仅应用于那些产生测试统计数据的系列,其 p 值从 D-F 测试 > 0.05。 p 值已经 < 0.05 的系列我希望保留 "untouched".

有没有办法在 R 中做到这一点?

到目前为止,我有以下时间序列对象代码,B_ts:

B_ts <- ts(B) 

tseries::adf.test(B_ts) 

f1 = function(x){return(diff(x))}

C <- apply(B_ts,1, f1) #but only to rows that require differencing!

tseries::adf.test(C) #to see whether p value for all time series is now < 0.05 after differencing

非常感谢!

这是使用 lapply 进行一次的方法,请注意,第二个系列的最终 p 值为 0.065,因此根据您遇到的问题和您的数据,您可能希望滞后超过一次。

# To choose example ts data 
# data()
tseries <- list("t1" = AirPassengers, "t2" = BJsales) ;

# apply your test to the list of series
adf <- lapply(tseries, function(x) tseries::adf.test(x)$p.value)

# index only series that need diff
diff_index <- which(adf > 0.05)
tseries_diff <- tseries ;
tseries_diff[diff_index] <- lapply(tseries_diff[diff_index], diff) ;

# verify
adf <- lapply(tseries_diff, function(x) tseries::adf.test(x)$p.value)
adf

# choose if you want to iterate again / or if your want to find a smarter lag