2016-12-04 16 views
2

金融時系列を、与えられた順序に従ってすべての「有意義な」順列を説明する象徴的な時系列に変換する方法を理解しようとしています(Rで):順列の可能な順列をすべて特定する方法

例:

所与の時間シリーズ:
1)1 (ts[i]==ts[i+1])
2)1:順序= 2 Iは、次のパターンを抽出したいts= c(1,2,3,4,5)

場合2 (ts[i]<ts[i+1])
3)2 1 (ts[i]>ts[i+1])

(等式はパターン1)を介して会計処理されているので、パターン2 2が冗長である

受注= 3 Iは、次のパターンを抽出したい場合:
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私が探しています何
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など)、これを自動化(機能別)する方法があります。

"permute"、 "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 

が、それは近くにあります。主な問題は、最初の2つの行に表示されます。ここでは、両方が中央の観察よりも高いか低い場合に、1番目と3番目の値のランクを区別したくありません。ここに修正があります。

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 
関連する問題