Spojité pravdepodobnostné rozdelenia (1) - cvičenia

Metódy riešenia úloh z pravdepodobnosti a štatistiky

Príklady z prednášky

Na prednáške sme minulý týždeň odvodili, ako simulovať nasledovné príklady. Napíšte teraz kompletný priebeh simulácií a odhadnite hľadané pravdepodobnosti. Môžete použiť kód z prednášky, kvôli prehľadnosti dodržte nasledovnú štruktúru.

Príklad 1: Na úsečke AB sú náhodne zvolené body L a M. Aká je pravdepodobnosť, že bod L je bližšie k bodu M ako k bodu A?

priklad1 <- function(){
  
  # priebeh jednej simulacie
  # doplnte podla prednasky
  
}

priklad1_simulacia <- replicate(10^5, priklad1())
# doplnte odhad pravdepodobnosti a vypiste ho

Príklad 2: Na úsečke dĺžky 1 sú náhodne zvolené dva body, ktoré úsečku rozdelia na tri časti. Aká je pravdepodobnosť, že žiadna z tých častí nebude dlhšia ako 3/4?

priklad2 <- function(){
  
  # priebeh jednej simulacie
  
}

priklad2_simulacia <- replicate(10^5, priklad2())
# doplnte odhad pravdepodobnosti a vypiste ho 

Pokračovanie: Analogicky ako na prvej prednáške vykreslite, ako sa odhady so zväčšujúcim sa počtom simulácií stabilizujú (na prednáške odhad strednej hodnoty, premyslite si, ako s tým súvisí odhad pravdepodobnosti).

Náhodné body na úsečke: ďalšie príklady

Príklad 3: Na úsečke dĺžky 1 sú náhodne zvolené dva body, ktoré úsečku rozdelia na tri časti. Aká je stredná hodnota najdlhšej časti?

priklad3 <- function(){
  
  # doplnte kod z predchadzajuceho prikladu
  # tak, aby fungoval nasledovny return
  
  return(max(dlzky))
}

priklad3_simulacia <- replicate(10^5, priklad3())
priklad3_priemer <- mean(priklad3_simulacia) # odhad strednej hodnoty

Príklad 4: Na úsečke dĺžky 1 je náhodne zvolených \(n\) bodov, ktoré úsečku rozdelia na \(n-1\) častí. Aká je stredná hodnota najdlhšej časti?

priklad4 <- function(n){
  body <-    # vygenerujte n nezavislych bodov na (0,1)
  usporiadane_body <- # najdite funkciu, ktora ich usporiada od najmensich po najvacsie
  usporiadane_body <- c(0, usporiadane_body, 1) # pridame krajne body
  dlzky <-  # doplnte funkcia ktora pomocou vektora `usporiadane_body` vypocita dlzky (navod: je spomenuta v slajdoch k prednaske)
  return(max(dlzky))
}

Otestujte pre nejakú zvolenú hodnotu \(n\):

priklad4_simulacia <- replicate(10^5, priklad4()) # doplnte zvoleny parameter
priklad4_priemer <- # doplnte odhad strednej hodnoty

Použijeme pre vektor hodnôt \(n\) a graficky znázorníme výsledok:

priklad4_odhad <- function(n){
  
  # napiste funkciu ktora bude volat funkciu `priklad4`
  # a odhadne strednu hodnotu pre zadane n
  
  return(priemer)
}

n_vektor <- 2:10 # mozete potom zmenit
priklad4_simulacia_vektor <- sapply(n_vektor, priklad4_odhad)
plot(n_vektor, priklad4_simulacia_vektor)

Príklady z prednášky na samostatné riešenie

Príklad 5: Tyč dĺžky 200 cm sa náhodne rozlomí na kusy. Určte pravdepodobnosť, že niektorý z nich bude mať dĺžku nanajvýš 10 cm, ak je tyč rozlomená na dvoch miestach?

Príklad 6: Tyč dĺžky 200 cm sa náhodne rozlomí na kusy. Určte pravdepodobnosť, že niektorý z nich bude mať dĺžku nanajvýš 10 cm, ak je tyč rozlomená na troch miestach?

Graficky znázornite konvergenciu pravdepodobností, keď rastie počet simulácií.

Grafické znázornenie bodov

  • Budeme vytvárať data frame (táto štruktúra dát bude ešte veľmi užitočná v štatistike pri práci s dátami)
  • Grafy budeme kresliť pomocou základnej funkcie plot z knižnice base
  • Nepovinné: úprava grafov pomocou ggplot2 (ukážka bola na prednáške)

Ukážka vytvorenia data framu:

x <- c(1, 2, 3, 4)
y <- c(1, 0, 1, 2)
df <- data.frame(x, y)

Potom:

df
  x y
1 1 1
2 2 0
3 3 1
4 4 2
plot(df)

Pristupovanie k stĺpcom:

