Мне нужно сравнить две матрицы вероятности, чтобы узнать степень близости цепей, поэтому я бы использовал полученное значение P для теста.Используйте пакет markovchain для сравнения двух эмпирически оцененных цепей Маркова
Я попытался использовать пакет markovchain r, точнее функцию divergenceTest. Но проблема в том, что функция не реализована должным образом. Он основан на тесте книги «Statistical Inference Based on Divergence Measures» на странице 139, я связался с разработчиками пакета, но они все еще не исправлены, поэтому я попытался реализовать, но у меня возникли проблемы, может ли кто-нибудь помочь мне найти ошибку ?
Параметры: 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)
}
Здравствуйте профессор, эта функция теперь кажется, работает хорошо! Но в документации только говорится, что тест статьи [S. Kullback вообще, тесты для таблиц непредвиденных обстоятельств и цепочки марков], правильно? Я хотел бы знать конкретно, какое уравнение вы внедрили, так как мне нужно понять тест, и у меня возникают трудности. Заранее благодарим! – user2905427
Спасибо, я обновлю соответствующие документы –