Se hacen dos inversiones de 10000€ cada una en dos proyectos. Se supone que el proyecto A va a producir un rendimiento neto de 800, 1000 y 1200 euros con probabilidades respectivas de 0.2, 0.6, 0.2. Se supone que el proyecto B va a producir una ganancia neta de 800, 1000, y 1200 euros, con probabilidades respectivas 0.3, 0.4, 0.3. Si asumimos que lo que se gana con un proyecto es independiente de lo que se gana con el otro, responde a las siguientes preguntas utilizando simulación, dando también una medida del error.
¿Cuál es la probabilidad de que la ganancia total sea de 2000 euros exactamente?
¿Cuál es la probabilidad de que la ganancia total sea igual o superior a 2000 euros?
¿Cuál es la probabilidad de que la ganancia sea inferior a 2000 euros?
Solución teórica
Algoritmo de simulación
BpA ~ Pr(beneficio|proyecto A) = (0.2, 0.6, 0.2)
BpB ~ Pr(beneficio|proyecto B) = (0.3, 0.4, 0.3)
# Alternativa 1 de simulación: método transformada inversa
set.seed(123)
# Simulaciones
nsim <- 10000
# Beneficios por inversión
BpA <- c() # inversión A
BpB <- c() # inversión B
Bconj <- c() # Beneficio conjunto
# valores uniformes para cada proyecto (indeptes)
unif1 <- runif(nsim) # proyecto A
unif2 <- runif(nsim) # proyecto B
# Establecemos probabilidad de ganancia de cada proyecto y su beneficio
pA <- c(0.2, 0.6, 0.2)
pacumA <- cumsum(pA)
BA <- c(800, 1000, 1200)
pB <- c(0.3, 0.4, 0.3)
pacumB <- cumsum(pB)
BB <- c(800, 1000, 1200)
i <- 1
while (i <= nsim)
{
# Proyecto A
BpA[i] <- BA[min(which(unif1[i] <= pacumA))]
# Proyecto B
BpB[i] <- BB[min(which(unif2[i] <= pacumB))]
# Ganancia conjunta
Bconj[i] <- BpA[i] + BpB[i]
i <- i + 1
}
# Distribución beneficios totales
prop.table(table(Bconj))
## Bconj
## 1600 1800 2000 2200 2400
## 0.0584 0.2668 0.3606 0.2574 0.0568
# Alternativa 2 de simulación: con 'sample'
set.seed(123)
# Simulaciones
nsim <- 10000
BpA=sample(BA,nsim,replace=TRUE,prob=pA)
BpB=sample(BB,nsim,replace=TRUE,prob=pB)
Bconj=BpA+BpB
# Distribución beneficios totales
prop.table(table(Bconj))
## Bconj
## 1600 1800 2000 2200 2400
## 0.0568 0.2638 0.3526 0.2667 0.0601
indicador=(Bconj==2000)
estim=mean(indicador)
error=sd(indicador)/sqrt(nsim)
ic_low=estim-error*qnorm(0.975)
ic_up=estim+error*qnorm(0.975)
cat("Pr(Gan=2000)=",estim,"[",ic_low,",",ic_up,"]")
## Pr(Gan=2000)= 0.3526 [ 0.3432352 , 0.3619648 ]
indicador=(Bconj>=2000)
estim=mean(indicador)
error=sd(indicador)/sqrt(nsim)
ic_low=estim-error*qnorm(0.975)
ic_up=estim+error*qnorm(0.975)
cat("Pr(Gan>=2000)=",estim,"[",ic_low,",",ic_up,"]")
## Pr(Gan>=2000)= 0.6794 [ 0.6702522 , 0.6885478 ]
indicador=(Bconj<2000)
estim=mean(indicador)
error=sd(indicador)/sqrt(nsim)
ic_low=estim-error*qnorm(0.975)
ic_up=estim+error*qnorm(0.975)
cat("Pr(Gan<2000)=",estim,"[",ic_low,",",ic_up,"]")
## Pr(Gan<2000)= 0.3206 [ 0.3114522 , 0.3297478 ]