2014-01-17 276 views
1

我很难确定马尔可夫模型的平稳分布。我开始明白理论和连接: 给定一个随机矩阵,以dermine平稳分布,我们需要找到的最大特征值的特征向量(即1)计算随机矩阵的特征值/特征向量

我开始产生一个随机矩阵

set.seed(6534) 
stoma <- matrix(abs(rnorm(25)), nrow=5, ncol=5) 
stoma <- (stoma)/rowSums(stoma) # that should make it a stochastic matrix rowSums(stoma) == 1 

后来我使用R eigen功能

ew <- eigen(stoma) 

但我不明白的结果

> ew 
$values 
[1] 1.000000e+00+0.000000e+00i -6.038961e-02+0.000000e+00i -3.991160e-17+0.000000e+00i 
[4] -1.900754e-17+1.345763e-17i -1.900754e-17-1.345763e-17i 

$vectors 
       [,1]   [,2]   [,3]     [,4]     [,5] 
[1,] -0.4472136+0i 0.81018968+0i 0.3647755+0i -0.0112889+0.1658253i -0.0112889-0.1658253i 
[2,] -0.4472136+0i 0.45927081+0i -0.7687393+0i 0.5314923-0.1790588i 0.5314923+0.1790588i 
[3,] -0.4472136+0i 0.16233945+0i 0.2128250+0i -0.7093859+0.0000000i -0.7093859+0.0000000i 
[4,] -0.4472136+0i -0.09217315+0i 0.4214660+0i -0.1305497-0.1261247i -0.1305497+0.1261247i 
[5,] -0.4472136+0i -0.31275073+0i -0.2303272+0i 0.3197321+0.1393583i 0.3197321-0.1393583i 

最大值(1)的矢量具有所有相同的组件值“-0.4472136”。 即使我改变种子,绘制不同的数字,我再次得到相同的值。 我错过了什么?为什么特征向量的组件都是eqaul?为什么他们不总结为1 - 因为这应该是一个固定的分配?

谢谢你的帮助!

+0

如果相关矩阵的尺寸小于期数则矩阵是奇异 – Qbik

回答

4

这是左和右特征向量之间的混淆。尝试eigen(t(stoma))

我认为应该尝试从wikipedia article on stochastic matrices的例子:

p <- matrix(c(0,0,1/4,0,0,0,0,1/4,0,0, 
     1/2,1,0,1/2,0,0,0,1/4,0,0,1/2,0,1/4,1/2,1), 
    ncol=5) 
p 
    [,1] [,2] [,3] [,4] [,5] 
## [1,] 0.00 0.00 0.5 0.00 0.50 
## [2,] 0.00 0.00 1.0 0.00 0.00 
## [3,] 0.25 0.25 0.0 0.25 0.25 
## [4,] 0.00 0.00 0.5 0.00 0.50 
## [5,] 0.00 0.00 0.0 0.00 1.00 

检查它是一个随机矩阵:

rowSums(p) 
## [1] 1 1 1 1 1 

特征值:

zapsmall(eigen(p)$values) 
## [1] 1.0000000 0.7071068 -0.7071068 0.0000000 0.0000000 

特征向量:

print(zapsmall(eigen(p)$vectors),digits=3) 

##  [,1] [,2] [,3] [,4] [,5] 
## [1,] 0.447 0.354 0.354 -0.802 -0.609 
## [2,] 0.447 0.707 0.707 0.535 -0.167 
## [3,] 0.447 0.500 -0.500 0.000 0.000 
## [4,] 0.447 0.354 0.354 0.267 0.776 
## [5,] 0.447 0.000 0.000 0.000 0.000 

(结果与你的一样但是标志是任意翻转的。 R缩放特征向量,以便每列的平方和为1:sqrt(1/5)约为。 0.447 ...)

您正在寻找其他的(左)的特征向量:

print(zapsmall(eigen(t(p))$vectors),digits=3) 
##  [,1] [,2] [,3] [,4] [,5] 
## [1,] 0 -0.149 0.3011 -0.5 0.707 
## [2,] 0 -0.149 0.3011 0.5 0.000 
## [3,] 0 -0.422 -0.8517 0.0 0.000 
## [4,] 0 -0.149 0.3011 -0.5 -0.707 
## [5,] 1 0.869 -0.0517 0.5 0.000 
+0

谢谢!我没有意识到左右特征向量之间的区别。 – Drey

3

的平稳分布(又名稳态)是最容易与markovchain包计算。

library(markovchain) 
mc <- new("markovchain", transitionMatrix = stoma) 
steadyStates(mc) 

这给你相同的答案

ev <- eigen(t(stoma)) 
ev$vectors[, 1]/sum(ev$vectors[, 1]) 
+0

谢谢!据Ben的帖子我明白,我需要找到转置矩阵的特征向量。只需添加一个小的修正:'Re(ev $ vectors [,1]/sum(ev $ vectors [,1]))'我们需要用这个和来归一化。 – Drey

+0

@Drey:有斑点;现在修好了。 –

相关问题