V21 - oppgåve 1, del 2
Contents
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#
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