R에서 전이 행렬 계산 (Markov)


29

R (내장 함수)에 일련의 관측치에서 Markov Chain의 전이 행렬을 계산하는 방법이 있습니까?

예를 들어, 다음과 같은 데이터 세트를 가져와 1 차 전이 행렬을 계산합니까?

dat<-data.frame(replicate(20,sample(c("A", "B", "C","D"), size = 100, replace=TRUE)))

이 행렬은 무엇을 나타내야합니까? 각 행 (또는 열)에 대해 Markov 체인을 한 번 실행합니까? 또는...?
추기경

이것은 100 개의 상태 시퀀스 (20 개) 샘플입니다.
B_Miner

확률 추정치를 찾고 있습니까?
추기경

확률 추정치. 관측 된 시퀀스를 사용하여 전이 확률 매트릭스 (이 예에서는 4x4)는 무엇입니까?
B_Miner

답변:


33

"내장"기능 (예 : 내장 base또는 유사)을 즉시 인식 하지는 못하지만 몇 줄의 코드로이 작업을 매우 쉽고 효율적으로 수행 할 수 있습니다.

여기 취하는 함수 행렬 입력으로서 (아닌 데이터 프레임) 및 중 전이 카운트 (생성 prob=FALSE) 또는 디폴트 ( prob=TRUE), 상기 추정 된 전이 확률.

# Function to calculate first-order Markov transition matrix.
# Each *row* corresponds to a single run of the Markov chain
trans.matrix <- function(X, prob=T)
{
    tt <- table( c(X[,-ncol(X)]), c(X[,-1]) )
    if(prob) tt <- tt / rowSums(tt)
    tt
}

데이터 프레임에서 호출해야 할 경우 언제든지 할 수 있습니다

trans.matrix(as.matrix(dat))

타사 패키지를 찾고 있다면 Rseek 또는 R 검색 사이트에서 추가 리소스를 제공 할 수 있습니다.


1
+1 포함 HMM되어 RHMM있고 도움이 될 수있는 여러 R 패키지 가 있습니다.
Wayne

@Wayne : (+1) 난에서 사용할 수있는 다양한 HMM 패키지가 발견 R매우 는 피팅에 관해서 특히, 과거에 몹시 신경을 쓰는 내가 한 내가 진정으로 좋아하거나 신뢰를 찾을 수 없습니다. 어쩌면 지금 상황이 나아질 것입니다. 나는 그들이 이것을 올바르게 얻을 것이라고 상상할 것입니다. 그러한 해결책을 알고 있다면 답으로 제출하십시오. 기꺼이 투표하겠습니다!
추기경

1
시도했지만 성공하지 못했습니다. 이 문제는 숨겨진 상태와 관련이 없으며 내가 찾은 패키지에는 완전한 HMM보다 적은 기능을 수행하는 유틸리티 기능이 없습니다. 참고로 datOP가 예제로 제공 하는 데이터 프레임 에는 데이터 열이 있으며 열당 전이 행렬 또는 전체 전이 행렬을 원합니까? 아니면 행렬을 벡터로 바꿀 수 있습니까?
Wayne

@ 웨인 : (+1) 좋은 지적을합니다. 나는 한 가정 의 각 행이 있음을 독립적 인 마르코프 체인의 실행이 우리가 추구하는, 그래서 전이 확률 추정이 체인이 병렬로 실행 형성한다. 그러나 이것이 연쇄의 한 끝에서 다음 끝까지 감싸 인 체인이더라도 마코프 구조로 인해 추정치가 여전히 훨씬 더 가깝습니다.
추기경

1
@B_Miner : 그렇습니다. 각 고객이 다른 모든 고객과 독립적으로 행동한다고 ​​합리적으로 가정 할 수 있다면 가능합니다. 이러한 모델과 많은 확장 프로그램은 사용자 행동을 분석 할 때 비교적 일반적으로 사용됩니다 (예 : 웹 사이트를 반복해서 방문하는 경우 등)
Cardinal

25

markovchainS4 프로그래밍 스타일에 따라 새로운 R 패키지를 업로드했습니다 . S4 markovchain 객체를 처리하는 다양한 방법과 함께 일련의 상태에서 Markov 체인을 맞추는 기능이 포함되어 있습니다. 살펴보십시오 :

library(markovchain) 
sequence <- c("a", "b", "a", "a", "a", "a", "b", "a", "b", "a", 
              "b", "a", "a", "b", "b", "b", "a")
mcFit <- markovchainFit(data=sequence)

도움이 될 수 있습니다.


아주 좋은 패키지! 고차 마르코프 체인을 지원 하시겠습니까?
Wayne

나는 Markov 체인에 대한 높은 요청을 받았으며 다른 사람이 코드를 작성하고 있습니다. 코드 개발에 참여하고 싶다면 이메일 주소를 이메일로 보내주십시오.
Giorgio Spedicato

안녕하세요, markovchainFit와 위에 게시 된 기능의 차이점은 무엇입니까? 그들은 같은 결과를 산출합니까? 감사합니다
aaaaa

1
에이아르 자형케이영형V기음h에이나는에프나는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.