5

周期列は、 n項の後に繰り返される配列です。たとえば、周期列は次のとおりです。

1、2、3、1、2、3、1、2、3、..。

そして、そのシーケンスの期間を各サブシーケンスの項の数と定義します(上記のサブシーケンスは1、2、3です)。したがって、上記のシーケンスの期間は3です。

Rでは、次を使用して、上記のシーケンスを定義できます(無限大ではありませんが)。

sequence <- rep(c(1,2,3),n) #n is a predefined variable

したがってn = 50sequenceが、シーケンス1、2、3、1、2、3、...、1、2、3になり、各番号が50回出現したことは明らかです。

の周期性を計算する関数を作成しようとしていますsequence。擬似コードは次のとおりです。

period <- function(sequence){
    subsequence <- subsequence(sequence) #identify the subsequence
    len.subsequence <- length(subsequence) #calculate its length
    return(len.subsequence) #return it
}

サブシーケンスを特定するにはどうすればよいですか?これはrep関数の逆のようなもので、シーケンスを渡して初期ベクトルの長さを渡します。

4

3 に答える 3

4

期間が常に同じである場合、つまりシーケンスが変更されない場合は、ループオーバーlagを使用して、一致がいつ発生するかを確認できます。

完全なバイアスがあるので、 seqle(その関数を書いた人を推測します:-))を使用することもお勧めします。これは似rleていますが、シーケンスを検索します。 結果として生じる整数シーケンスの間隔を検出する 「rle」のソースをそのように編集するのは私だけではありません。

于 2012-10-10T17:35:14.507 に答える
1

このシーケンスはR関数名であるため、「シーケンス」という名前の使用は避けますが、かなり簡単です。これにより、単調なシーケンスの周期性が識別されるため、もう少し一般的ですが、1.2.3.4.2.3.4,1,2,3,4,2,3,4、...のようなシーケンスは識別されません。

> which(diff(seQ) < 0)
[1]  3  6  9 12 15 18 21 24 27
> diff(which(diff(seQ) < 0) )
[1] 3 3 3 3 3 3 3 3

間隔の同等性をテストするか、これらの結果のいずれかを使用して元のベクトルにインデックスを付けることができます。c(1、2、3、4、2、3、4、1、2、3、4、2、3、4)を使用して回答をテストし、非単調反復を識別するテストに合格するかどうかを確認する必要があります。これまでのところ、それらのどれもそうしません。誰も7の期間を報告しないので。

于 2012-10-10T17:51:32.590 に答える
1

@DWinからのリードに基づいて、おそらく次のような関数を作成できます。

subsequence <- function(data) {
  ii <- 0
  while (TRUE) {
    ii <- ii + 1
    LAG <- sum((diff(data, lag = ii) == 0) - 1)
    if (LAG == 0) { break }
  }
  list(Period = ii, 
       Sequence = data[1:ii], 
       Reps = length(data)/ii) 
}

これは初めて使用while()したので、それを実装するためのより良い方法があるかどうかはわかりません。

ここにいくつかのデータがあります。s3は非単調です:

s1 <- rep(c(1,2,3), 3)
s2 <- rep(c(1,2,3), 50)
s3 <- c(1, 2, 3, 4, 2, 3, 4, 1, 2, 3, 4, 2, 3, 4)

関数の結果は次のとおりsubsequence()です。

subsequence(s1)
# $Period
# [1] 3
# 
# $Sequence
# [1] 1 2 3
# 
# $Reps
# [1] 3

subsequence(s2)
# $Period
# [1] 3
# 
# $Sequence
# [1] 1 2 3
# 
# $Reps
# [1] 50

subsequence(s3)
# $Period
# [1] 7
# 
# $Sequence
# [1] 1 2 3 4 2 3 4
# 
# $Reps
# [1] 2
于 2012-10-10T19:09:15.323 に答える