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
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
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
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"
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)