#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
  1. Habiendo pasdo 21 personas en el concierto dando igual cual sea la la primera persona que pase ¿Cuáles son los coste totales obtenidos hasta el momento?
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.

  1. Sabiendo que van a asistir 1000 expectadores. Calcula el valor esperado de los beneficios facturados por cada tipo de etiqueta.
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€.