Skip to content
Snippets Groups Projects
ex4_1_6.R 1.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • bjje's avatar
    bjje committed
    ####################
    # Exercise 4.1.6
    ####################
    rm(list = ls()) # Clear work space
    
    library(MASS)
    
    # Digits to include in analysis (to include all, n = 1:10)
    n <- c(1) # c(1,5,9)
    n <- sort(n)
    
    # Load the library R.matlab to enable the function readMat,
    # which allows R to read the matlab .mat format.
    library(R.matlab) # install.packages("R.matlab")
    
    # The row of training data that we will look at
    i <- 1
    
    # Read in the data
    data <- readMat(file.path("Data", "zipdata.mat"))
    
    # Check that the structure data contains two matrices, testdata and traindata
    names(data)
    
    ncols <- ncol(data$traindata)
    
    # Extract digits
    X <- data$traindata[, 2:ncols]
    y <- data$traindata[, 1]
    classNames <- c("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10")
    classLabels <- classNames[y + 1]
    
    # Remove digits that are not to be inspected
    j <- match(y, n)
    X <- X[!is.na(j), ]
    classLabels <- classLabels[!is.na(j)]
    classNames <- classNames[n + 1]
    y <- y[!is.na(j)]
    for (k in 0:(length(n) - 1))
    {
      classlab <- n[k + 1]
      y[y == classlab] <- k
    }
    
    # Compute mean, standard deviations, and covariance matrix
    mu <- colMeans(X)
    s <- apply(X, 2, sd)
    S <- cov(X)
    
    # Plot result
    {
      par(mfrow = c(1, 2))
      I <- mu
      dim(I) <- c(16, 16)
      image(I[, 16:1], main = "Digits: Mean", col = gray(32:0 / 32))
      I <- s
      dim(I) <- c(16, 16)
      image(I[, 16:1], main = "Digits: SD", col = gray(32:0 / 32))
    }