Skip to content

Reformat Chapter 4 #2

Merged
merged 3 commits into from
Oct 23, 2021
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 76 additions & 13 deletions ch04.r
Original file line number Diff line number Diff line change
@@ -1,37 +1,61 @@
#############
# Chapter 4.3 (Cumulative Distribution Function)

## 4.10 CDF of a Uniform Random Variable
## CDF of a Gaussian Mixture

# R code to generate the PDF and CDF
library(EnvStats)

x = seq(-5, 10, (5+10)/1000)
x = sort(x)
f = dnormMix(x, 0, 1, 5, 1, p.mix=c(0.7))
plot(x,f, xlim=c(-5,10), ylim=c(0,0.4), type="n")
lines(x, f, lwd=4, col="blue")
polygon(c(min(x), x[x<=0.8]), c(f[x<=0.8], 0), col="lightblue")
grid()

F = pnormMix(x, 0, 1, 5, 1, p.mix=c(0.7))
plot(x, F, xlim=c(-5,10), ylim=c(0,0.4), type="n")
grid()

## CDF of a Uniform random variable

# R code to generate the PDF and CDF
x = seq(-5, 10, (5+10)/1500)
f = dunif(x, -3, 4)
F = punif(x, -3, 4)
plot(x, f, type="n")
lines(x, f, lwd=5)
grid()
plot(x, F, type="n")
lines(x, F, lwd=5)
grid()

## 4.11 CDF of an exponential random variable
## CDF of an exponential random variable

# R code to generate the PDF and CDF
x = seq(-5, 10, (5+10)/1500)
f = dexp(x, 1/2)
F = pexp(x, 1/2)
plot(x, f, type="n")
lines(x, f, lwd=5)
grid()
plot(x, F, type="n")
lines(x, F, lwd=5)
grid()

#############
# Chapter 4.5

# Generate a uniform random variable
## Generate a uniform random variable

# R code to generate 1000 uniform random numbers
a = 0; b = 1;
X = runif(1000, a, b)
hist(X)
grid()

# Mean, variance, median, mode of a uniform random variable
## Mean, variance, median, mode of a uniform random variable

# R code to computer empirical mean, var, median, mode
library(pracma)
Expand All @@ -42,6 +66,8 @@ V = var(X)
Med = median(X)
Mod = Mode(X)

## Mean and Variance computation (not on "Code and Data" section of website, but written in textbook p.34)

# R code to compute mean and variance
unifstat = function(a, b) {
M = (a+b)/2
Expand All @@ -53,14 +79,16 @@ a = 0; b = 1;
M = unifstat(a, b)$mean
V = unifstat(a, b)$var

## Probability of a uniform random variable

# R code to compute the probability P(0.2 < X < 0.3)
a = 0; b = 1;
F = punif(0.3, a, b) - punif(0.2, a, b)


## PDF and CDF of an exponential random variable
## PDF of an exponential random variable

# R code to plot the exponential PDF
# R code to generate the PDF and CDF of an exponential random variable
lambda1 = 1/2
lambda2 = 1/5
x = seq(0, 1, (0+1)/1000)
Expand All @@ -70,56 +98,82 @@ plot(x, f2, type="n")
lines(x, f1, lwd=4, col="blue")
lines(x, f2, lwd=4, col="red")
legend(0, 1, legend=c(expression(paste(lambda, "=5")), expression(paste(lambda, "=2"))), col=c("red", "blue"), lty=1:1)
grid()

# R code to plot the exponential CDF
lambda1 = 1/2
lambda2 = 1/5
x = seq(0, 1, (0+1)/1000)
F1 = pexp(x, 1/lambda1)
F2 = pexp(x, 1/lambda2)
plot(x, F2, type="n")
lines(x, F1, lwd=4, col="blue")
lines(x, F2, lwd=4, col="red")
legend(0, 1, legend=c(expression(paste(lambda, "=5")), expression(paste(lambda, "=2"))), col=c("red", "blue"), lty=1:1)
grid()

#############
# Chapter 4.6

## PDF and CDF of a Gaussian random variable
## Generate Gaussian PDF (not on "Code and Data" section on website, but written in textbook p.42)

# R code to generate a Gaussian PDF
x = seq(-10, 10, (10+10)/1000)
mu = 0; sigma = 1;
f = dnorm(x, mu, sigma)
plot(x, f, type="n")
lines(x, f, lwd=4, col="blue")
grid()

## PDF and CDF of a Gaussian random variable

# R code to generate standard Gaussian PDF and CDF
x = seq(-5, 5, (5+5)/1000)
f = dnorm(x)
F = pnorm(x)
plot(x, f)
plot(x, F)
plot(x, f, type = "n")
lines(x, f, lwd=6)
grid()
plot(x, F, type = "n")
lines(x, F, lwd=6)
grid()

## Verify standardised gaussian (not on "Code and Data" section on website, but written in textbook p.45)

# R code to verify standardised Gaussian
x = seq(-5, 5, (5+5)/1000)
mu = 3; sigma = 2;
f1 = dnorm((x-mu)/sigma, 0, 1) # Standardised
f2 = dnorm(x, mu, sigma) # Raw

# Skewness and kurtosis of a random variable

# R code to plot a Gamma distribution
x = seq(0, 30, (0+30)/1000)
theta = 1
plot(x, dgamma(x, 2, theta), type = "n")
lines(x, dgamma(x, 2, theta), lwd = 4)
lines(x, dgamma(x, 5, theta), lwd = 4, col = "#333333")
lines(x, dgamma(x, 10, theta), lwd = 4, col = "#666666")
lines(x, dgamma(x, 15, theta), lwd = 4, col = "#999999")
lines(x, dgamma(x, 20, theta), lwd = 4, col = "#CCCCCC")
legend(23, 0.36, legend=c("k = 2", "k = 5", "k = 10", "k = 15", "k = 20"), col=c("1", "#333333", "#666666", "#999999", "#CCCCCC"), lwd = 4,lty=1:1)
grid()

# R code to compute skewness and kurtosis
library(e1071)
X = rgamma(10000, 3, 5)
s = skewness(X)
k = kurtosis(X)

# Histogram of Z = X1 + X2 + X3 (not on "Code and "Data" section, but written in textbook p.50)

# R code to show the histogram of Z = X1 + X2 + X3
N = 10000
X1 = runif(N, 1, 6)
X2 = runif(N, 1, 6)
X3 = runif(N, 1, 6)
Z = X1 + X2 + X3
hist(Z, breaks=seq(2.5,18.5))
grid()

#############
# Chapter 4.8

## Generating Gaussians from uniform
Expand All @@ -131,13 +185,19 @@ sigma = 2
U = runif(10000, 0, 1)
gU = sigma * inverseCDF(U, pnorm) + mu;
hist(U)
grid()
hist(gU)
grid()

## Generating exponential random variables from uniform random nums (not in "code" section, but in textbook p.63)

# R code to generate exponential random variables
lambda = 1
U = runif(10000, 0, 1)
gU = -(1/lambda)*log(1-U)

## Plotting PDFs based on transformed vars (not in "code" section, but in textbook p.65)

# R code to generate the desired random variables
U = runif(10000, 0, 1)
gU = rep(0, 10000)
Expand All @@ -146,3 +206,6 @@ gU[U > 0.1 & U <= 0.6] = 2
gU[U > 0.6 & U <= 0.9] = 3
gU[U > 0.9 & U <= 1] = 4
hist(gU)
grid()

#############