Examinator: Serik Sagitov, serik@chalmers.se

Kurswebbsida: LGMA30.

Datorövningen är obligatorisk. Om man inte kan delta datorövningen, måste en rapport (3-8 sidor) med lösningsförslag, resultat och diagram (med tolkning) lämnas in senast på måndag, den 2 oktober 2018.



1 Den klassiska sannolikhetsdefinitionen

Vi kan simulera diskreta slumptal av \(U\left(0,1\right)\)-fördelningen med hjälp av funktionen runif(n, min = 0, max = 1). Funktionen ger nobs random likformigt slumptal mellan min och max.

nobs = 7
random_unif = runif(nobs, min = 0, max = 1)

Visa slumtalen

random_unif
## [1] 0.30776611 0.25767250 0.55232243 0.05638315 0.46854928 0.48377074
## [7] 0.81240262

Gör en histrogram av de likformig slumptal m.h.a. hist funktionen.

hist(random_unif, breaks=10, xlim=c(0,1), main="Histogram of random uniform values")

Vi kan titta på den teoretiska täthetsfunktionen av \(U\left(1\right)\) med hjälp av curve funktionen.

curve(expr = dunif(x,0,1) ,from = 0,to = 1, xlab="x", ylab=expression(f[X](x)),
      ylim = c(0,1.1), xlim = c(0,1), main = "Uniform(0,1)")

Vi får sammanfatning av våra observationer random_unif med summary funktionen

summary(random_unif)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
## 0.05638 0.28272 0.46855 0.41984 0.51805 0.81240

Den empiriska sannolikheten för värdet \(P\left(0.3\leq X \leq 0.7\right)\) kan berräknas m.h.a. den empiriska kumulativa fördelningsfunktionen, i R språket den funktionen är ecdf.

Fn = ecdf(random_unif) # create the empirical distribution function
Fn(0.7) - Fn(0.3) # find the probability of an interval
## [1] 0.5714286


Frågor

  1. Ser histogrammen likformig ut? Vilka är det empiriska medelvärdet och den empiriska sannolikheten för värdet \(P\left(0.4 \leq X < 0.6\right)\)?
# Fn(?) - Fn(?)
# mean(?) 
# summary(?)
  1. Vilka är det teoretiska medelvärdet och den teoretiska sannolikheten \(P\left(0.4\leq X < 0.6\right)\)

  2. Vad är den empiriska sannolikheten om vi har nobs = 10000?

# nobs = ?
random_unif = runif(nobs, min = 0, max = 1)
Fn = ecdf(random_unif) 
# Fn(?) - Fn(?) 
  1. visa en histogram av x som har 10000 observationer.
# hist(?, breaks=10, xlim=c(0,10))


2 Jämförelse av fördelningar


Bionomial- och Poissonfördelning

I R språket man kan använda funktionen dpois(x,lambda) för att få sannolikheten av \(x\) om det fördelas Poisson med \(\lambda = lambda\). sannolikheten av \(x\) med lambda = \(\lambda\). I funktionen, \(x\) kan vara ett värde eller en vektor med olika värden. Om vi vill få sannolikheten för \(x = 2\) vi gör

dpois(3,lambda = 3)
## [1] 0.2240418

Om vi vill få sannolikheten för flera \(x\) värden, till exempel \(x_1 = 0, x_2 =2, x_3 = 4\). Vi kan sätta värden i en vektor x = c(0,2,4) och använda dpois(x,lambda).

x = c(0,2,4)
Poi_3 = dpois(x, lambda = 3)
data.frame(x=x,Po3 =Poi_3)

Vi kan få sannolikheterna för värden \(x=4,5\) om fördelningen är \(Po\left(3\right)\).

x = c(4,5)
Poi_3 = dpois(x, lambda = 3)
data.frame(x=x,Po3 =Poi_3)

Vi kan också göra en vektor \(x=0,\ldots,15\) med hjälp av seq funktionen och få sannolikheten för varje värde i \(x\). Om \(x=0,1,\ldots,15\)

x = seq(0,15, by = 1)
Poi_3 = dpois(x, lambda = 3)
data.frame(x=x,Po3 =Poi_3)

I R språket man kan använda funktionen dbinom(x, size, p) för att få Binomial sannolikheten av \(x\) när “size” (eller \(n\)) är antalet utfall och \(p\) är sannolikheten för en viss händelse. Vi kan få sannolikheterna för \(x=0,\ldots,15\) om fördelningen är \(Bin\left(10,0.3\right)\) på det följande sättet

x = seq(0,15, by = 1)
Bin_10_0.3 = dbinom(x, size = 10, p = 0.3)
data.frame(x=x,Bin_n10_p0.3 = Bin_10_0.3)

