Dre*_*rey 1 r eigenvalue eigenvector markov-models
我很难确定马尔可夫模型的平稳分布。我开始理解理论和联系:给定一个随机矩阵,要确定平稳分布,我们需要找到最大特征值(即 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
Run Code Online (Sandbox Code Playgroud)
之后我使用Reigen函数
ew <- eigen(stoma)
Run Code Online (Sandbox Code Playgroud)
但我不明白结果
> 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
Run Code Online (Sandbox Code Playgroud)
最大值 (1) 的向量具有所有相同的分量值“-0.4472136”。即使我改变种子,绘制不同的数字,我也会再次得到相同的值。我想念什么?为什么特征向量的分量都是相等的?为什么它们的总和不等于 1 - 因为这应该是一个固定分布?
感谢您的帮助!
这是左右特征向量之间的混淆。试试eigen(t(stoma))。
我发现尝试维基百科关于随机矩阵的文章中的例子很有用:
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
Run Code Online (Sandbox Code Playgroud)
检查它是一个随机矩阵:
rowSums(p)
## [1] 1 1 1 1 1
Run Code Online (Sandbox Code Playgroud)
特征值:
zapsmall(eigen(p)$values)
## [1] 1.0000000 0.7071068 -0.7071068 0.0000000 0.0000000
Run Code Online (Sandbox Code Playgroud)
特征向量:
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
Run Code Online (Sandbox Code Playgroud)
(结果与您相同,但符号任意翻转。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
Run Code Online (Sandbox Code Playgroud)