Príklad 5

Máme n mincí, pričom i-ta minca je vyrobená tak, že na k-tej minci padne hlava s pravdepodobnosťou 1/(2k+1). Hodíme všetkými mincami. Aká je pravdepodobnosť, že počet hláv bude párny?

priklad5 <- function(n){
  k <- 1:n
  p_hlava <- 1/(2*k+1)
  hod_mincou <- function(p) sample(c(1, 0), size = 1, prob = c(p, 1 - p))
  mince <- sapply(p_hlava, hod_mincou)
  pocet_hlav <- sum(mince == "1")
  return(pocet_hlav %% 2 == 0)
}

# napriklad pre n = 5:
set.seed(123)
n_sim <- 10^5
sim_priklad5 <- replicate(n_sim, priklad5(5))
prop.table(table(sim_priklad5)) # odhad pravdepodobnosti je podiel TRUE
## sim_priklad5
##   FALSE    TRUE 
## 0.45511 0.54489

Príklad 6

Máme n párov ponožiek. Zamiešame ich a vyberáme ich postupne bez toho, aby sme sa na ne pozerali. Ak vyberieme ponožku, ktorej pár sme už vybrali predtým, odložíme ich obidve nabok. Aká je stredná hodnota počtu nájdených párov po tom, čo sme vybrali k ponožiek?

priklad6 <- function(n, k){
  ponozky <- c(1:n, 1:n)
  vybrane <- sample(ponozky, size = k, replace = FALSE)
  pocet_roznych <- length(unique(vybrane))
  pocet_parov <- k - pocet_roznych
  return(pocet_parov)
}

# napriklad 10 parov, vyberame 12 ponoziek
set.seed(123)
n_sim <- 10^5
sim_priklad6 <- replicate(n_sim, priklad6(10, 12))
mean(sim_priklad6) # odhad strednej hodnoty
## [1] 3.47612

Príklad 7

Dvaja strelci strieľajú striedavo na terč. Na začiatku si hodia mincu, kto bude v jednotlivých pokusoch strieľať ako prvý. Pravdepodobnosť zásahu pri prvom pokuse je pre strelca A rovná 0,4 a pre strelca B je rovná 0,5. Ak netrafí ani jeden, priblížia sa bližšie k terču, vďaka čomu sa pravdepodobnosti zásahu zvýšia o 0,05 a znovu strieľajú v tom istom poradí.

Ak netrafia, znovu sa priblížia, pričom pravdepodobnosti zásahu sa zvýšia o rovnakú hodnotu a znovu v tom istom poradí vystrelia na terč. Toto sa opakuje, kým niektorý z nich zasiahne terč. Aká je pravdepodobnosť, že terč bude trafený pri n-tom výstrele (a aké hodnoty môže n nadobúdať)?

vystrel <- function(p) sample(c(1, 0), size = 1, prob = c(p, 1 - p))

strelba <- function(p1, p2){
  # p1 = pravd. uspechu prveho, p2 = pravd. uspechu druheho
  pocet_vystrelov <- 0

  while(1){
    # striela prvy
    vystrel1 <- vystrel(p1)
    pocet_vystrelov <- pocet_vystrelov + 1
    
    if (vystrel1 == 1){ # ak prvy trafil, koniec
      break
    } else{             # inak striela druhy
      vystrel2 <- vystrel(p2)
      pocet_vystrelov <- pocet_vystrelov + 1
    }
    
    if (vystrel2 == 1) { # ak druhy trafil, koniec
      break
    } else {             # inak sa zvysia pravdepodobnosti uspechu   
      p1 <- min(p1 + 0.05, 1) # kvoli univerzalnosti, napr. ak p1 = 0.98
      p2 <- min(p2 + 0.05, 1) 
    }
  }
  return(pocet_vystrelov)
}

priklad7 <- function(pA, pB){
  # pA, pB = pravdepodobnosti v prvom kole
  prvy_strelec <- sample(c("A", "B"), size = 1)
  
  if(prvy_strelec == "A"){
    pocet <- strelba(pA, pB)
  } else {
    pocet <- strelba(pB, pA)
  }
  
  return(pocet)
}

