Как выбрать временной ряд условно - PullRequest
0 голосов
/ 07 февраля 2020

Скажем, у меня есть объект временного ряда, B_ts. Некоторые серии могут требовать дифференцирования, чтобы сделать их неподвижными, другие, возможно, не будут. Я хотел бы выполнить расширенный тест Дики-Фуллера на всех сериях и применить diff (x) ТОЛЬКО к тем сериям, которые дают статистическую характеристику теста c, для которой значение p> 0,05 из теста DF. Ряды, для которых значение p уже составляет <0,05 I w sh, чтобы остаться «нетронутым». </p>

Есть ли способ сделать это в 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

Большое спасибо!

1 Ответ

1 голос
/ 07 февраля 2020

Вот один раз, чтобы перейти к lapply, обратите внимание, что окончательное значение p для 2-го ser ie равно 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
...