Ngoài Markov Property (MP), một thuộc tính nữa là Time Homogeneity (TH): có thể là Markov nhưng với ma trận chuyển tiếp
P ( t ) tùy thuộc vào thời gian t . Ví dụ, nó có thể phụ thuộc vào các ngày trong tuần tại t nếu quan sát được hàng ngày, và sau đó một sự phụ thuộc
X t trên X t - 7 điều kiện trên X t - 1 có thể được chẩn đoán nếu TH là quá mức giả định.XtP(t)ttXtXt−7Xt−1
Giả sử TH giữ, một kiểm tra khả dĩ cho MP đang kiểm tra xem độc lập với X t - 2 có điều kiện trên X t - 1 , như Michael Chernick và StasK đề xuất. Điều này có thể được thực hiện bằng cách sử dụng một bài kiểm tra cho bảng dự phòng. Chúng ta có thể xây dựng n bảng dự phòng của X t và X t - 2 có
điều kiện trên { X t - 1 = x j } cho n giá trị có thể x jXtXt−2Xt−1nXtXt−2{Xt−1=xj}nxjvà kiểm tra tính độc lập Đây cũng có thể được thực hiện bằng
với ℓ > 1 ở vị trí của X t - 2 .Xt−ℓℓ>1Xt−2
Trong R, các bảng hoặc mảng dự phòng dễ dàng được tạo ra nhờ vào cơ sở nhân tố và các hàm apply
,
sweep
. Ý tưởng trên cũng có thể được khai thác bằng đồ họa. Các gói ggplot2 hoặc mạng dễ dàng cung cấp các ô có điều kiện để so sánh các phân phối có điều kiện . Ví dụ, đặt i làm chỉ mục hàng và jp(Xt|Xt−1=xj,Xt−2=xi)ij vì chỉ mục cột trong lưới mắt cáo nên theo MP dẫn đến các phân phối tương tự trong một cột.
Các chap. 5 của cuốn sách Phân tích thống kê về các quá trình ngẫu nhiên theo thời gian của JK Lindsey chứa các ý tưởng khác để kiểm tra các giả định.
[## simulates a MC with transition matrix in 'trans', starting from 'ini'
simMC <- function(trans, ini = 1, N) {
X <- rep(NA, N)
Pcum <- t(apply(trans, 1, cumsum))
X[1] <- ini
for (t in 2:N) {
U <- runif(1)
X[t] <- findInterval(U, Pcum[X[t-1], ]) + 1
}
X
}
set.seed(1234)
## transition matrix
P <- matrix(c(0.1, 0.1, 0.1, 0.7,
0.1, 0.1, 0.6, 0.2,
0.1, 0.3, 0.2, 0.4,
0.2, 0.2, 0.3, 0.3),
nrow = 4, ncol = 4, byrow = TRUE)
N <- 2000
X <- simMC(trans = P, ini = 1, N = N)
## it is better to work with factors
X <- as.factor(X)
levels(X) <- LETTERS[1:4]
## table transitions and normalize each row
Phat <- table(X[1:(N-1)], X[2:N])
Phat <- sweep(x = Phat, MARGIN = 1, STATS = apply(Phat, 1, sum), FUN = "/")
## explicit dimnames
dimnames(Phat) <- lapply(list("X(t-1)=" ,"X(t)="),
paste, sep = "", levels(as.factor(X)))
## transition 3-fold contingency array
P3 <- table(X[1:(N-2)], X[2:(N-1)], X[3:N])
dimnames(P3) <- lapply(list("X(t-2)=", "X(t-1)=" ,"X(t)="),
paste, sep = "", levels(as.factor(X)))
## apply ONE indendence test
fisher.test(P3[ , 1, ], simulate.p.value = TRUE)
## plot conditional distr.
library(lattice)
X3 <- data.frame(X = X[3:N], lag1X = X[2:(N-1)], lag2X = X[1:(N-2)])
histogram( ~ X | lag1X + lag2X, data = X3, col = "SteelBlue3")
]