2014-01-17 274 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:有斑點;現在修好了。 –

相關問題