df$x
[1] 1 2 3 4

Využijeme ich na vytvorenie nových:

df$mocnina <- df$x^2

Môžu byť rôzneho typu:

df$meno <- c("A", "B", "C", "D")  # numeric
df$podmienka1 <- df$x > 3         # logical
print(df)
  x y mocnina meno podmienka1
1 1 1       1    A      FALSE
2 2 0       4    B      FALSE
3 3 1       9    C      FALSE
4 4 2      16    D       TRUE
print(df[, 1:2]) # vsetky riadky, stlpce 1:2
  x y
1 1 1
2 2 0
3 3 1
4 4 2
print(df[3, ])   # riadok 3, vsetky stlpce 
  x y mocnina meno podmienka1
3 3 1       9    C      FALSE
# ukazka kreslenia grafu
farba <- ifelse(df$podmienka, "blue", "red")
plot(df$x, df$y, pch = 20, col = farba)

Parameter pch pre plot: https://r-charts.com/base-r/pch-symbols/

Použitie vytvorenej funkcie I:

je_v_kruhu <- function(x, y){
  # vystup: TRUE ak je bod vnutri jednotkoveho kruhu, inak FALSE
  return(x^2 + y^2 < 1)   
}

n <- 5000 # pocet bodov
df <- data.frame(x = runif(n, min = -2, max = 2), 
                 y = runif(n, min = -2, max = 2))
head(df)
           x          y
1 -0.2547249 -0.9547464
2 -1.0129522 -0.7403878
3  0.3043290 -1.0986189
4  1.3097349  1.4320289
5 -1.8872628  0.6717727
6 -1.2989575 -1.6860536
df$vnutri <- je_v_kruhu(df$x, df$y)
head(df)
           x          y vnutri
1 -0.2547249 -0.9547464   TRUE
2 -1.0129522 -0.7403878  FALSE
3  0.3043290 -1.0986189  FALSE
4  1.3097349  1.4320289  FALSE
5 -1.8872628  0.6717727  FALSE
6 -1.2989575 -1.6860536  FALSE
plot(df$x, df$y, ...) # doplnte tak, aby body v kruhu boli zelene a mimo kruhu cierne

Graf:

Použitie vytvorenej funkcie II: Podmienka if nevie robiť s vektorovým vstupom, ukážeme si, čo s tým.

set.seed(123)
n <- 5

df <- data.frame(
  x = round(runif(n, -1, 1), 1), # pre prehladnost budeme mat zaokruhlene cisla
  y = round(runif(n, -1, 1), 1)
  )
df
     x    y
1 -0.4 -0.9
2  0.6  0.1
3 -0.2  0.8
4  0.8  0.1
5  0.9 -0.1
# Uvazujme nasledovnu funkciu
f <- function(x, y) {
  if (x + y > 0) {
    return(x + y)
  } else {
    return(-1)
  }
}
# napriklad
f(-0.4, 0.2)
[1] -1
f(0.4, -0.2)
[1] 0.2

Vyskúšajte, že nasledovný kód nefunguje (if, else nevie robiť s vektorovým argumentom):

df$z <- f(df$x, df$y) 

Riešenie 1: vektorizácia pomocou funkcie Vectorize

f_vec <- Vectorize(f)

df$z1 <- f_vec(df$x, df$y)
df
     x    y   z1
1 -0.4 -0.9 -1.0
2  0.6  0.1  0.7
3 -0.2  0.8  0.6
4  0.8  0.1  0.9
5  0.9 -0.1  0.8

Riešenie 2: Podmienka ifelse s vektorovým argumentom pracovať vie

f2 <- function(x, y) {
  return(ifelse(x + y > 0, x + y, -1))
}

df$z2 <- f2(df$x, df$y)
df
     x    y   z1   z2
1 -0.4 -0.9 -1.0 -1.0
2  0.6  0.1  0.7  0.7
3 -0.2  0.8  0.6  0.6
4  0.8  0.1  0.9  0.9
5  0.9 -0.1  0.8  0.8

Príklad 2 znovu: Na úsečke dĺžky 1 sú náhodne zvolené dva body, ktoré úsečku rozdelia na tri časti. Aká je pravdepodobnosť, že žiadna z tých častí nebude dlhšia ako 3/4?

Graficky znázorníme simulácie a odhadneme pravdepodobnosť:

  • vygenerujte data frame so stĺpcami x, y, v ktorých bude x-ová a y-ová súradnica vygenerovaných bodov
  • vytvorte stĺpec testujúci podmienku zo zadania
  • nakreslite graf a odhadnite pravdepodobnosť

Iné rozdelenia

Z prednášky:

  • runif: náhodné čísla z rovnomerného rozdelenia
  • rnorm z normálneho rozdelenia
  • rexp z exponenciálneho rozdelenia

