--- title: "Řešení dom.cvič. 1-3 (úterní skupina) v R-ku" output: pdf_document: default html_notebook: default --- # Příklad 1.14 -- Dvě kostky a podmíněná pravděpodobnost ## První přístup -- samplování Pravděpodobnost nespočítáme přesně, ale odhadneme tím, že pokus mnohokrát zopakujeme. Hodíme kostkami N-krát a budeme počítat četnosti jednotlivých jevů. Všimněte si, jak podmíněná pravděpodobnost znamená vlastně to, že se omezíme (v čitateli i ve jmenovateli) na ty souřadnice, kde platí podmiňující jev. ```{r} N = 10^6 kostka1 = sample(1:6, N, replace=TRUE) kostka2 = sample(1:6, N, replace=TRUE) soucet = kostka1 + kostka2 SD = soucet==10 PS = kostka1==6 NS = kostka1==6 | kostka2==6 cat("\nP(SD)=", sum(SD)/N) cat("\nP(PS)=", sum(PS)/N) cat("\nP(NS)=", sum(NS)/N) cat("\nP(PS|SD)=", (sum(PS & SD)/N)/(sum(SD)/N)) cat("\nP(NS|SD)=", sum(NS & SD)/sum(SD)) cat("\nP(PS|NS)=", sum(PS & NS)/sum(NS)) cat("\nP(SD|NS)=", sum(SD & NS)/sum(NS)) cat("\nP(NS|PS)=", sum(NS & PS)/sum(PS)) cat("\nP(SD|PS)=", sum(SD & PS)/sum(PS)) cat("\n") c(6/11, 1/6, 1/12, 1/3, 2/3, 2/11, 11/36) ``` ## Druhý přístup -- přesný Projdeme celý pravděpodobnostní prostor. Funguje jen pro malé prostory, jinak trvá moc dlouho! ```{r} Omega = expand.grid(k1=1:6,k2=1:6) kostka1 = Omega$k1; kostka1 kostka2 = Omega$k2; kostka2 soucet = kostka1 + kostka2 N = length(kostka1) SD = soucet==10 Omega$soucet = soucet Omega$SD = SD Omega SD PS = kostka1==6 NS = kostka1==6 | kostka2==6 cat("\nP(SD)=", sum(SD)/N) cat("\nP(PS)=", sum(PS)/N) cat("\nP(NS)=", sum(NS)/N) cat("\nP(PS|SD)=", sum(PS & SD)/sum(SD)) cat("\nP(NS|SD)=", sum(NS & SD)/sum(SD)) cat("\nP(PS|NS)=", sum(PS & NS)/sum(NS)) cat("\nP(SD|NS)=", sum(SD & NS)/sum(NS)) cat("\nP(NS|PS)=", sum(NS & PS)/sum(PS)) cat("\nP(SD|PS)=", sum(SD & PS)/sum(PS)) cat("\n") ``` # Příklad 2.16 -- Mince v truhle Zkusíme pro ověření příklad "nasamplovat". Experiment zopakujeme N-krát a pravděpodobnost "změříme". $N=10^4$ funguje příjemně rychle, pro přesnější odpověď můžeme zvýšit třeba na $N=10^6$. ```{r} N = 10^4 mince = sample(1:100, N, replace=TRUE) so = integer(N) # vektor N nul for (i in 1:N){ if (mince[i] == 1) { so[i] = 1 } else { so[i] = sample(c(0,1), size=1, prob=c(1-1/2^6,1/2^6)) } } sum(mince==1)/sum(so==1) sum(mince==1 & so==1)/sum(so==1) # druhá formulka je přesně podle definice, ale ze smyslu je vidět, # že to dá totéž a jenom dělá zbytečný výpočet navíc. ``` A pro srovnání totéž napsané vektorově, bez for cyklu. (Cca 10x rychlejší.) ```{r} N = 10^6 mince = sample(1:100, N, replace=TRUE) hody = rbinom(N,1,1/2^6) # N nasamplovaných hodnot Bin(1,1/2^6) so = (mince==1) | hody # pokud jsme vybrali první minci, tak vektor hody ignorujeme. sum(mince==1)/sum(so==1) ``` # Příklad 3.9 -- Dvanáctistěnná kostka ## První přístup -- přesný Napřed použijeme R-ko jenom jako kalkulačku, počítáme podle základního vzorce, z pravděpodobnostní funkce (x jsou hodnoty, p je odpovídající pravděpodobnostní funkce). ```{r} x = c(1,2,4,5) p = c(1,2,4,5)/12; sum(p) # pro kontrolu E = sum(x*p) V = sum((x-E)^2*p) E # spočteno podle definice V # spočteno podle definice sum(x^2*p)-E^2 # věta o rozptylu sqrt(V) # definice ``` Teď podle druhého vzorce -- průměr přes pravděpodobnostní prostor. ```{r} hody = c(1,2,2,4,4,4,4,5,5,5,5,5); length(hody) # pro kontrolu E = sum(hody)/12 V = sum((hody-E)^2)/12 E #střední hodnota V #rozptyl sqrt(V) #směrodatná odchylka ``` Existují i funkce mean, var, sd. Mean dělá to, co by člověk čekal, ale var, sd počítají něco trochu jiného (místo počtem měření se dělí o jedna nižším číslem). Více vysvětlíme v části o statistice. ```{r} mean(hody) var(hody) sd(hody) ``` ## Druhý přístup -- samplování Zde je správné místo pro funkce mean, var, i sd. ```{r} N = 10^7 mnoho_hodu = sample(hody,N,replace = TRUE) mean(mnoho_hodu) var(mnoho_hodu) sd(mnoho_hodu) ```