2014-01-22 1 views
1

나는 일련의 이벤트가 :R에서 markovchainFit을 사용하여 마르코프 체인을 얻은 후 상태 전이 확률을 식별하는 방법?

library(markovchain) 
sequence<-c("LHR - BA","BOS - BA","BOS - ZE","IAD - ZE","BOS - BA","LHR - BA", 
      "LGW - BA","TPA - BA","TPA - BA","LGW - BA","LHR - BA","BOS - BA", 
      "BOS - ZE","BOS - ZE","BOS - BA","LHR - BA","LHR - BA","BOS - BA", 
      "BOS - ZE","BOS - ZE","BOS - DL","ATL - DL","LHR - BA","BRU - BA") 

이 순서를 사용하여, 나는 다음과 같은 기능을 사용하여 마르코프 체인을 얻을 :

sequenceMatr <- createSequenceMatrix(sequence, sanitize=FALSE) 
mcFit  <- markovchainFit(data=sequence, method="mle") 

다음 상태가 "LHR - BA" 것을 고려;

  "LHR - BA", "BOS - ZE", "IAD - ZE", "BOS - BA", "LHR - BA", "LGW - BA", "TPA - BA" 
"LHR - BA"  0.1 ,  0.2 , 0.2 ,  0.3 ,  0.1 ,  0.1 ,  0.1 

답변

1

내가 이해하기 조금 어려운 질문을 찾을 수 있지만, 여기 내 해석은 다음과 같습니다 그렇다면 나는 다음과 같은 형식으로 상태에서 확률 분포를 식별 할.

다음 상태가 "LHR - BA" 인 것을 고려하십시오. 어떻게 그때

그래서 나는이 글을 읽을 방법은, 당신이 알고있는 상태에서 확률 분포를 파악 않는 시간에 +1 시스템 상태 "LHR - BA"에 당신은 시간에 분포 확률을 알고 싶어요 t. 즉, 당신은 무조건적인 분포의 일부 추정이 필요,이 확률이 작동하지

P(S(t)=x) * P(S(t+1)="LHR - BA" | S(t)=x)/P(S(t+1)="LHR - BA") 

같다 Bayes' law에 따르면 조건부 확률

P(S(t)=x | S(t+1)="LHR - BA") 

을합니다. t과 합리적인 (여기서는 정확한 용어를 모르는) 마르코프 체인의 경우 간단히 (희망적으로 고유 한) 정상 상태를 취할 수 있습니다.

mcEst <- mcFit$estimate 
mcSteady <- steadyStates(mcEst) 
sapply(states(mcEst), function(x) transitionProbability(mcEst, x, "LHR - BA")*mcSteady[1,x]/mcSteady[1,"LHR - BA"]) 

을하지만 아마 당신은 더 좋은 방법이 쓰고 싶어하고, 가능한 모든 S(t+1) 아니라 "LHR - BA"에 대한 행이 : 그 해석하면 매우 직접적인 방식으로 R에 상기 식을 변환 할 수 있습니다. 이를 위해서는 transitionProbability을 호출하는 대신에 변환 행렬을 직접 처리해야합니다. 왜냐하면이 방법은 벡터화 된 인수를 제대로 사용할 수 없기 때문입니다.

tm <- [email protected] 
if ([email protected]) tm <- t(tm) 
res <- tm * t(outer(mcSteady[1,], mcSteady[1,], "/")) 

처음 두 줄은 천이 행렬을 획득하고, 행 (제 1 인덱스)가 목표 상태와 열 (제 인덱스) 소스 상태인지 확인. 이런 종류의 작업을 수행하는 배송 기능은 getMethods("transitionProbability")을 참조하십시오. 그 시점에서 그래서 당신은 당신이 다음 정상 상태를 가지고, 모든 가능한 조합을

tm[i,j] = P(S(t+1)=i | S(t)=j) 

있습니다. 당신은

outer(mcSteady[1,], mcSteady[1,], "/")[i,j] = mcSteady[1,i]/mcSteady[1,j] 

입니다. 이것은 잘못된 방법입니다.그래서 당신은 조옮김하고 최종 결과를 얻기 위해 당신 곱 tm에 의해

t(outer(mcSteady[1,], mcSteady[1,], "/"))[i,j] = mcSteady[1,j]/mcSteady[1,i] 

수 :

res[i,j] = P(S(t+1)=i | S(t)=j) * P(S(t)=j)/P(S(t+1)=i) 

그 결과 테이블의 각 행을 주어진 후속 상태에 대해 한 유통 될 것입니다. 요청한 사람을 포함 :

> res["LHR - BA",] 
    ATL - DL BOS - BA BOS - DL BOS - ZE BRU - BA IAD - ZE LGW - BA 
0.23379630 0.37037037 0.00000000 0.00000000 0.02083333 0.00000000 0.20833333 
    LHR - BA TPA - BA 
0.16666667 0.00000000