2016-11-24 1 views
0

두 개의 확률 행렬을 비교하여 체인의 근접 정도를 알아야하므로 결과 P- 값을 사용합니다.markovchain 패키지를 사용하여 두 개의 경험적으로 추정 된 마르코프 체인을 비교하십시오.

markovchain r 패키지, 특히 divergenceTest 기능을 사용하려고했습니다. 그러나 문제는 함수가 제대로 구현되지 않았다는 것입니다. 139 페이지의 "Statistical Inference Based on Divergence Measures"책의 테스트를 기반으로 패키지 개발자에게 연락을했지만 수정하지 않았으므로 구현하려고했지만 문제가 발생했습니다. 누구든지 오류를 찾도록 도와 줄 수 있습니다 ?

매개 변수 : freq_matrix : 빈도 행렬은 확률 행렬을 추정하는 데 사용됩니다. hypothetic : 행렬은 추정 행렬과 비교하는 데 사용됩니다.

divergenceTest3 <- function(freq_matrix, hypothetic){ 
    n <- sum(freq_matrix) 
    empirical = freq_matrix 
    for (i in 1:length(hypothetic)){ 
    empirical[i,] <- freq_matrix[i,]/rowSums(freq_matrix)[i] 
    } 
    M <- nrow(empirical) 
    v <- numeric() 
    out <- 2 * n/.phi2(1) 
    sum <- 0 
    c <- 0 
    for(i in 1:M){  
    sum2 <- 0 
    sum3 <- 0  
    for(j in 1:M){ 
     if(hypothetic[i, j] > 0){ 
     c <- c + 1 
     }  
     sum2 <- sum2 + hypothetic[i, j] * .phi(empirical[i, j]/hypothetic[i, j]) 
    }  
    v[i] <- rowSums(freq_matrix)[i] 
    sum <- sum + ((v[i]/n) * sum2) 
    } 
    TStat <- out * sum 
    pvalue <- 1 - pchisq(TStat, c-M) 
    cat("The Divergence test statistic is: ", TStat, " the Chi-Square d.f. are: ", c-M," the p-value is: ", pvalue,"\n") 
    out <- list(statistic = TStat, p.value = pvalue) 
    return(out) 
} 
# phi function for divergence test 
.phi <- function(x) { 
    out <- x*log(x) - x + 1 
    return(out) 
} 
# another phi function for divergence test 
.phi2 <- function(x) { 
    out <- 1/x 
    return(out) 
} 

답변

0

발산 테스트는 verifyHomogeneity 기능으로 대체되었습니다. 원시 전이 행렬로 강제 변환 될 수있는 요소 목록을 요구하고 입력합니다 (createSequenceMatrix 기준). 그런 다음 동일한 미지의 DTMC에 속하는지 테스트합니다.

는 아래의 예를 참조하십시오

myMatr1<-matrix(c(0.2,.8,.5,.5),byrow=TRUE, nrow=2) 
myMatr2<-matrix(c(0.5,.5,.4,.6),byrow=TRUE, nrow=2) 
mc1<-as(myMatr1,"markovchain") 
mc2<-as(myMatr2,"markovchain") 
mc 
mc2 
sample1<-rmarkovchain(n=100, object=mc1) 
sample2<-rmarkovchain(n=200, object=mc2) 
# should reject 
verifyHomogeneity(inputList = list(sample1,sample2)) 
#should accept 
sample2<-rmarkovchain(n=200, object=mc1) 
verifyHomogeneity(inputList = list(sample1,sample2)) 
+0

안녕하세요 교수,이 기능은 이제 잘 작동하는 것 같다! 그러나이 문서에서는 오직 [S. Kullback, Contingency Tables 및 Markov Chains에 대한 테스트], 맞습니까? 테스트를 이해해야하고 어려움을 겪고 있기 때문에 어떤 방정식을 구현했는지 구체적으로 알고 싶습니다. 미리 감사드립니다. – user2905427

+0

감사합니다. 그에 따라 문서를 업데이트 할 예정입니다. –

관련 문제