Python y R: una perspectiva markoviana

Hoy he visto

aquí y he escrito

m <- matrix(c(74, 15, 10, 1, 11, 50, 38, 1, 
              5, 4, 90, 1, 17, 4, 19, 60), 
            4, 4, byrow = TRUE)
m <- m / 100

luego

m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m%*% m%*% m%*% m%*% m%*% m%*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m %*% m%*% m%*% m%*% m%*% m%*% m%*% m
#          [,1]      [,2]      [,3]       [,4]
#[1,] 0.1926676 0.1133218 0.6696203 0.02439024
#[2,] 0.1926647 0.1133206 0.6696245 0.02439024
#[3,] 0.1926638 0.1133202 0.6696258 0.02439024
#[4,] 0.1926675 0.1133218 0.6696205 0.02439025

y finalmente

res <- eigen(t(m))
res$vectors[,1] / sum(res$vectors[,1])
#[1] 0.19266473 0.11332059 0.66962444 0.02439024

Aquí dice por qué.

2 comentarios sobre “Python y R: una perspectiva markoviana

  1. Iñaki 6 septiembre, 2017 12:33

    Más corto:

    library(expm)
    m%^%100
    #           [,1]      [,2]      [,3]       [,4]
    # [1,] 0.1926647 0.1133206 0.6696244 0.02439024
    # [2,] 0.1926647 0.1133206 0.6696244 0.02439024
    # [3,] 0.1926647 0.1133206 0.6696244 0.02439024
    # [4,] 0.1926647 0.1133206 0.6696244 0.02439024
    

    O mejor todavía:

    library(markovchain)
    languages <- new("markovchain", 
                     states = c("R", "both", "Python", "other"), 
                     transitionMatrix = m)
    plot(languages)
    # el diagrama
    states(languages)
    steadyStates(languages)
    #              R      both    Python      other
    # [1,] 0.1926647 0.1133206 0.6696244 0.02439024
    
  2. Olivier 6 septiembre, 2017 12:37

    Es este metodo (metodo de las potencias) que utiliza Google para calcular el primer autovector (el famoso pagerank) de la matriz de vecindidades de la red.

Los comentarios están desabilitados.