Introducción a los procesos estocástico

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.

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.

-> Ejemplo: Suponga que la posibilidad que llueva mañana depende de las condiciones del estado del clima de hoy. No importa las condiciones de los días anteriores, solo del estado del clima de hoy.

Suponga también que si llueve hoy, entonces lloverá mañana con una probabilidad α, y si no llueve hoy, entonces lloverá mañana con una probabilidad β.

setwd("~/Tareas uni/Probabilidad y estadistica")
library(markovchain)
## Package:  markovchain
## Version:  0.8.5-2
## Date:     2020-09-07
## BugReport: https://github.com/spedygiorgio/markovchain/issues

Markov

Ejercicio de cadena de markov en R

documentación del paquete markovchain: 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:

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") 
  • La estructura del objeto mc (cadena de markov) esta dad por str:
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 la cadena de markov 1:
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 la transición de la cadena, utilizamos el comando plot:

plot(mc)

-> Asignación:

Encontrar un ejemplo práctico en código implementado en R de la cadena de markov a algún problema en particular y explicarlo.

Para crear una cadena de Markov discreta o continua, utilizaremos la función new. Esta función recibe, entre otros, los parámetros Class,states, byrow,y transitionMatrix. El parámetro Class es de tipo String y permite especificar el tipo de cadena de Markov a crear. Para crear una CMTD usamos Class=“markovchain”, y para crear una CMTC usamos Class=“ctmc”. El parámetro states es un vector de tipo Character que indica el espacio de estados de la cadena de Markov. El parámetro byrow de tipo Boolean indica si la matriz de transición se encuentra organizada por filas o por columnas. Así pues, si la matriz se especifica por filas, debemos asignar by.row=TRUE. Por otro lado, el parámetro transitionMatrix es una matriz con las probabilidades o tasas de transición entre estados. Enseguida se presentan ejemplos sobre cómo crear cadenas de Markov de tiempo discreto y continuo.

Ejemplo 1. Cadena de Markov de Tiempo Discreto Ergódica. Sea Xn el clima en Bogotá el día n, donde Sx={Soleado,Nublado,Lluvioso}. La matriz de probabilidades de transición a un paso se presenta enseguida:

En primer lugar, vamos a crear un vector con los estados, y una matriz con las probabilidades de transición:

estadosClima = c("Soleado", "Nublado", "Lluvioso")
probabilidadesClima = matrix(data = c(0.70, 0.2, 0.1, 0.3, 0.4, 0.3, 0.2, 0.45, 0.35), byrow = TRUE, nrow = 3, ncol=3)

probabilidadesClima
##      [,1] [,2] [,3]
## [1,]  0.7 0.20 0.10
## [2,]  0.3 0.40 0.30
## [3,]  0.2 0.45 0.35

Ahora bien, crearemos esta cadena de Markov en R, con el nombre cmClima. Especificamos como parámetros el espacio de estados, y la matriz de probabilidades de transición definidos antes.

cmClima = new(Class="markovchain", states = estadosClima, byrow = TRUE, transitionMatrix = probabilidadesClima)

Una vez creada la cadena de Markov, podemos conocer sus estados con el comando states, su número de estados con el comando dim, y su matriz de probabilidades de transición con el comando print:

states(cmClima)
## [1] "Soleado"  "Nublado"  "Lluvioso"
dim(cmClima)
## [1] 3
print(cmClima)
##          Soleado Nublado Lluvioso
## Soleado      0.7    0.20     0.10
## Nublado      0.3    0.40     0.30
## Lluvioso     0.2    0.45     0.35

Para acceder a la probabilidad de transición entre dos estados particulares, utilizamos el comando transitionProbability.

transitionProbability(cmClima, "Nublado", "Lluvioso")
## [1] 0.3

Supongamos que queremos hallar la probabilidad de que la cadena se encuentre en cada uno de los estados en dos días, teniendo un vector de probabilidades iniciales: α=(0,1,0). Para esto, en primer lugar, creamos el vector de probabilidades iniciales en R:

alpha <- c(0, 1, 0)

Ahora bien, para hallar la probabilidad solicitada debemos hacer la siguiente operación:

α⋅P2

Así pues, realizamos lo siguiente:

probabilidadesDosPasos <- alpha * (cmClima^2)

probabilidadesDosPasos
##      Soleado Nublado Lluvioso
## [1,]    0.39   0.355    0.255

Podemos verificar si la cadena de Markov es irreducible utilizando el método is.irreducible. Para cadenas de Markov de tiempo discreto irreducibles, también podemos hallar el periodo utilizando el método period:

is.irreducible(cmClima)
## [1] TRUE
period(cmClima)
## [1] 1

Debido a que la cadena es aperiódica e irreducible, concluimos que es ergódica y podemos hallar las probabilidades en estado estable, utilizando el comando steadyStates:

steadyStates(cmClima)
##        Soleado   Nublado  Lluvioso
## [1,] 0.4636364 0.3181818 0.2181818

Adicionalmente, podemos verificar si un estado j es alcanzable desde un estado i, utilizando el método is.accessible. Este método recibe los parámetros object, from y to. El parámetro object es la cadena de Markov, el parámetro from es el estado inicial i, y el parámetro to es el estado final j.

is.accessible(object=cmClima,from="Soleado", to="Lluvioso")
## [1] TRUE