Existujú aj iné, začínajú písmenom r (random), potom je skratka rozdelenia.

Na prednáške sme robili:

Príklad 7: Životnosť žiarovky má exponenciálne rozdelenie so strednou hodnotou 1 (jednotku času teda uvažujeme takú, že je ňou očakávaná životnosť žiarovky). Kúpili sme 10 žiaroviek a postupne ich vymieňame. Aké je pravdepodobnostné rozdelenie času, počas ktorého nám týchto 10 žiaroviek bude stačiť?

ziarovky <- function(pocet_ziaroviek, ocakavana_zivotnost){
  zivotnosti <- rexp(pocet_ziaroviek, rate = 1/ocakavana_zivotnost)
  return(sum(zivotnosti))
}

ziarovky_simulacia <- replicate(10^5, ziarovky(10, 1))
hist(ziarovky_simulacia)
mean(ziarovky_simulacia)
[1] 9.998098
var(ziarovky_simulacia)
[1] 9.928435

Príklady z prednášky na samostatné riešenie

Príklad 8: Pri meraní prístrojom vzniká chyba, ktorá má normálne rozdelenie s nulovou strednou hodnotou a so štandardnou odchýlkou 2 mm. Aká je pravdepodobnosť, že dve nezávislé merania budú mať chyby v absolútnej hodnote väčšiu ako 1 mm, pričom tieto chyby budú mať rôzne znamienka?

Príklad 8: * Náhodná premenná má lognormálne rozdelenie, ak má tvar \(exp(X)\), kde \(X\) je náhodná premenná s normálnym rozdelením. Určte strednú hodnotu lognormálne rozdelenej náhodnej premennej, ak jej logaritmus má rozdelenie \(N(0, 1)\).

Príklad 9: Test obsahuje 60 otázok a na jeho vypracovanie je 180 minút. Práca na odpovedi sa skladá z dvoch častí. Najskôr sa spraví rozbor úlohy, čas potrebný na rozbor je náhodná premenná \(S\) (screen time). Počas rozboru sa určí čas \(W\) (working time), ktorý bude potrebný na vypracovanie, teda dokončenie výpočtov, úprava výsledku a pod. Predpokladá sa, že \(S\), \(W\) sú nezávislé náhodné premenné a sú nezávislé aj pre jednotlivé otázky. Predpokladajme, že študent zo skúsenosti so vzorovými testami vie, že \(S\), \(W\) majú exponenciálne rozdelenie so strednými hodnotami \(1,77\) a \(4,23\) minúty. Jeho stratégia je nasledovná: Ak sa po dokončení rozboru zistí, že doba vypracovania \(W\) bude väčšia ako \(K\), nebude strácať čas vypracovaním, ale pôjde robiť rozbor ďalšej úlohy. Úlohou je nájsť optimálnu hodnotu \(K\), ktorá maximalizuje strednú hodnotu počtu vyriešených príkladov. Ak bude príliš veľké, môže sa stať, že vypracovanie niekoľkých náročných otázok zaberie príliš veľa času a nezostane čas na ostatné. Pri malej hodnote sa zase budú robiť rozbory, ale riešiť sa bude len málo príkladov. Treba nájsť vhodný kompromis.

Príklady na samostatné riešenie: odhadovanie rozdelenia zo simulácií

Príklad 10 (písomka 2025): \(X\) a \(Y\) sú nezávislé náhodné premenné s exponenciálnym rozdelením so strednou hodnotou \(\mu\). Nájdite pravdepodobnostné rozdelenie podielu \(\frac{X}{X+Y}\) v závislosti od parametra \(\mu\).

Riešenie:

priklad10 <- function(mi){
  x <- rexp(1, rate = 1/mi)
  y <- rexp(1, rate = 1/mi)
  return(x/(x + y))
}

priklad10_simulacia_hist <- function(mi){
  simulacia <- replicate(10^5, priklad10(mi))
  hist(simulacia)
}

set.seed(123)
priklad10_simulacia_hist(1)

priklad10_simulacia_hist(10)

priklad10_simulacia_hist(1/2)

Po vyskúšaní niekoľkých hodnôt prídeme k hypotéze, že by to mohlo byť rovnomerné rozdelenie na intervale \((0, 1)\).

Na samostatné riešenie:

Príklad 11: \(X\) a \(Y\) sú nezávislé náhodné premenné s exponenciálnym rozdelením so strednou hodnotou \(\mu\). Nájdite pravdepodobnostné rozdelenie podielu \(\frac{X-Y}{X+Y}\) v závislosti od parametra \(\mu\).

Príklad 12: \(X\) je náhodná premenná s rovnomerným rozdelením na intervale \((0, 1)\). Nájdite rozdelenie náhodnej premennej \(-\ln(X)\).

Príklad 13: Nájdite rozdelenie náhodnej premennej, ktorá vznikne podľa nasledovného algoritmu: