rm(list=ls())
## data
dat <- c(2,3,3,2,1,1,1,1,1,2,
       3,1,3,2,3,3,2,1,2,2,
       3,2,3,2,3,3,2,2,2,2,
       3,1,3,2,3,3,2,2,1,2,
       3,2,3,2,1,3,2,2,3,2,
       3,1,3,2,3,3,2,2,2,3,
       3,2,3,2,3,3,1,2,3,2,
       3,2,3,2,3,3,1,2,2,2,
       3,2,3,2,1,3,2,1,2,3,
       3,1,3,2,3,3,2,1,2,1)
## Plot data
plot(dat, type = "s")
points(1:100, dat, pch = 19, cex = 0.5)

## Observed transtions
f.m <- matrix(ncol = 3, nrow = 3)
n <- length(dat)
f.m[1,1] <- sum(dat[-n] == 1 & (dat[-1] - dat[-n]) == 0)
f.m[1,2] <- sum(dat[-n] == 1 & (dat[-1] - dat[-n]) == 1)
f.m[1,3] <- sum(dat[-n] == 1 & (dat[-1] - dat[-n]) == 2)
f.m[2,1] <- sum(dat[-n] == 2 & (dat[-1] - dat[-n]) == -1)
f.m[2,2] <- sum(dat[-n] == 2 & (dat[-1] - dat[-n]) == 0)
f.m[2,3] <- sum(dat[-n] == 2 & (dat[-1] - dat[-n]) == 1)
f.m[3,1] <- sum(dat[-n] == 3 & (dat[-1] - dat[-n]) == -2)
f.m[3,2] <- sum(dat[-n] == 3 & (dat[-1] - dat[-n]) == -1)
f.m[3,3] <- sum(dat[-n] == 3 & (dat[-1] - dat[-n]) == 0)
f.m
     [,1] [,2] [,3]
[1,]    4    7    6
[2,]    8   10   24
[3,]    6   24   10

MLE

gamma.m <- matrix(ncol = 3, nrow = 3)
gamma.m[1, ] <- f.m[1, ] / sum(dat[-n] == 1)
gamma.m[2, ] <- f.m[2, ] / sum(dat[-n] == 2)
gamma.m[3, ] <- f.m[3, ] / sum(dat[-n] == 3)

Stationardat Distribution

u.m <- matrix(1, ncol = 3, nrow = 3)
i.m <- diag(3)
delta.m <- c(1, 1, 1) %*% solve(i.m - gamma.m + u.m)
delta.m %*% gamma.m - delta.m  # It is a stationardat distribution
              [,1]         [,2]         [,3]
[1,] -1.665335e-16 5.551115e-17 1.110223e-16
l <- sum(f.m * log(gamma.m))  # Log likelihood

Testing H0: independence

gamma.m_0 <- matrix(ncol = 3, nrow = 3)
gamma.m_0[ ,1] <- sum(dat[-1] == 1) / (length(dat) - 1)
gamma.m_0[ ,2] <- sum(dat[-1] == 2) / (length(dat) - 1)
gamma.m_0[ ,3] <- sum(dat[-1] == 3) / (length(dat) - 1)
gamma.m_0
          [,1]      [,2]      [,3]
[1,] 0.1818182 0.4141414 0.4040404
[2,] 0.1818182 0.4141414 0.4040404
[3,] 0.1818182 0.4141414 0.4040404
l0 <- sum(f.m * log(gamma.m_0))
Q <- 2 * (l - l0)
1 - pchisq(Q, df = 6 - 2)
[1] 0.01366082

So it’s not independece distribution.

test using contengencdat tables

f.m_0 <- gamma.m_0
f.m_0[1, ] <- f.m_0[1, ] * sum(dat[-1] == 1)
f.m_0[2, ] <- f.m_0[2, ] * sum(dat[-1] == 2)
f.m_0[3, ] <- f.m_0[3, ] * sum(dat[-1] == 3)
Q <- sum((f.m - f.m_0)^2 / f.m_0)
1 - pchisq(Q, df = 2 * 2)
[1] 0.01360463

So it’s not independece distribution.

