U3A2

Felipe Escarrega

20/11/2020

U3A2 - Introducción a la relación entre eventos con análisis de cadenas de markov y análisis montecarlo

MARK.jpg

Procesos estocásticos

En la teoría de la probabilidad, un proceso estocástico es un concepto matemático que sirve para usar magnitudes aleatorias que varían con el tiempo o para caracterizar una sucesión de variables aleatorias (estocásticas) que evolucionan en función de otra variable, generalmente el tiempo. Cada una de las variables aleatorias del proceso tiene su propia función de distribución de probabilidad y pueden o no estar correlacionadas entre sí.

Cada variable o conjunto de variables sometidas a influencias o efectos aleatorios constituye un proceso estocástico. Un proceso estocástico \(xt\) puede entenderse como una familia uniparamétrica de variables aleatorias indexadas mediante el tiempo t. Los procesos estocásticos permiten tratar procesos dinámicos en los que hay cierta aleatoriedad.

  • Ejemplos

Los siguientes son ejemplos dentro del amplio grupo de las series temporales: • señales de telecomunicación; • señales biomédicas (electrocardiograma, encefalograma, etc.); • señales sísmicas; • el número de manchas solares año tras año; • el índice de la bolsa segundo a segundo; • la evolución de la población de un municipio año tras año; • el tiempo de espera en la cola de cada uno de los usuarios que van llegando a una ventanilla; • el clima, un gigantesco conjunto de procesos estocásticos interrelacionados (velocidad del viento, humedad del aire, etcétera) que evolucionan en el espacio y en el tiempo; • los procesos estocásticos de orden mayor a uno, como el caso de una serie de tiempo de orden 2 y una correlación de cero con las demás observaciones.

Cádenas de markov

Una cadena de Markov es una serie de eventos, en la cual la probabilidad de que ocurra un evento depende del evento inmediato anterior. En efecto, las cadenas de este tipo tienen memoria, “Recuerdan” el último evento y esto condiciona las posibilidades de los eventos futuros.

Esta dependencia del evento anterior distingue a las cadenas de Markov de las series de eventos independientes, como tirar una moneda al aire o un dado. En los negocios, las cadenas de Markov se han utilizado para analizar los patrones de compra,los deudores morosos, para planear las necesidades de personal y para analizar el reemplazo de equipo.

El anáisis de Markov, llamado así en honor de un matemático ruso que desarrollo el m�todo en 1907, permite encontrar la probabilidad de que un sistema se encuentre en un estado en particular en un momento dado. Algo m�s importante a�n, es que permite encontrar el promedio a la larga o las probabilidades de estado estable para cada estado. Con esta informaci�n se puede predecir el comportamiento del sistema a trav�s del tiempo. La tarea m�s dif�cil es reconocer cu�ndo puede aplicarse. La caracteristica m�s importante que hay que buscar en la memoria de un evento a otro.

Cadenas de markov implementadas en R

-> instalar el paquete markovchain

-> Activar el paquete markov chain

library(markovchain)
## Package:  markovchain
## Version:  0.8.5-2
## Date:     2020-09-07
## BugReport: https://github.com/spedygiorgio/markovchain/issues

documentación: https://cran.r-project.org/web/packages/markovchain/markovchain.pdf

Esta libreria pretende proveer objetos para realizar analisis estadísticos de cadenas de markov a tiempos discretos. Asumamos que tenemos una cadena de markov X={X1,X2,…} definida en el espacio de estados S={a,b,c} y cuya matriz de transición es:

\[ P = \left( {\begin{array}{ccc} 0 & 0.5 & 0.5 \\ 0.5 & 0 & 0.5 \\ 0.5 & 0.5 & 0 \\ \end{array} } \right) \]

Dicha cadena podemos crearla en R, de la siguiente forma:

  1. Crear la matriz de transicion P:
