Attilio Meucci - Chapter 1
Purpose
Playground for Chapter 1 - Risk and Asset Allocation - Attilio Meucci
- Basic moments of UNIF
> n <- 10000 > x <- runif(n) > location <- mean(x) > dispersion <- sd(x) > skewness <- sum((x - 0.5)^3)/(n * (sd(x))^3) > kurtosis <- sum((x - 0.5)^4)/(n * (sd(x))^4) > print(paste(location, dispersion, skewness, kurtosis, sep = " ")) [1] "0.500898264411953 0.289608228592819 0.00694912472323462 1.80087482669602" |
- ecdf for unif
> par(mfrow = c(1, 1)) > x <- runif(300) > plot(ecdf(x)) |
- T and Normal
> df <- 8 > mu1 <- 0 > var1 <- 0.1 > n <- 1e+05 > x <- mu1 + sqrt(var1) * rt(n, df = df) > mu2 <- 0.1 > var2 <- 0.2 > y <- rlnorm(n, meanlog = mu2, sdlog = sqrt(var2)) > z <- x + y |
> par(mfrow = c(2, 2)) > plot(z, pch = 19, col = "blue") > hist(z, breaks = c(seq(-6, 10, 0.1))) > z1 <- ecdf(z) > plot(z1) > plot(quantile(z, probs = seq(0, 1, 0.001))) |
- Empirical CDF and Actual CDF
> par(mfrow = c(1, 1)) > n <- 200 > x <- rnorm(n, 3, sqrt(5)) > y <- x[order(x, decreasing = F)] > plot(ecdf(y), ylim = c(0, 1), xlim = range(y), xlab = "", ylab = "", + main = "") > actual.cdf <- pnorm(y, 3, sqrt(5)) > par(new = T) > plot(y, actual.cdf, col = "red", pch = 19, cex = 1.2, xlim = range(y), + ylim = c(0, 1), xlab = "", ylab = "", main = "") > legend("topleft", legend = c("Empirical CDF", "Actual CDF"), + fill = c("black", "red")) |
1.2.2. Generalized T
> var1 <- 6 > mu1 <- 2 > n <- 1e+05 > iterations <- 20 > results <- matrix(data = NA, nrow = iterations, ncol = 2) > for (df in 1:iterations) { + x <- mu1 + sqrt(var1) * rt(n, df = df) + results[df, 1] <- abs(var(x) - 7) + results[df, 2] <- df + } > results[which(results[, 1] == min(results[, 1])), ] [1] 0.0269576 14.0000000 > 2/(1 - 6/7) [1] 14 |
Student t
> x.old <- mu1 + sqrt(var1) * rt(n, df = 14) > y <- rnorm(n, 0, sqrt(var1)) > z <- rchisq(n, 14) > x.new <- mu1 + y/sqrt(z/15) > par(mfrow = c(1, 1)) > hist(x.old, xlim = c(-10, 10), col = "blue", ylim = c(0, 25000), + main = "", xlab = "") > par(new = T) > hist(x.new, xlim = c(-10, 10), col = "red", ylim = c(0, 25000), + main = "", xlab = "") |
LogNormal Distribution
> mu.x <- 3 > var.x <- 5 > n <- 1000 > var.u <- log(1 + var.x/mu.x) > mu.u <- log(mu.x) - 0.5 * log(1 + var.x/(mu.x * mu.x)) > x <- rlnorm(n, meanlog = mu.u, sdlog = sqrt(var.u)) > y <- x[order(x, decreasing = F)] > actual.cdf <- plnorm(y, meanlog = mu.u, sdlog = sqrt(var.u)) > par(mfrow = c(2, 2)) > plot(x, pch = 19, col = "blue") > hist(x, col = "blue", main = "X", breaks = c(seq(min(x), max(x), + length = 100))) > hist(log(x), col = "blue", main = "LogX", breaks = c(seq(min(log(x)), + max(log(x)), length = 100))) > plot(ecdf(y), xlim = c(0, 100)) > par(new = T) > plot(y, actual.cdf, xlim = c(0, 100), col = "red") |
Empirical Quantile Vs Exact Quantile
> par(mfrow = c(1, 1)) > z <- data.frame(quantiles = (quantile(y, prob = seq(0, 1, 0.01)))) > z$qts <- seq(0, 1, 0.01) > plot(z$qts, z[, 1], pch = 19, col = "red", xlab = "quantile", + ylab = "z", xlim = c(0, 1), cex = 1.5, main = "logX") > par(new = T) > plot(actual.cdf, y, xlim = c(0, 1), col = "grey", xlab = "", + ylab = "") > legend("topleft", legend = c("actual quantiles", "empirical quantiles"), + fill = c("red", "grey")) |
Gamma Vs Chi Square
> n <- 10000 > mu <- 0 > sig <- 1 > z1 <- matrix(data = NA, nrow = n, ncol = 11) > for (i in 1:10) { + z1[, i] <- (rnorm(n, mu, sig))^2 + } > z1[, 11] <- rowSums(z1[, 1:10]) > rad <- z1[order(z1[, 11], decreasing = F), 11] > par(mfrow = c(1, 1)) > actual.cdf <- pchisq(rad, 10) > plot(ecdf(rad), xlim = c(0, 30), main = " Gamma Vs Chi Square", + xlab = "", ylab = "") > par(new = T) > plot(rad, actual.cdf, xlim = c(0, 30), col = "red", cex = 0.3, + xlab = "", ylab = "", main = "") > legend("topleft", legend = c("chi sq cdf", "empirical gamma cdf"), + fill = c("red", "black")) |