2014-12-10 2 views
2

R에서 상태 동시 발생 패턴을 순서대로 계산하는 방법, 즉 요소 순서가 반드시 중요하지 않은 그룹에서 작업하는 방법이 있습니까? 그 목적은보다 긴 그룹 내에서보다 큰 하위 그룹의 출현 빈도를 찾는 것입니다.하위 집합 구성원 공동 출현 및 그룹 알파벳 길이 계산

예를 들어, 입력 데이터 세트는 ...

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 
... 

(~ 깊은 10 넓은 열 및 1000 행까지의 것 '진짜'데이터 시퀀스) 이런 식으로 뭔가를 할 것이며, 그 결과는 아마도 것 보여주기 ...

abcd, abcd* 

집합 또는 클래스로, 발생 횟수를 나타내는 개수와 함께 * 하위 집합 또는 '다른 위치의 회원'범주를 나타내며 점수는 length()을 기준으로합니다. length() 이상을 반영하는 높은 점수

결과도 보여 것입니다 ... 다른 약간 희소 세트 또는 클래스로

abcde 

.

그리고 마지막으로 ...

abc* 

이 높은 카운트 점수를 가지고,하지만 length() 점수가 낮은.

정렬되지 않은 (disordered?) 그룹에서 작동하는 Traminer와 같은 것이 우수 할 것입니다. 계산 부하에 문제가있을 수 있지만 필자는 프로그램 작성시 이빨을 자르려면이를 고려해야합니다 (예 : 일종의 사소한 임계 값).

+0

내가 글로벌 알파벳 주위에 가지고 추가해야합니다 제공

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

20 자 또는 요소가 있으며 행에 중복이있을 수 있습니다. –

답변

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) 

당신은 그래서 당신은 94 개 시퀀스 요소 FEEM 만 두, (84)이 EMTR와 다른 주, 57 EM이 포함되어 있는지 알고

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

를 얻을 수 , JLTR.

seqfplot(set)으로 빈번한 세트를 플롯 할 수도 있습니다.

찾고있는 것이 맞는지는 모르겠지만 도움이되기를 바랍니다.

여기 ====

당신이 쓸모 제거 할 수있는 방법입니다 "/ 1"

  Freq Percent 
EM-FE   94 13.202247 
EM-TR   84 11.797753 
EM-JL-TR  57 8.005618 
+1

대단히 감사합니다. 이 함수는 제대로 작동하도록 ssort <- apply (seqdata, MARGIN = 2, sort)를 'ssort <- t (apply (seqdata, MARGIN = 1, sort))'로 변경하면 제대로 작동합니다. 열이 아닌 행. 트랜스퍼는 '적용'기능의 특이점 때문에 필요합니다. 나는 '/ 1-I/1'출력 효과를 미적으로 억제하기 위해 불규칙한 행을 돕는 제안을 환영합니다. –

+0

전체 솔루션을 게시해야합니까, 아니면 전체 솔루션을 게시해야합니까? 나는 당신이 (많은) 것들을 명확히하기에 더 자격이 있다고 느낀다. 그러나 나는 가지마도 가지지 않는다. –

+0

@BigOldDave 나는 나의 코드에서 오류를 수정하고 쓸모없는 " 1". – Gilbert