一个简单的马尔可夫链

在一个随机过程中,如果事件发生概率在t时刻所处的状态为已知时,它在t + 1时刻只与t时刻的状态有关,而与之前所处的状态无关,则称该过程具有马尔可夫性。

时间和状态都是离散的马尔可夫过程称为马尔可夫链。马尔可夫链在经济学,社会学,生命科学领域有着广泛的应用。这里举例说明。

例子: 姜华平、陈海泳对某城市2002年居民出行方式所占比例进行了调查。结果如下:
公交车bus,自行车Bicycle,步行walk,其他other
19%, 14%, 56%, 11%

本时期各出行方式转移概率如下表(%)
| |bus | bicycle | walk |other|
|—|—|—|—|—|
|bus | 90 | 4 | 2 |4 |
|bicycle | 7 | 86 | 1 |6 |
|walk | 8 | 7 |80 |5 |
|other | 10 | 2 | 3 |85 |

假设该城市居民每天出行总人数为468万人次,出行人数不变,各出行方式的转移概率也不变

问题:

  1. 预测2006年该城市乘公交出行的人数
  2. 经历足够长的时间,求出行方式的比例是多少?

解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
## 分析:这是一个时间齐次马尔科夫过程,可根据转移矩阵的初始定义进行推断
## 第一问
## 根据题目写出转移矩阵
T <- matrix(c(90, 4 , 2 , 4 ,
7 , 86, 1 , 6 ,
8 , 7 , 80, 5 ,
10, 2 , 3 , 85 )/100,
nrow = 4, ncol = 4, byrow = TRUE)
# 初始矩阵
p <- matrix(c(19, 14, 56, 11)/100, nrow = 1, ncol = 4, byrow = TRUE)
## 下一年的概率应该为当年分配概率和转移矩阵的乘积
## 2003
p1 <- p%*%T
## 2004
p2 <- p1%*%T
## 2005
p3 <- p2%*%T
## 2006
p4 <- p3%*%T
## 2006年乘坐公交车出行的总人数应为
res <- 468 * p4[1]

## 第二问,用计算机模拟的方法,通过对转移矩阵的平衡状态近似求解
## 初始化一个空向量
s <- c()
## 假设一个人在初始时刻选择1公交车出行
s[1] <- 1
## 则其在t1时刻选择任何一种出行方式的概率如下
T[s[j-1],]
## 但是他选择的出行方式可以是随机的,故用sample按照前一个状态的概率,随机抽取一次
res <- sample(1:4, size = 1, prob = T[s[j-1],])
## 抽取的结果,就是t1时的状态
## 而 t2时的状态只受到t1时状态的影响,因此又回到T[s[j-1],],至此完成一次模拟
## 每一次抽样都是只受到前一次抽样的影响
for (j in 2:50000)
s[j] <- sample(1:4, size = 1, prob = T[s[j-1],])
## 在进行多次模拟后,马尔可夫链逐渐收敛。
### 模拟50000代的概率分配如下
res <- table(s[1:50000])/50000
names(res) <- c("bus", "bicycle", "walk", "other")

题外

无论假设s[1] = 1,2,3 还是4,进行多次模拟后,所得的结果是非常接近的。这也表明,马尔可夫过程的平衡状态与初始值无关。

参考文献

待添加