och för \(Bin\left(100,0.03\right)\) fördelninsfunktionen,

Bin_100_0.03 = dbinom(x, size = 100, p = 0.03)
data.frame(x=x,Bin_n100_p0.3 = Bin_100_0.03)

visa våra fördelningar:

max_p = max(Bin_100_0.03,Bin_10_0.3,Poi_3)
plot(x,Poi_3, xlab="x", ylab="probability", type="l", col = "black", 
     main="Poisson vs Binomial", ylim = c(0,max_p))
lines(x, Bin_10_0.3, col = "blue", type ="l")
lines(x, Bin_100_0.03, col = "red", type ="l")
legend(max(x)/2, max_p, c("Poisson(3)", "Binomial(10,0.3)","Binomial(100,0.03"), 
       cex = 0.7, pch = c(18,19,20), col = c("black","blue","red"), lty = 1, bty = "n")


Frågor

  1. Vad ser du för mönster och varför?
# Write your answer
  1. När liknas binomal fördelning till Poisson fördelning?
# Write your answer


Binomial- och Normalfördelning

Jämför en \(Bin\left(n, p\right)\) med en \(N\left(\mu, \sigma \right)\) med \(\mu = np\) och \(\sigma = \sqrt{np\left(1 − p\right)}\) för olika \(n\) och \(p\) värden.

Om \(x\) är Normal fördelad med \(mean=\mu\) och \(sd = \sigma\), kan man få täthetsfunktionen med hjälp av R funktionen dnorm(x, mean, sd). Som tidigare, x kan vara ett värde eller ett vektor med olika värden.

x = seq(-3,3,0.4) #en vektor med värden -2,-1.9,-1,8,...,0,...,1.8,1.9,2
standard_normal = dnorm(x, 0, 1) #standard normal probabilities for the values in x
data.frame(x = x, probabilities = standard_normal) # shows the values in a data frame format

Vi kan göra en plot av standard normal fördelningen med värdena i \(x\).

plot(x,standard_normal, main = "Random observations N(0,1)", type="o",
     xlab = "x", ylab = "probability", ylim = c(0,0.4), col="blue")

Vi kan rita en normal fördelning och en binomial fördelning tillsammans för olika \(x\) värden. Till exempel \(Bin(20,0.05)\) och \(N(1,0.9746794)\) (kom ihåg att \(\mu=np\) och \(\sigma=\sqrt{ np\left(1-p\right)}\)).

n = 20
x = seq(0,n, by=0.1)
p = 0.05

my.binomial = dbinom(floor(x), size = 40, prob = 0.1)
mu = n*p 
sd = sqrt(n*p*(1-p))
my.normal = dnorm(x, mu,sd)

max_p = max(my.binomial,my.normal)
plot(x,my.binomial, main=paste0("Bin(n = ", n, " = ", p, ") vs N(m,sd)"), 
     type="l", col="blue", ylim=c(0,max_p))
lines(x,my.normal, col="red")
legend(max(x)/3, max_p, c("Bin(n=40,p=0.1)","N(mu,sd)"), 
       cex = 0.7, pch = c(19,20), col = c("blue","red"), lty = 1, bty = "n")


Frågor

  1. Välj 2 eller olika värden kombinationer för \(n\) och \(p\) och visa diagrammen.
##### 1a kombinationen
#n = ?
#p = ?

##### 2a kombinationen

#n = ?
#p = ?
  1. För vilka val av \(n\) och \(p\) är Normalfördelningen en bra approximation? När är den olämplig?
# write your answer

R för att beräkna sannolikheter

Vi kan använda R för att beräkna \(P\left(X\leq x\right)\) för dem flesta fördelningsfunktioner.

Normal

Till exempel, om \(X\sim N\left(mean,sd\right)\), vi får \(P\left(X\leq x\right)\) med funktionen pnorm(x,mean,sd). Beräakna \(P\left(X\leq 1\right)\) om \(X\sim N\left(1,1\right)\)

mu = 1
sd = 1
pnorm(1,2,2)
## [1] 0.3085375


Frågor

  1. Beräkna \(P\left(0.5 \leq X\leq 2\right)\) om \(X\sim N\left(5,2\right)\)
# mu = ?
# sd = ?
# p1 = pnorm(?,?,?)
# p2 = pnorm(?,?,?)
# p1-p2
  1. Beräkna \(P\left( X \geq 2\right)\) om \(X\sim N\left(0,1\right)\)
# mu = ?
# sd = ?
# p1 = pnorm(?,?,?)
# 1 - p1