#Instalamos el paquete necesario y usamos la libreria.
library(markovchain)
## Warning: package 'markovchain' was built under R version 4.3.3
## Loading required package: Matrix
## Package: markovchain
## Version: 0.10.0
## Date: 2024-11-14 00:00:02 UTC
## BugReport: https://github.com/spedygiorgio/markovchain/issues
#Creamos y definimos la matriz P.
P <- matrix(c(0,0,1,0,0,0,
0,0,0,0,0,1,
0,0,0,0,1,0,
1/3,1/3,1/3,0,0,0,
1,0,0,0,0,0,
0,1/2,0,0,0,1/2),
nrow = 6,
byrow = TRUE)
#Creamos como tal la cadena de Markov.
M<-new("markovchain", states = c("0", "1", "2", "3", "4", "5"),
byrow = TRUE,
transitionMatrix = P,
name = "Cadena de Markov")
#Hacemos un resumen
summary(M)
## Cadena de Markov Markov chain that is composed by:
## Closed classes:
## 0 2 4
## 1 5
## Recurrent classes:
## {0,2,4},{1,5}
## Transient classes:
## {3}
## The Markov chain is not irreducible
## The absorbing states are: NONE
#Después se puede notar cuales son las clases y su estado
#Clases recurrentes
recurrentClasses(M)
## [[1]]
## [1] "0" "2" "4"
##
## [[2]]
## [1] "1" "5"
#Clases transitorias
transientClasses(M)
## [[1]]
## [1] "3"
En conclusión se tiene: C(1)={0,2,4} La cual es recurrente C(2)={1,5} La cual es recurrente C(3)={3} La cual es transitoria
#Ahora con lo anaterior podemos clasificar cada uno de los estados en transitorios o recurrentes
#Estados recurrentes
recurrentStates(M)
## [1] "0" "1" "2" "4" "5"
#Estados transitorios
transientClasses(M)
## [[1]]
## [1] "3"
En conclusión se tiene que: Clases recurrentes: 0, 1, 2, 4, 5 Clases Transitorias: 3
#c) Calcula el periodo de cada uno de los estados recurrentes.
#Sacamos el periodo
period(M)
## Warning in period(M): The matrix is not irreducible
## [1] 0
#Como la matriz no es irreducible entonces vamos a particionarla para poderle sacar el periodo a cada clase de forma individual
#Al particionarla de esta forma, las maytrices que salen son irreducibles
#Se tiene en la clase C(1)={0,2,4}
PC1 <- matrix(c(0,1,0,
0,0,1,
1,0,0),
nrow = 3,
byrow = TRUE)
MC1<-new("markovchain", states = c("0", "2", "4"),
byrow = TRUE,
transitionMatrix = PC1,
name = "Cadena de Markov Clase 1")
#Se tiene en la clase C(2)={1,5}
PC2 <- matrix(c(0,1,
1/2,1/2),
nrow = 2,
byrow = TRUE)
MC2<-new("markovchain", states = c("1", "5"),
byrow = TRUE,
transitionMatrix = PC2,
name = "Cadena de Markov Clase 2")
#Ahora le sacamos el periodo a cada una de ellas
#Periodo de la clase 1
period(MC1)
## [1] 3
#Periodo de la clase 2
period(MC2)
## [1] 1
Ahora como el periodo de la clase es también el periodo de cada uno de los estados tenemos que: El periodo de C(1)=3 por lo tanto el periodo de los estados 0, 2 y 4 es igual a 3 El periodo de C(2)=1 por lo tanto el periodo de los estados 1 y 5 es igual a 1 (esto también nos dice que son aperiodicos)
Como se tiene que para ser ergódicos tienen que ser aperiodicos (los que cumplen esa condición son los que estan en C(1)) además tienen que ser recurrentes positivos entonces miraremos si los estados de C(1) lo son.
meanRecurrenceTime(MC2)
## 1 5
## 3.0 1.5
Como se puede observar los estados 1 y 5 son estados ergódicos al cumplir con las condiciones.
2.Un jugador llega a un casino con 200 dolares. Decide jugar hasta que su capital sea igual a 700 dolares o hasta que se arruine. En cada ronda de juego el jugador gana o pierde 100 dolares con probabilidades 0.4 y 0.6 respectivamente. ¿A qué es igual la probabilidad de que el jugador logre alcanzar su meta de los 700 dolares?¿Cuál es la probabilidad de ruina del jugador?
#Antes de contestar las preguntas vamos a definir S={0,100,200,300,400,500,600,700} y vamos a definir P
P <- matrix(c(1,0,0,0,0,0,0,0,
0.6,0,0.4,0,0,0,0,0,
0,0.6,0,0.4,0,0,0,0,
0,0,0.6,0,0.4,0,0,0,
0,0,0,0.6,0,0.4,0,0,
0,0,0,0,0.6,0,0.4,0,
0,0,0,0,0,0.6,0,0.4,
0,0,0,0,0,0,0,1),
nrow = 8,
byrow = TRUE)
#Creamos como tal la cadena de Markov.
M <- new("markovchain", states = c("0", "100", "200", "300", "400", "500", "600", "700"),
byrow = TRUE,
transitionMatrix = P,
name = "Cadena de Markov")
#Verificamos cuales son los estados absorbentes a pesar de que sabemos que es 0 y 700 por el planteamiento del problema
absorbingStates(M)
## [1] "0" "700"
#Ahora vamos a mirar la probabilidad de cada uno de estos estados
A <- absorptionProbabilities(M)
A
## 0 700
## 100 0.9689169 0.03108305
## 200 0.9222924 0.07770763
## 300 0.8523555 0.14764449
## 400 0.7474502 0.25254978
## 500 0.5900923 0.40990772
## 600 0.3540554 0.64594463
Ahora con la matriz A se puede notar que cuando el estado inicial es de 200 dolares la probabilidad de ruina es de 0.9222924 y la probabilidad de que gane los 700 dolares es de 0.07770763.
P <- matrix(c(0.6,0.2,0.2,
0.2,0.5,0.3,
0.1,0.5,0.4),
nrow=3,
byrow=TRUE)
M<- new("markovchain",
transitionMatrix=P ,
states=c("A","E","B"),
name="Cadena de Marvok")
Como el señor Pablo tiene también la opción de invertir en las acciones de Davivienda, él decide observar el comportamiento de las acciones de Ecopetrol durante tres días consecutivos,si durante esos tres días él observa que las acciones de Ecopetrol se han mantenido al alza entonces él invertirá todo su dinero en dichas acciones, si durante esos tres días las acciones han estado a la baja, entonces el invertirá todo su dinero en acciones de Davivienda, si se mantienen estables él postergará su decisión de invertir. Supongase que las probabilidades de que las acciones de Ecopetrol se encuentren al alza, estables o a la baja, el día en que el señor Pablo decide iniciar su observación son respectivamente 0.2, 0.5, 0.3
#Se tiene el estado inicial
ei <- c(0.2, 0.5, 0.3)
#Entonces la probabilidad de que pase de E a A es de 0.2 mirando la matriz de transición.
#Luego ya estando en A multiplicamos la matriz P al cuadrado para que nos de la probabilidad de los ultimos dos días se mantenga al alza.
library(expm)
## Warning: package 'expm' was built under R version 4.3.3
##
## Attaching package: 'expm'
## The following object is masked from 'package:Matrix':
##
## expm
P2 <- P %^% 2
P2
## [,1] [,2] [,3]
## [1,] 0.42 0.32 0.26
## [2,] 0.25 0.44 0.31
## [3,] 0.20 0.47 0.33
#Ahora multiplicamos las probabilidades del dia uno con los dos ultimos días
p1 <- ei[1] * P2[1, 1]
p1
## [1] 0.084
En conclusión la probabilidad de que se mantenga a la baja por 3 días es de 0.084
#Entonces como ya tenemos todos los calculos en el inciso a) solo es multiplicar las probabilidades del dia uno con los dos ultimos días
p2 <- ei[3] * P2[3, 3]
p2
## [1] 0.099
En conclusión la probabilidad de que se mantenga a la baja por 3 días es de 0.099
p3 <- ei[2] * P2[2, 2]
p3
## [1] 0.22
Sin embargo como es la larga vamos a hacer:
#1. Verificamos el vector estacionario
EE <- steadyStates(M)
#2. miramos solo el de E y esa sería la probabilidad de que a la larga se mantenga estable
EE[1,"E"]
## E
## 0.4150943
En conclusión la probabilidad de que se mantenga estable a la larga es de 0.4150943 y si solo fuera por 3 días es de 0.22