LS0tCnRpdGxlOiAiTWFya292IENoYWluIE1vZGVsOiAxMjMiCm91dHB1dDogaHRtbF9ub3RlYm9vawphdXRob3I6IEVkd2FyZCBKLiBYdQpkYXRlOiBEZWNlbWJlciAxc3QsIDIwMTgKLS0tCgpgYGB7cn0Kcm0obGlzdD1scygpKQpgYGAKCgpgYGB7cn0KIyMgZGF0YQpkYXQgPC0gYygyLDMsMywyLDEsMSwxLDEsMSwyLAogICAgICAgMywxLDMsMiwzLDMsMiwxLDIsMiwKICAgICAgIDMsMiwzLDIsMywzLDIsMiwyLDIsCiAgICAgICAzLDEsMywyLDMsMywyLDIsMSwyLAogICAgICAgMywyLDMsMiwxLDMsMiwyLDMsMiwKICAgICAgIDMsMSwzLDIsMywzLDIsMiwyLDMsCiAgICAgICAzLDIsMywyLDMsMywxLDIsMywyLAogICAgICAgMywyLDMsMiwzLDMsMSwyLDIsMiwKICAgICAgIDMsMiwzLDIsMSwzLDIsMSwyLDMsCiAgICAgICAzLDEsMywyLDMsMywyLDEsMiwxKQoKIyMgUGxvdCBkYXRhCnBsb3QoZGF0LCB0eXBlID0gInMiKQpwb2ludHMoMToxMDAsIGRhdCwgcGNoID0gMTksIGNleCA9IDAuNSkKYGBgCgpgYGB7cn0KIyMgT2JzZXJ2ZWQgdHJhbnN0aW9ucwpmLm0gPC0gbWF0cml4KG5jb2wgPSAzLCBucm93ID0gMykKbiA8LSBsZW5ndGgoZGF0KQpmLm1bMSwxXSA8LSBzdW0oZGF0Wy1uXSA9PSAxICYgKGRhdFstMV0gLSBkYXRbLW5dKSA9PSAwKQpmLm1bMSwyXSA8LSBzdW0oZGF0Wy1uXSA9PSAxICYgKGRhdFstMV0gLSBkYXRbLW5dKSA9PSAxKQpmLm1bMSwzXSA8LSBzdW0oZGF0Wy1uXSA9PSAxICYgKGRhdFstMV0gLSBkYXRbLW5dKSA9PSAyKQpmLm1bMiwxXSA8LSBzdW0oZGF0Wy1uXSA9PSAyICYgKGRhdFstMV0gLSBkYXRbLW5dKSA9PSAtMSkKZi5tWzIsMl0gPC0gc3VtKGRhdFstbl0gPT0gMiAmIChkYXRbLTFdIC0gZGF0Wy1uXSkgPT0gMCkKZi5tWzIsM10gPC0gc3VtKGRhdFstbl0gPT0gMiAmIChkYXRbLTFdIC0gZGF0Wy1uXSkgPT0gMSkKZi5tWzMsMV0gPC0gc3VtKGRhdFstbl0gPT0gMyAmIChkYXRbLTFdIC0gZGF0Wy1uXSkgPT0gLTIpCmYubVszLDJdIDwtIHN1bShkYXRbLW5dID09IDMgJiAoZGF0Wy0xXSAtIGRhdFstbl0pID09IC0xKQpmLm1bMywzXSA8LSBzdW0oZGF0Wy1uXSA9PSAzICYgKGRhdFstMV0gLSBkYXRbLW5dKSA9PSAwKQpmLm0KYGBgCgojIyBNTEUKCmBgYHtyfQpnYW1tYS5tIDwtIG1hdHJpeChuY29sID0gMywgbnJvdyA9IDMpCmdhbW1hLm1bMSwgXSA8LSBmLm1bMSwgXSAvIHN1bShkYXRbLW5dID09IDEpCmdhbW1hLm1bMiwgXSA8LSBmLm1bMiwgXSAvIHN1bShkYXRbLW5dID09IDIpCmdhbW1hLm1bMywgXSA8LSBmLm1bMywgXSAvIHN1bShkYXRbLW5dID09IDMpCmBgYAoKIyMgU3RhdGlvbmFyZGF0IERpc3RyaWJ1dGlvbgoKYGBge3J9CnUubSA8LSBtYXRyaXgoMSwgbmNvbCA9IDMsIG5yb3cgPSAzKQppLm0gPC0gZGlhZygzKQpkZWx0YS5tIDwtIGMoMSwgMSwgMSkgJSolIHNvbHZlKGkubSAtIGdhbW1hLm0gKyB1Lm0pCmRlbHRhLm0gJSolIGdhbW1hLm0gLSBkZWx0YS5tICAjIEl0IGlzIGEgc3RhdGlvbmFyZGF0IGRpc3RyaWJ1dGlvbgpsIDwtIHN1bShmLm0gKiBsb2coZ2FtbWEubSkpICAjIExvZyBsaWtlbGlob29kCmBgYAoKIyMgVGVzdGluZyBIMDogaW5kZXBlbmRlbmNlCgpgYGB7cn0KZ2FtbWEubV8wIDwtIG1hdHJpeChuY29sID0gMywgbnJvdyA9IDMpCmdhbW1hLm1fMFsgLDFdIDwtIHN1bShkYXRbLTFdID09IDEpIC8gKGxlbmd0aChkYXQpIC0gMSkKZ2FtbWEubV8wWyAsMl0gPC0gc3VtKGRhdFstMV0gPT0gMikgLyAobGVuZ3RoKGRhdCkgLSAxKQpnYW1tYS5tXzBbICwzXSA8LSBzdW0oZGF0Wy0xXSA9PSAzKSAvIChsZW5ndGgoZGF0KSAtIDEpCmdhbW1hLm1fMApgYGAKCmBgYHtyfQpsMCA8LSBzdW0oZi5tICogbG9nKGdhbW1hLm1fMCkpClEgPC0gMiAqIChsIC0gbDApCjEgLSBwY2hpc3EoUSwgZGYgPSA2IC0gMikKYGBgClNvIGl0J3Mgbm90IGluZGVwZW5kZWNlIGRpc3RyaWJ1dGlvbi4KCiMjIyB0ZXN0IHVzaW5nIGNvbnRlbmdlbmNkYXQgdGFibGVzCgpgYGB7cn0KZi5tXzAgPC0gZ2FtbWEubV8wCmYubV8wWzEsIF0gPC0gZi5tXzBbMSwgXSAqIHN1bShkYXRbLTFdID09IDEpCmYubV8wWzIsIF0gPC0gZi5tXzBbMiwgXSAqIHN1bShkYXRbLTFdID09IDIpCmYubV8wWzMsIF0gPC0gZi5tXzBbMywgXSAqIHN1bShkYXRbLTFdID09IDMpClEgPC0gc3VtKChmLm0gLSBmLm1fMCleMiAvIGYubV8wKQoxIC0gcGNoaXNxKFEsIGRmID0gMiAqIDIpCmBgYApTbyBpdCdzIG5vdCBpbmRlcGVuZGVjZSBkaXN0cmlidXRpb24uCgoKCg==