P = matrix(c(0,0.5,0.5,.5,0,.5,.5,.5,0),nrow = 3,byrow = TRUE) 
P
##      [,1] [,2] [,3]
## [1,]  0.0  0.5  0.5
## [2,]  0.5  0.0  0.5
## [3,]  0.5  0.5  0.0

El argumento “nrows” de la funcion matrix es para declarar el numero de filas que deseamos que nuestra matriz P posea, y el argumento “byrows” es para que almacene los elementos de la matriz almacenados en c(), fila por fila.

Crear la matriz de transición creamos el objeto “markovchain” de la siguiente forma:

mc = new("markovchain",transitionMatrix=P,states=c("a","b","c"),name="Cadena 1") 

Una revisión previa al análisis de nuestra cadena se puede realizar mediante los comandos “str()” y “summary”, que devuelven la estructura del objeto y el resumen general de los resultados respectivamente. Para mayor informacion revisar los comandos mediante la función help().

La estructura del objeto mc es:

str(mc)
## Formal class 'markovchain' [package "markovchain"] with 4 slots
##   ..@ states          : chr [1:3] "a" "b" "c"
##   ..@ byrow           : logi TRUE
##   ..@ transitionMatrix: num [1:3, 1:3] 0 0.5 0.5 0.5 0 0.5 0.5 0.5 0
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:3] "a" "b" "c"
##   .. .. ..$ : chr [1:3] "a" "b" "c"
##   ..@ name            : chr "Cadena 1"

resumen de mc

summary(mc)
## Cadena 1  Markov chain that is composed by: 
## Closed classes: 
## a b c 
## Recurrent classes: 
## {a,b,c}
## Transient classes: 
## NONE 
## The Markov chain is irreducible 
## The absorbing states are: NONE

Para visualizar esta cadena de markov simple, utilizamos el comando plot

plot(mc)

Otras funciones importantes son:

  • absorbingStates(): Identifica los estados Absorbentes

  • transientStates(): Identifica los estados Transitorios

  • recurrentClasses(): Identifica las clases recurrentes

Para la cadena de markov definida se obtiene que:

recurrentClasses(mc)
## [[1]]
## [1] "a" "b" "c"
transientStates(mc)
## character(0)
absorbingStates(mc)
## character(0)

Análisis probabilístico usando cadenas de Markov

Para conocer la probabilidad de transición en 1 paso entre un estado y otro basta con utilizar la función transitionProbability(), con los argumentos:

  • object: la cadena de markov

  • t0: el estado en el tiempo 0

  • t1: el estado en el tiempo 1

La probabilidad de transicion en un paso del estado “a” al estado “c” es:

transitionProbability(object = mc, t0="a",t1="c")
## [1] 0.5

Recuerde que dicha probabilidad es un elemento de la matriz de transición P, por lo tanto, la probabilidad de transicion del estado “a” al estado “b” es simplemente P23

mc[2,3]
## [1] 0.5

Es posible computar la matriz de transición en n pasos, simplemente computando la n-ésima potencia de la matriz de transición P, como ejemplo calcularemos la matriz de transición en n = 5 pasos.

n = 5 #número de passos al futuro
mc^n
## Cadena 1^5 
##  A  3 - dimensional discrete Markov Chain defined by the following states: 
##  a, b, c 
##  The transition matrix  (by rows)  is defined as follows: 
##         a       b       c
## a 0.31250 0.34375 0.34375
## b 0.34375 0.31250 0.34375
## c 0.34375 0.34375 0.31250

Tambien se pueden conocer la distribución de la cadena en n pasos adelante (P(Xn)) multiplicando la distribucion inicial de X0 por la matriz de transición en n pasos (Pn), calcule la distribución de la cadena en el tiempo n = 6, si la ditribución inicial de la cadena es “(0.5, 0.2, 0.3)”.

x0 <- c(0.5,0.2,0.3) # la distribución de x en t = 0  
n = 6
Xn <- x0*(mc^n)

Por lo tanto, la distribución de la cadena en y pasos es:

