Seuraava vastaus on vähän tylsää, mutta näyttää olevan tähän mennessä ainoa, joka sisältää aidosti tarkan vastauksen! Normaali likiarviointi tai simulointi tai jopa vain tarkan vastauksen numeerinen laskeminen kohtuulliselle tarkkuustasolle, joka ei vie kauan, ovat todennäköisesti parempi tapa edetä - mutta jos haluat "matemaattisen" tavan saada tarkka vastaus, niin :
Merkitään $ X $ pisteiden summaa, jonka näemme todennäköisemmin 100 $ $ -rullaissa massatoiminto $ p_X (x) $ .
Tarkoitetaan $ Y $ merkitsemään 600 dollaria $ -kolikkokäännösten päämääriä todennäköisyysmassatoiminnolla $ p_Y (y) $ .
Etsimme $ P (X > Y) = P (X - Y > 0) = P (D > 0) $ missä $ D = X - Y $ on pisteiden summan ja pään määrän välinen ero.
Anna $ Z = -Y $ , todennäköisyysmassafunktiolla $ p_Z (z) = p_Y (-z) $ . Tällöin ero $ D = X - Y $ voidaan kirjoittaa uudelleen summana $ D = X + Z $ span > mikä tarkoittaa, että koska $ X $ ja $ Z $ ovat riippumattomia, voimme löytää todennäköisyysmassafunktion $ D $ ottamalla $ X $ span PMF: ien erillinen konvoluutio > ja $ Z $ :
$$ p_D (d) = \ Pr (X + Z = d) = \ summa_ {k = - \ infty} ^ {\ infty} \ Pr (X = k \ cap Z = d - k) = \ sum_ {k = - \ infty} ^ {\ infty} p_X (k) p_Z (dk) $$
Käytännössä summa on tehtävä vain $ k $ -arvojen yli, joiden todennäköisyydet eivät tietenkään ole nollia. Idea on juuri se, mitä @IlmariKaronen on tehnyt, halusin vain kirjoittaa sille matemaattisen perustan.
En ole vielä sanonut, kuinka löydän harjoitukseksi jätetyn $ X $ PMF: n, mutta huomaa, että jos $ X_1, X_2, \ pisteet, X_ {100} $ ovat pisteiden lukumäärä kussakin 100 itsenäisessä nopparullassa, joista jokaisella on erilliset yhtenäiset PMF: t $ \ {1, 2, 3, 4, 5, 6 \} $ , sitten $ X = X_1 + X_2 + \ pistettä + X_ {100} $ span> ja niin ...
# Tallenna muuttujien PMF: t datakehyksinä sarakkeisiin "arvo" ja "prob".
# Tärkeää, että arvot ovat peräkkäisiä ja nousevat johdonmukaisuuden suhteen kääntämällä,
# sisällytä tarvittaessa väliarvot todennäköisyydellä 0!
# Toiminto, jolla tarkistetaan, onko datakehys PMF: n määritelmän mukainen
# Selitä viesti_intro avulla, mikä tarkistus epäonnistuu
is.pmf <- funktio (x, message_intro = "") {
if (! is.data.frame (x)) {stop (paste0 (message_intro, "Not a dataframe"))}}
if (! nrow (x) > 0) {stop (liitä0 (viesti_intro, "Tietokehyksessä ei ole rivejä"))}
if (! "value"%% colnames (x)) {stop (paste0 (message_intro, "No 'value' column"))}}
jos (! "prob"% prosentteina colnames (x)) {stop (liitä0 (viesti_intro, "Ei 'prob' -saraketta"))}
if (! is.numeric (x $ value)) {stop (liitä0 (message_intro, "arvo" -sarake ei numeerinen ")}}
if (! all (is.finite (x $ value))) {stop (paste0 (message_intro, "Sisältääkö 'arvo' NA, Inf, NaN jne.?))}
if (! all (diff (x $ value) == 1)) {stop (liitä0 (message_intro, "'arvo' ei ole peräkkäinen ja nouseva"))}
if (! is.numeric (x $ prob)) {stop (paste0 (message_intro, "prob" -sarake ei numeerinen "))}
if (! all (is.finite (x $ prob))) {stop (paste0 (message_intro, "Sisältääkö 'prob' NA: ta, Inf, NaN jne."))}
jos (! all.equal (summa (x $ prob), 1)) {stop (liitä0 (message_intro, "prob" -sarake ei ole summa 1 "))}
paluu (TOSI)
}
# Toiminto yhdistää x: n ja y: n PMF: t
# Huomaa, että R: n kääntymiseksi meidän on käännettävä toinen vektori
# name1 ja name2 käytetään kahden syötteen virheraportoinnissa
convolve.pmf <- funktio (x, y, nimi1 = "x", nimi2 = "y") {
is.pmf (x, message_intro = paste0 ("Tarkistetaan", nimi1, "on kelvollinen PMF:"))
is.pmf (y, message_intro = paste0 ("Tarkistetaan", nimi2, "on kelvollinen PMF:"))
x_plus_y <- data.frame (
arvo = seq (alkaen = min (x $ arvo) + min (y $ arvo),
arvoon = max (x $ arvo) + max (y $ arvo),
= 1),
prob = convolve (x $ prob, rev (y $ prob), type = "open")
)
paluu (x_plus_y)
}
# Olkoon x_i yksittäisten noppaheittojen pistemäärä i
# Huomaa, että x_i: n PMF on sama jokaiselle i = 1 - i = 100)
x_i <- data.frame (
arvo = 1: 6,
prob = rep (1/6, 6)
)
# Olkoon t_i x_1, x_2, ..., x_i summa
# Tallennamme t_1, t_2 ... PMF: t luetteloon
t_i <- luettelo ()
t_i [[1]] <- x_i # t_1 on vain x_1, joten sillä on sama PMF
T_i: n PMF on t_ (i-1): n ja x_i: n PMF: ien konvoluutio
(i in 2: 100) {
t_i [[i]] <- sekoittaa.pmf (t_i [[i-1]], x_i,
nimi1 = liitä0 ("t_i [[", i-1, "]]"), nimi2 = "x_i")
}
# Olkoon x kaikkien 100 itsenäisen nopparullan pisteiden summa
x <- t_i [[100]]
is.pmf (x, message_intro = "Tarkistetaan, että x on kelvollinen PMF:")
# Olkoon y kolikkopään lukumäärä 600 kolikkolevyssä, joten Binomial (600, 0,5) -jakauma on sama:
y <- data.frame (arvo = 0: 600)
y $ prob <- dbinom (y $ arvo, koko = 600, prob = 0,5)
is.pmf (y, message_intro = "Tarkistetaan, onko y kelvollinen PMF:")
# Olkoon z negatiivinen arvosta y (huomaa, että käännämme järjestyksen, jotta arvot pysyvät nousevina)
z <- data.frame (arvo = -rev (y $ arvo), prob = rev (y $ prob))
is.pmf (z, message_intro = "Tarkistetaan, onko z kelvollinen PMF:")
# Olkoon d ero, d = x - y = x + z
d <- muodostaa.pmf (x, z, nimi1 = "x", nimi2 = "z")
is.pmf (d, message_intro = "Tarkistetaan d on kelvollinen PMF:")
# Prob (X > Y) = Prob (D > 0)
summa (d [d $ arvo > 0, "prob"])
# [1] 0,9907902
Kokeile verkossa!
Ei sillä ole merkitystä, jos saavutat kohtuullisen tarkkuuden, koska yllä oleva koodi toimii joka sekunnin murto-osassa, mutta on olemassa oikotie 100 itsenäisen identtisesti jakautuneen muuttujan summan tekemiseksi: 100 = 64 + 32 + 4 ilmaistuna 2: n voimien summana, voit jatkaa välivaiheen vastausten itsesi kanssa mahdollisimman paljon. Ensimmäisten $ i $ nopparullien välisummien kirjoittaminen muodossa $ T_i = \ sum_ {k = 1} ^ {k = i} X_k $ voimme saada $ T_2 = X_1 + X_2 $ , $ T_4 = T_2 PMF: t + T_2 '$ (missä $ T_2' $ on riippumaton $ T_2 $ , mutta on sama PMF) ja vastaavasti $ T_8 = T_4 + T_4 '$ , $ T_ {16} = T_8 + T_8' $ , $ T_ {32} = T_ {16} + T_ {16} '$ ja $ T_ {64} = T_ {32} + T_ {32} '$ . Tarvitsemme vielä kaksi kierrosta, jotta löydämme kaikkien 100 nopan kokonaispistemäärän kolmen itsenäisen muuttujan summana, $ X = T_ {100} = (T_ {64} + T_ {32} '') + T_4 '' $ , ja lopullinen kääntäminen $ D = X + Z $ . Joten luulen, että tarvitset vain yhdeksän kääntymistä - ja lopullista varten voit rajoittaa vain ne osat, jotka antavat positiivisen arvon $ D $ . Tai jos se on vähemmän vaivaa, osat, jotka antavat ei-positiiviset arvot $ D $ ja ottavat sitten täydennyksen. Jos valitset tehokkaimman tavan, luulen, että pahin tapauksesi on tosiasiassa kahdeksan ja puoli kääntymistä. MUOKKAA: ja kuten @whuber ehdottaa, tämä ei myöskään ole välttämättä optimaalinen!
Käyttämällä tunnistamaani yhdeksän konvoluutiomenetelmää gmp-paketin kanssa, jotta voisin työskennellä bigq
-objektien kanssa ja kirjoittaa ei-optimoidun silmukan konvoluutiot (koska R: n sisäänrakennettu menetelmä ei käsittele bigq
-tuloja), tarkan yksinkertaistetun murto-osan laatiminen kesti vain muutaman sekunnin:
1342994286789364913259466589226414913145071640552263974478047652925028002001448330257335942966819418087658458889485712017471984746983053946540181650207455490497876104509955761041797420425037042000821811370562452822223052224332163891926447848261758144860052289/1355477899826721990460331878897812400287035152117007099242967137806414779868504848322476153909567683818236244909105993544861767898849017476783551366983047536680132501682168520276732248143444078295080865383592365060506205489222306287318639217916612944423026688
joka todellakin pyöristyy arvoon 0,9907902. Tarkan vastauksen saamiseksi en olisi halunnut tehdä sitä liian monilla muutoksilla, tunsin kannettavan tietokoneeni vaihteiden alkavan kurisevan!