set.seed(123)
n_sim <- 10^5
sim_priklad7 <- replicate(n_sim, priklad7(0.4, 0.5))
sim_priklad7_factor <- factor(sim_priklad7, levels = 1:22) # mozne vysledky su 1:22
prop.table(table((sim_priklad7_factor))) # odhad pravdepodobnosti
## 
##       1       2       3       4       5       6       7       8       9      10 
## 0.44871 0.25058 0.15038 0.07529 0.04206 0.01848 0.00851 0.00358 0.00152 0.00057 
##      11      12      13      14      15      16      17      18      19      20 
## 0.00025 0.00005 0.00002 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 0.00000 
##      21      22 
## 0.00000 0.00000

Príklad 8

Písomku písalo 20 študentov, opravené písomky sú v náhodnom poradí. Traja študenti si prišli pozrieť svoju písomku. Postupne berú do ruky opravené písomky, až kým nenájdu všetky tri hľadané písomky. Aká je pravdepodobnosť, že posledná hľadaná písomka bola na k-tom mieste a aké sú možné hodnoty k? Ktorá z nich má najväčšiu pravdepodobnosť?

priklad8 <- function(pocet_studentov, pocet_hladanych){
  poloha_pisomiek <- sample(1:pocet_studentov, size = pocet_hladanych, replace = FALSE)
  posledna <- max(poloha_pisomiek)
  return(posledna)
}

set.seed(123)
n_sim <- 10^5
sim_priklad8 <- replicate(n_sim, priklad8(20, 3))
sim_priklad8_factor <- factor(sim_priklad8, levels = 3:20) # mozne vysledky su 3:20
odhad_pravdepodobnosti <- prop.table(table((sim_priklad8_factor))) # odhad pravdepodobnosti

print(odhad_pravdepodobnosti)
## 
##       3       4       5       6       7       8       9      10      11      12 
## 0.00087 0.00291 0.00549 0.00909 0.01268 0.01894 0.02564 0.03212 0.03931 0.04752 
##      13      14      15      16      17      18      19      20 
## 0.05868 0.06964 0.07989 0.09210 0.10468 0.11810 0.13311 0.14923
barplot(odhad_pravdepodobnosti) # vidime, preco je nazov prikladu "zakon schvalosti"

Príklad 9

V istej firme na výrobu suvenírov sa pracuje každý deň vroku s výnimkou dní, v ktorých má niektorý zamestnanec narodeniny. Vtedy celá firma oslavuje a nepracuje sa. Ak sa pracuje, každý zamestnanec vyrobí v ten deň jeden suvenír.

Pre jednoduchosť zanedbajme priestupné roky (každý rok má teda 365 dní) a predpokladajme, že narodeniny majú počas roka rovnomerné rozdelenie a že firma nemá pred prijatím zamestnanca informáciu o dni jeho narodenia.

Koľko zamestnancov má mať firma, aby maximalizovala očakávaný počet suvenírov, ktoré sa vyrobia počas roka?

priklad9 <- function(pocet_zamestnancov){
  dni_v_roku <- 365
  narodeniny <- sample(1:dni_v_roku, size = pocet_zamestnancov, replace = TRUE)
  pocet_oslav <- length(unique(narodeniny))
  odpracovane_dni <- dni_v_roku - pocet_oslav
  pocet_suvenirov <- odpracovane_dni*pocet_zamestnancov
  return(pocet_suvenirov)
}

# napriklad pre 200 zamestnancov
set.seed(123)
n_sim <- 10^5
sim_priklad9 <- replicate(n_sim, priklad9(200))
mean(sim_priklad9) # odhad strednej hodnoty
## [1] 42170.36
# zavislost strednej hodnoty od poctu zamestnancov
odhad_strednej_hodnoty <- function(pocet_zamestnancov){
  n_sim <- 10^5
  sim_priklad9 <- replicate(n_sim, priklad9(pocet_zamestnancov))
  return(mean(sim_priklad9))
}

pocet_zamestnancov_vektor <- seq(from = 250, to = 450, by = 5)
pocet_suvenirov_vektor <- sapply(pocet_zamestnancov_vektor, odhad_strednej_hodnoty)
plot(pocet_zamestnancov_vektor, pocet_suvenirov_vektor)