2

シーケンス内の状態共起のパターンをカウントする方法、つまり、要素の順序が必ずしも重要ではないグループで作業する方法は R にありますか? 目的は、さらに長いグループ内でより大きなサブグループが発生する頻度を調べることです。

たとえば、入力データセットは次のようになります (「実際の」データ シーケンスは、幅が最大 10 列、深さが 1000 行になります) ...

a,b,c,d
b,c,d,a
c,d,b,a
a,b,c,d,e
b,c,d,a,e
a,b,c
...

そして結果はおそらく...

abcd, abcd*  

セットまたはクラスとして、出現回数を示すカウントを使用します。たとえば、* はサブセットまたは「別のメンバーシップ」カテゴリを示し、スコアは に基づいていlength()ます。

結果も表示されます...

abcde

スコアが高いほど、より長く反映されlength()ます。

そして最後に ...

abc*

カウント スコアは高くなりますが、スコアは低くなりlength()ます。

順序付けられていない (無秩序な?) グループで動作する Traminer のようなものが優れています。計算負荷に問題がある可能性があることに注意しますが、プログラムを書くのに歯を磨く必要がある場合は、それを考慮します (つまり、ある種の自明性のしきい値)。

4

1 に答える 1

3

以下は、各シーケンス内の要素をアルファベット順にソートし、ソートされたシーケンスの連続する個別の状態を抽出する関数です。

dssort <- function(seqdata){
  ssort <- t(apply(seqdata, MARGIN=1, sort))
  ssort.seq <- seqdef(ssort, states=alphabet(seqdata), labels=stlab(seqdata))
  sdss  <- seqdef(seqdss(ssort.seq), missing="%")
  sdss
} 

この関数の結果を使用して、シーケンスを形成するさまざまな要素セットの頻度を取得できます。たとえば、

library(TraMineR)
data(mvad)
shortlab <- c("EM", "FE", "HE", "JL", "SC", "TR")
mvad.seq <- seqdef(mvad[,17:86], states=shortlab)

set <- dssort(mvad.seq)

seqtab(set, tlim=1:3)

あなたが得る

               Freq Percent
EM/1-FE/1        94      13
EM/1-TR/1        84      12
EM/1-JL/1-TR/1   57       8

つまり、94 個のシーケンスには要素が含まれてFEおりEM、それらの 2 つだけ、84 個にはEMおよびがTRあり、他の状態はなく、57 個には EMJLおよびがあることがわかりますTR

で頻出セットをプロットすることもできますseqfplot(set)

これがあなたが探しているものかどうかはわかりませんが、お役に立てば幸いです。

====

無駄な「/1」を取り除く方法は次のとおりです。

tf <- seqtab(set, tlim=1:3, format="STS")
t <- attr(tf,"freq")
rownames(t) <- gsub("-\\*","",rownames(t))
t

それは与える

            Freq   Percent
EM-FE         94 13.202247
EM-TR         84 11.797753
EM-JL-TR      57  8.005618
于 2014-12-10T08:36:16.253 に答える