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.
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
# Fn(?) - Fn(?)
# mean(?)
# summary(?)
Vilka är det teoretiska medelvärdet och den teoretiska sannolikheten \(P\left(0.4\leq X < 0.6\right)\)
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(?)
x
som har 10000 observationer.# hist(?, breaks=10, xlim=c(0,10))
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")
# Write your answer
# Write your answer
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")
##### 1a kombinationen
#n = ?
#p = ?
##### 2a kombinationen
#n = ?
#p = ?
# write your answer
Vi kan använda R för att beräkna \(P\left(X\leq x\right)\) för dem flesta fördelningsfunktioner.
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
# mu = ?
# sd = ?
# p1 = pnorm(?,?,?)
# p2 = pnorm(?,?,?)
# p1-p2
# mu = ?
# sd = ?
# p1 = pnorm(?,?,?)
# 1 - p1