Question 1:

#Actual true probability 
print("Actual True Probability")
## [1] "Actual True Probability"
pnorm(3,mean = 0,sd=1,lower.tail = FALSE,log.p = FALSE)
## [1] 0.001349898
#Setting seed to replicate results
set.seed(123)
#Sampling 10,000 observations from population using normal dist.
samp=rnorm(10000,mean=0,sd=1)
#Extracting onservations greater than 3
newdata <- samp[which(samp > 3)]
#Probability of sample observations greater than 3
print("Probability of P(Z>3)")
## [1] "Probability of P(Z>3)"
length(newdata)/length(samp)
## [1] 0.0015
#Variance of sample
print("Variance of Sample")
## [1] "Variance of Sample"
var(samp)
## [1] 0.9972751

Question 2:

#Setting up library for importance sampling
library(truncnorm)
#Setting seed to replicate results
set.seed(123)
#Sampling ONLY observations greater than 3
samp=rtruncnorm(n=10000, a=3, mean=0, sd=1)
#Probability of sample observations greater than 3
print("Probability of P(Z>3)")
## [1] "Probability of P(Z>3)"
length(samp)/length(samp)
## [1] 1
#Variance of sample
print("Variance of Sample")
## [1] "Variance of Sample"
var(samp)
## [1] 0.06956769

Question 3:

# metropolis for N(0,1) based on uniform candidates
norm<-function (n, alpha) 
{
        vec <- vector("numeric", n)
        x <- 0
        vec[1] <- x
        for (i in 2:n) {
                innov <- runif(1, -alpha, alpha)
                can <- x + innov
                aprob <- min(1, dnorm(can)/dnorm(x))
                u <- runif(1)
                if (u < aprob) 
                        x <- can
                vec[i] <- x
        }
        vec
}

#Setting seed to replicate results
set.seed(123)
normvec<-norm(5000,1)
par(mfrow=c(2,1))
plot(ts(normvec))
hist(normvec,30)

par(mfrow=c(1,1))
#Extracting onservations greater than 3
newdata <- normvec[which(normvec > 3)]
#Probability of sample observations greater than 3
print("Probability of P(Z>3)")
## [1] "Probability of P(Z>3)"
length(newdata)/length(samp)
## [1] 0.0023
#Variance of sample
print("Variance of Sample")
## [1] "Variance of Sample"
var(normvec)
## [1] 1.02479