#LIBRERIAS NECESARIAS
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.4.0 ✔ purrr 1.0.1
## ✔ tibble 3.1.8 ✔ dplyr 1.0.10
## ✔ tidyr 1.3.0 ✔ stringr 1.5.0
## ✔ readr 2.1.3 ✔ forcats 1.0.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
library(markovchain)
## Package: markovchain
## Version: 0.9.1
## Date: 2023-01-20
## BugReport: https://github.com/spedygiorgio/markovchain/issues
#FUNCIONES NECESARIAS
# Matriz de probs. transición de n pasos
ptran.n=function(ptran,n){
# ptran es la matriz de transición de 1 paso
# n son los pasos a dar
i=1
p=ptran
while(i<n){
p=p%*%ptran
i=i+1
}
return(p)
}
# Función para calcular los tiempos de ocupación en un periodo [0,n]
mocupa.proceso <- function(proceso, n)
{
# Número de estados del proceso
nestat <- dim(proceso)
# Estados
nombres<- names(proceso)
# Generamos la matriz de ocupaciones
mocupa <- diag(nestat)
dimnames(mocupa) <- list(nombres, nombres)
# mocupa <- matrix(rep(0, nestat*nestat),
# nrow = nestat, dimnames = list(nombres, nombres))
# Bucle de cálculo de los tiempos de ocupación
P=proceso[1:nestat] #matriz de transicion
for (i in 1:n)
mocupa <- mocupa + ptran.n(P,i)
return(mocupa)
}
estados=c("vocal","consonante")
# matriz de transición idioma1
p1=matrix(c(0.51,0.49,0.9,0.1),byrow = TRUE,ncol=2,dimnames=list(estados,estados))
# proceso 1: idioma1
idioma1=new("markovchain",states=colnames(p1),byrow=TRUE,transitionMatrix=p1,name="idioma1")
# matriz de transición idioma2
# y lo mostramos en formato data.frame
as(idioma1,"data.frame")
## t0 t1 prob
## 1 vocal vocal 0.51
## 2 vocal consonante 0.49
## 3 consonante vocal 0.90
## 4 consonante consonante 0.10
En un concierto de música, el organizador decide repartir los tiquets etiquetados con una vocal o una consonante, siguiendo una secuencia simulada de vocales-consonantes según el idioma1.
costes=matrix(c(50, 70),ncol=1)
costes
## [,1]
## [1,] 50
## [2,] 70
expectedRewards(idioma1,20,costes)
## [1] 1192.985 1207.374
M20=mocupa.proceso(idioma1,20)
g=M20 %*% costes
g
## [,1]
## vocal 1192.985
## consonante 1207.374
Si la primera persona que pasa en el concierto poseé la etiqueta “vocal” en su tiquet se espera que los beneficios sean de 1192.98€ cuando hayan pasado 21 personas.
En cambio, si la primera persona poseé la etiqueta “consonante” en su tiquet se espera que los beneficios sean de 1207.37€ cuando hayan pasado 21 personas.
costes_x=c(50, 70)
asistentes=1000
mil_asistentes= (steadyStates(idioma1)*asistentes)*costes_x
mil_asistentes
## vocal consonante
## [1,] 32374.1 24676.26
Al vender un mayor número de entradas con la etiqueta “vocal” se esperan facturar 32374.1€ solo con las entradas de 50€. Mientras que pese a ser más caras, las entradas con la etiqueta “consonante”, van a facturar algo menos, aproximadamente 24676.26€.