V21 - oppgåve 1, del 2#

Her er eit døme på korleis denne eksamensoppgåva kan løysast med simulering. I tillegg er oppgåve c) løyst utan simulering.

I tillegg til statsministeren er det 19 ministrar i regjeringa. Av desse 20 er 12 medlemmer i Høgre, 4 er medlemmer i Venstre, og 4 er medlemmer i Kristeleg Folkeparti.
Ved eit arrangement er det bestemt at 6 av ministrane skal vere til stades. Desse blir tilfeldig trekte blant de 20 ministrane.

from numpy.random import default_rng
rng = default_rng()

HØGRE = 12
VENSTRE = 4
KRF = 4

UTVAL = 6

N = 1000000

a)#

Kva er sannsynet for at alle dei 6 som blir trekte ut, er frå Høgre?

# VARIANT 1 - komprimert
ngood = HØGRE
nbad = VENSTRE + KRF

X = 6

sannsyn = sum(rng.hypergeometric(ngood, nbad, UTVAL, N) == X) / N

print(f"Sannsynet for at alle som vert trekt ut er frå Høgre er {sannsyn:.2}")
Sannsynet for at alle som vert trekt ut er frå Høgre er 0.024
# VARIANT 2 - løkke 
ngood = HØGRE
nbad = VENSTRE + KRF

X = 6
alle = 0

for i in range(N):
    trekk = rng.hypergeometric(ngood, nbad, UTVAL)
    if trekk == X:
        alle += 1

sannsyn = alle / N

print(f"Sannsynet for at alle som vert trekt ut er frå Høgre er {sannsyn:.2}")
Sannsynet for at alle som vert trekt ut er frå Høgre er 0.024

b)#

Bestem sannsynet for at statsministeren er blant dei som blir trekte ut.

# VARIANT 1 - komprimert
ngood = 1
nbad = (HØGRE - 1) + VENSTRE + KRF

X = 1

sannsyn = sum(rng.hypergeometric(ngood, nbad, UTVAL, N) == X) / N

print(f"Sannsynet for at statsministeren vert trekt er {sannsyn:.2}")
Sannsynet for at statsministeren vert trekt er 0.3
# VARIANT 2 - løkke
ngood = 1
nbad = (HØGRE - 1) + VENSTRE + KRF

X = 1
erna = 0

for i in range(N):
    trekk = rng.hypergeometric(ngood, nbad, UTVAL)
    if trekk == X:
        erna += 1

sannsyn = erna / N

print(f"Sannsynet for at statsministeren vert trekt er {sannsyn:.2}")
Sannsynet for at statsministeren vert trekt er 0.3

c)#

Bestem sannsynet for at 2 frå Høgre, 2 frå Venstre og 2 frå Kristleg Folkeparti vert trekt ut.

Obs!

Her kan me ikkje bruka den vanlege hypergeometric-funksjonen sidan populasjonen og utvalet er delt i meir enn 2.

Ved simulering#

ministrar = [HØGRE, VENSTRE, KRF]

to_frå_kvar = 0

for i in range(N):
    trekk = rng.multivariate_hypergeometric(ministrar, UTVAL)
    sjekk = (trekk == [2, 2, 2])

    if sjekk.all():
        to_frå_kvar += 1

sannsyn = to_frå_kvar / N

print(f"Sannsynet for at det vert trekt to frå kvart parti er {sannsyn:.2}")
Sannsynet for at det vert trekt to frå kvart parti er 0.061

Ved formel#

\[\frac{\left( 12 \atop 2 \right)\left( 4 \atop 2 \right)\left( 4 \atop 2 \right)}{\left( 20 \atop 6 \right)}\]
import scipy.special as sc

sannsyn = (sc.binom(HØGRE, 2) * sc.binom(VENSTRE, 2) * sc.binom(KRF, 2)) / (sc.binom(HØGRE + VENSTRE + KRF, 6))

print(f"Sannsynet for at det vert trekt to frå kvart parti er {sannsyn:.2}")
Sannsynet for at det vert trekt to frå kvart parti er 0.061
# Litt mindre komprimert, og kanskje meir oversiktleg

binom_H = sc.binom(HØGRE, 2)
binom_V = sc.binom(VENSTRE, 2)
binom_KrF = sc.binom(KRF, 2)

binom_alle = sc.binom(HØGRE + VENSTRE + KRF, 6)

sannsyn = (binom_H * binom_V * binom_KrF) / binom_alle

print(f"Sannsynet for at det vert trekt to frå kvart parti er {sannsyn:.2}")
Sannsynet for at det vert trekt to frå kvart parti er 0.061