Xn
##              a       b         c
## [1,] 0.3359375 0.33125 0.3328125

-> Asignación

Dibuje el diagrama de transición, determine las clases de comunicación de las siguientes cadenas de Markov, clasifique éstas como recurrentes o transitorias (20%), y encuentre la distribución estacionaria si existe (10%)

\[ P = \left( {\begin{array}{cccc} 1/2 & 1/2 & 0 & 0 \\ 0 & 1/2 & 1/2 & 0 \\ 0 & 1/2 & 1/2 & 0 \\ 1/4 & 1/4 & 1/4 & 1/4 \\ \end{array} } \right) \]

Creación de la matriz

P = matrix(c(0.5,0.5,0,0,0,0.5,0.5,0,0,0.5,0.5,0,0.25,0.25,0.25,0.25),nrow = 4,byrow = TRUE) 
P
##      [,1] [,2] [,3] [,4]
## [1,] 0.50 0.50 0.00 0.00
## [2,] 0.00 0.50 0.50 0.00
## [3,] 0.00 0.50 0.50 0.00
## [4,] 0.25 0.25 0.25 0.25

Creación de la matriz de transición se creo el objeto "markovchin:

mca <- new("markovchain",transitionMatrix=P,states=c("a","b","c","d"),name="Cadena 2")


str(mca)
## Formal class 'markovchain' [package "markovchain"] with 4 slots
##   ..@ states          : chr [1:4] "a" "b" "c" "d"
##   ..@ byrow           : logi TRUE
##   ..@ transitionMatrix: num [1:4, 1:4] 0.5 0 0 0.25 0.5 0.5 0.5 0.25 0 0.5 ...
##   .. ..- attr(*, "dimnames")=List of 2
##   .. .. ..$ : chr [1:4] "a" "b" "c" "d"
##   .. .. ..$ : chr [1:4] "a" "b" "c" "d"
##   ..@ name            : chr "Cadena 2"
summary(mca)
## Cadena 2  Markov chain that is composed by: 
## Closed classes: 
## b c 
## Recurrent classes: 
## {b,c}
## Transient classes: 
## {a},{d}
## The Markov chain is not irreducible 
## The absorbing states are: NONE

Imprimir la imagen

plot(mca)

recurrentClasses(mca)
## [[1]]
## [1] "b" "c"
transientStates(mca)
## [1] "a" "d"
absorbingStates(mca)
## character(0)
transitionProbability(object = mca, t0="a",t1="c")
## [1] 0
mca[2,3]
## [1] 0.5

Es posible simular el futuro de la matriz ej:

n = 5 #número de passos al futuro
mca^n
## Cadena 2^5 
##  A  4 - dimensional discrete Markov Chain defined by the following states: 
##  a, b, c, d 
##  The transition matrix  (by rows)  is defined as follows: 
##            a         b         c            d
## a 0.03125000 0.5000000 0.4687500 0.0000000000
## b 0.00000000 0.5000000 0.5000000 0.0000000000
## c 0.00000000 0.5000000 0.5000000 0.0000000000
## d 0.03027344 0.4990234 0.4697266 0.0009765625

Tambien se piede conocer la distribucion de esta:

x0 <- c(0.5,0.2,0.3,0.4) # la distribución de x en t = 0  
n = 6
Xn <- x0*(mca^n)
Xn
##               a         b         c            d
## [1,] 0.01396484 0.6999023 0.6860352 9.765625e-05

Usos de la cadena de Markov en Mecatronica.

En ingenieria en Mecatroncia las cadenas de marcov se utilizan para calcular cuando una maquinaria requiere mantenimiento preventivo y asegurar su maximo funcionamineto y comportamineto tambien se utiliza para la creacion de sistemas mecatronicos,

Conclusión

Las cadenas de marcov sirven para predecir comportamientos a un futuro como lo que hcimos en el primer ejercicio en este trabajo en general me parece muy interesante que se puedan hacer predicciones simuladas,