2016-12-04 4 views
2

Я пытаюсь выяснить способ перевода финансового временного ряда в символический временной ряд, который учитывает все «значимые» перестановки в соответствии с данным заказом (в R):Как определить все возможные перестановки временного ряда в соответствии с порядком перестановки

Пример:

Учитывая серии по времени: ts= c(1,2,3,4,5)

Если заказ = 2 Я хотел бы извлечь из следующих шаблонов:
1) 1 1 (ts[i]==ts[i+1])
2) 12 (ts[i]<ts[i+1])
3) 2 1 (ts[i]>ts[i+1])

(модель 2 2 является излишним, так как равенство учитывается с помощью рисунка 1 1)

Если заказ = 3 Я хотел бы извлечь из следующих шаблонов:
1) 1 2 3 (ts[i]<ts[i+1]<ts[i+2])
2) 1 2 2 (ts[i]<ts[i+1]==ts[i+2])
3) 1 2 1 (ts[i]<ts[i+1]>ts[i+2])
4) 2 2 3 (ts[i]==ts[i+1]<ts[i+2])
5) 2 2 2 (ts[i]==ts[i+1]==ts[i+2])
6) 2 2 1 (ts[i]==ts[i+1]>ts[i+2])
7) 3 2 1 (ts[i]>ts[i+1]>ts[i+2])
8) 3 2 2 (ts[i]>ts[i+1]==ts[i+2])
9) 3 2 3 (ts[i]>ts[i+1]<ts[i+2])

То, что я ищу является масштабируемым (в терминах Приказа 2,3,4,5 и т. д.) и автоматизированный (функциональный) способ сделать это.

Я стремлюсь с пакетами, такими как «перестановка», «gtools», «combinat», но безрезультатно. Я думаю, что то, что я ищу, является частным случаем перестановок. Может ли кто-нибудь помочь мне с этой проблемой?

Мои поиски начались с чтения статей на тему «Перманентная энтропия», поиск по Google-ученым предоставит вам соответствующую библиографию для всех, кто интересуется.

ответ

1

Попробуйте это:

library(zoo) 
ts <- c(1,3,2,4,5,4,3,3,2) 
rollapply(ts, 2, rank, ties='min') 

    [,1] [,2] 
[1,] 1 2 
[2,] 2 1 
[3,] 1 2 
[4,] 1 2 
[5,] 2 1 
[6,] 2 1 
[7,] 1 1 
[8,] 2 1 

Когда заказ = 3:

rollapply(ts, 3, rank, ties='min') 

    [,1] [,2] [,3] 
[1,] 1 3 2 
[2,] 2 1 3 
[3,] 1 2 3 
[4,] 1 3 1 
[5,] 3 2 1 
[6,] 3 1 1 
[7,] 2 2 1 

Это не совсем то, что вы хотите, но это близко. Основная проблема наблюдается в первых двух строках, где вы не хотите отличать ранги первого и третьего значений, если оба они выше или ниже среднего. Вот исправление.

z <- rollapply(ts, 3, rank, ties='min') 
lohilo <- z[,1] < z[,2] & z[,3] < z[,2] 
hilohi <- z[,1] > z[,2] & z[,3] > z[,2] 
z[lohilo,] <- rep(c(1,2,1),rep(sum(lohilo),3)) 
z[hilohi,] <- rep(c(2,1,2),rep(sum(hilohi),3)) 
z 
    [,1] [,2] [,3] 
[1,] 1 2 1 
[2,] 2 1 2 
[3,] 1 2 3 
[4,] 1 2 1 
[5,] 3 2 1 
[6,] 3 1 1 
[7,] 2 2 1 

 Смежные вопросы

  • Нет связанных вопросов^_^