R/outliers.R

Defines functions Rosner_outliers Grubbs_outliers Dixon_outliers

Documented in Dixon_outliers Grubbs_outliers Rosner_outliers

#' Locates the positions of outliers
#' 
#' @param df A data frame containing the PSM table from database searches.
#' @param range_colRatios The range of columns.
#' @return A data frame.
#' @examples \donttest{locate_outliers(df, 2:3)}
locate_outliers <- function (df, range_colRatios) 
{
  for(col_index in range_colRatios) {
    n <- colSums(!is.na(df[col_index]))
    
    if (n > 25) {
      df[, col_index] <- Rosner_outliers(df[, col_index])
    } 
    else if (n > 2) {
      df[, col_index] <- Dixon_outliers(df[, col_index])
    }
  }
  
  invisible(df)
}


#' Outlier removals with Dixon's method
#' 
#' @param x A data frame.
#' @param type The type of Dixon method. See also outliers::dixon.test.
#' @param opposite The high or low. See also outliers::dixon.test.
#' @param two.sided Logical; is two-sided or not. See also
#'   outliers::dixon.test.
dixon_test <- function (x, type = 0, opposite = FALSE, two.sided = TRUE) 
{
  x <- sort(x[complete.cases(x)])
  n <- length(x)
  
  if ((type == 10 || type == 0) && (n < 3 || n > 30)) 
    stop("Sample size must be in range 3-30")
  
  if (type == 11 && (n < 4 || n > 30)) 
    stop("Sample size must be in range 4-30")
  
  if (type == 12 && (n < 5 || n > 30)) 
    stop("Sample size must be in range 5-30")
  
  if (type == 20 && (n < 4 || n > 30)) 
    stop("Sample size must be in range 4-30")
  
  if (type == 21 && (n < 5 || n > 30)) 
    stop("Sample size must be in range 5-30")
  
  if (type == 22 && (n < 6 || n > 30)) 
    stop("Sample size must be in range 6-30")
  
  if (sum(c(0, 10, 11, 12, 20, 21, 22) == type) == 0) 
    stop("Incorrect type")
  
  if (type == 0) {
    if (n <= 7) 
      type <- 10
    else if (n > 7 & n <= 10) 
      type <- 11
    else if (n > 10 & n <= 13) 
      type <- 21
    else 
      type <- 22
  }
  
  if (xor(((x[n] - mean(x)) < (mean(x) - x[1])), opposite)) {
    alt <- "low"
    
    if (type == 10) {
      Q = (x[2] - x[1])/(x[n] - x[1])
    }
    else if (type == 11) {
      Q = (x[2] - x[1])/(x[n - 1] - x[1])
    }
    else if (type == 12) {
      Q = (x[2] - x[1])/(x[n - 2] - x[1])
    }
    else if (type == 20) {
      Q = (x[3] - x[1])/(x[n] - x[1])
    }
    else if (type == 21) {
      Q = (x[3] - x[1])/(x[n - 1] - x[1])
    }
    else {
      Q = (x[3] - x[1])/(x[n - 2] - x[1])
    }
  }
  else {
    alt <- "high"
    
    if (type == 10) {
      Q = (x[n] - x[n - 1])/(x[n] - x[1])
    }
    else if (type == 11) {
      Q = (x[n] - x[n - 1])/(x[n] - x[2])
    }
    else if (type == 12) {
      Q = (x[n] - x[n - 1])/(x[n] - x[3])
    }
    else if (type == 20) {
      Q = (x[n] - x[n - 2])/(x[n] - x[1])
    }
    else if (type == 21) {
      Q = (x[n] - x[n - 2])/(x[n] - x[2])
    }
    else {
      Q = (x[n] - x[n - 2])/(x[n] - x[3])
    }
  }
  
  pval <- p_dixon(Q, n, type)
  
  if (two.sided) {
    pval <- 2 * pval
    
    if (pval > 1) 
      pval <- 2 - pval
  }
  
  out <- list(statistic = c(Q = Q), alternative = alt, p.value = pval)

  invisible(out)
}


#' Distribution function
#' 
#' @param p Vector of probabilities. See also outliers::dixon.test.
#' @param n Length of sample Length of sample. 
#' @param rev Logical; if TRUE, acts as p_dixon.
#' @inheritParams dixon_test
q_dixon <- function (p, n, type = 10, rev = FALSE) 
{
  if ((type == 10 || type == 0) & (n < 3 || n > 30)) 
    stop("Sample size must be in range 3-30")
  
  if (type == 11 & (n < 4 || n > 30)) 
    stop("Sample size must be in range 4-30")
  
  if (type == 12 & (n < 5 || n > 30)) 
    stop("Sample size must be in range 5-30")
  
  if (type == 20 & (n < 4 || n > 30)) 
    stop("Sample size must be in range 4-30")
  
  if (type == 21 & (n < 5 || n > 30)) 
    stop("Sample size must be in range 5-30")
  
  if (type == 22 & (n < 6 || n > 30)) 
    stop("Sample size must be in range 6-30")
  
  if (sum(c(0, 10, 11, 12, 20, 21, 22) == type) == 0) 
    stop("Incorrect type")
  
  if (type == 0) {
    if (n <= 7) 
      type <- 10
    else if (n > 7 & n <= 10) 
      type <- 11
    else if (n > 10 & n <= 13) 
      type <- 21
    else 
      type <- 22
  }
  
  pp <- c(0.005, 0.01, 0.02, 0.025, 0.05, 0.1, 0.2, 0.3, 0.4, 
          0.5, 0.6, 0.7, 0.8, 0.9, 0.95)
  
  q10 <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, 0.994, 0.988, 0.976, 0.97, 0.941, 0.886, 
           0.781, 0.684, 0.591, 0.5, 0.409, 0.316, 0.219, 0.114, 
           0.059, 0.926, 0.889, 0.846, 0.829, 0.765, 0.679, 0.56, 
           0.471, 0.394, 0.324, 0.257, 0.193, 0.13, 0.065, 0.033, 
           0.821, 0.78, 0.729, 0.71, 0.642, 0.557, 0.451, 0.373, 
           0.308, 0.25, 0.196, 0.146, 0.097, 0.048, 0.023, 0.74, 
           0.698, 0.644, 0.625, 0.56, 0.482, 0.386, 0.318, 0.261, 
           0.21, 0.164, 0.121, 0.079, 0.038, 0.018, 0.68, 0.637, 
           0.586, 0.568, 0.507, 0.434, 0.344, 0.281, 0.23, 0.184, 
           0.143, 0.105, 0.068, 0.032, 0.016, 0.634, 0.59, 0.543, 
           0.526, 0.468, 0.399, 0.314, 0.255, 0.208, 0.166, 0.128, 
           0.094, 0.06, 0.029, 0.014, 0.598, 0.555, 0.51, 0.493, 
           0.437, 0.37, 0.29, 0.234, 0.191, 0.152, 0.118, 0.086, 
           0.055, 0.026, 0.013, 0.568, 0.527, 0.483, 0.466, 0.412, 
           0.349, 0.273, 0.219, 0.178, 0.142, 0.11, 0.08, 0.051, 
           0.025, 0.012, 0.542, 0.502, 0.46, 0.444, 0.392, 0.332, 
           0.259, 0.208, 0.168, 0.133, 0.103, 0.074, 0.048, 0.023, 
           0.011, 0.522, 0.482, 0.441, 0.426, 0.376, 0.318, 0.247, 
           0.197, 0.16, 0.126, 0.097, 0.07, 0.047, 0.022, 0.011, 
           0.503, 0.465, 0.425, 0.41, 0.361, 0.305, 0.237, 0.188, 
           0.153, 0.12, 0.092, 0.067, 0.043, 0.021, 0.01, 0.488, 
           0.45, 0.411, 0.396, 0.349, 0.294, 0.228, 0.181, 0.147, 
           0.115, 0.088, 0.064, 0.041, 0.02, 0.01, 0.475, 0.438, 
           0.399, 0.384, 0.338, 0.285, 0.22, 0.175, 0.141, 0.111, 
           0.085, 0.062, 0.04, 0.019, 0.01, 0.463, 0.426, 0.388, 
           0.374, 0.329, 0.277, 0.213, 0.169, 0.136, 0.107, 0.082, 
           0.06, 0.039, 0.019, 0.009, 0.452, 0.416, 0.379, 0.365, 
           0.32, 0.269, 0.207, 0.165, 0.132, 0.104, 0.08, 0.058, 
           0.038, 0.018, 0.009, 0.442, 0.407, 0.37, 0.356, 0.313, 
           0.263, 0.202, 0.16, 0.128, 0.101, 0.078, 0.056, 0.036, 
           0.018, 0.009, 0.433, 0.398, 0.363, 0.349, 0.306, 0.258, 
           0.197, 0.157, 0.125, 0.098, 0.076, 0.055, 0.036, 0.017, 
           0.008, 0.425, 0.391, 0.356, 0.342, 0.3, 0.252, 0.193, 
           0.153, 0.122, 0.096, 0.074, 0.053, 0.035, 0.017, 0.008, 
           0.418, 0.384, 0.35, 0.337, 0.295, 0.247, 0.189, 0.15, 
           0.119, 0.094, 0.072, 0.052, 0.034, 0.016, 0.008, 0.411, 
           0.378, 0.344, 0.331, 0.29, 0.242, 0.185, 0.147, 0.117, 
           0.092, 0.071, 0.051, 0.033, 0.016, 0.008, 0.404, 0.372, 
           0.338, 0.326, 0.285, 0.238, 0.182, 0.144, 0.115, 0.09, 
           0.069, 0.05, 0.033, 0.016, 0.008, 0.399, 0.367, 0.333, 
           0.321, 0.281, 0.234, 0.179, 0.142, 0.113, 0.089, 0.068, 
           0.049, 0.032, 0.016, 0.008, 0.393, 0.362, 0.329, 0.317, 
           0.277, 0.23, 0.176, 0.139, 0.111, 0.088, 0.067, 0.048, 
           0.032, 0.015, 0.008, 0.388, 0.357, 0.324, 0.312, 0.273, 
           0.227, 0.173, 0.137, 0.109, 0.086, 0.066, 0.047, 0.031, 
           0.015, 0.007, 0.384, 0.353, 0.32, 0.308, 0.269, 0.224, 
           0.171, 0.135, 0.108, 0.085, 0.065, 0.047, 0.031, 0.015, 
           0.007, 0.38, 0.349, 0.316, 0.305, 0.266, 0.22, 0.168, 
           0.133, 0.106, 0.084, 0.064, 0.046, 0.03, 0.015, 0.007, 
           0.376, 0.345, 0.312, 0.301, 0.263, 0.218, 0.166, 0.131, 
           0.105, 0.083, 0.063, 0.046, 0.03, 0.014, 0.007, 0.372, 
           0.341, 0.309, 0.298, 0.26, 0.215, 0.164, 0.13, 0.103, 
           0.082, 0.062, 0.045, 0.029, 0.014, 0.007)
  
  q11 <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, 0.995, 0.991, 0.981, 0.977, 0.955, 
           0.91, 0.822, 0.737, 0.648, 0.554, 0.459, 0.362, 0.25, 
           0.131, 0.069, 0.937, 0.916, 0.876, 0.863, 0.807, 0.728, 
           0.615, 0.524, 0.444, 0.369, 0.296, 0.224, 0.151, 0.078, 
           0.039, 0.839, 0.805, 0.763, 0.748, 0.689, 0.609, 0.502, 
           0.42, 0.35, 0.288, 0.227, 0.169, 0.113, 0.056, 0.028, 
           0.782, 0.74, 0.689, 0.673, 0.61, 0.53, 0.432, 0.359, 
           0.298, 0.241, 0.189, 0.14, 0.093, 0.045, 0.022, 0.725, 
           0.683, 0.631, 0.615, 0.554, 0.479, 0.385, 0.318, 0.26, 
           0.21, 0.164, 0.121, 0.079, 0.037, 0.019, 0.677, 0.635, 
           0.587, 0.57, 0.512, 0.441, 0.352, 0.288, 0.236, 0.189, 
           0.148, 0.107, 0.07, 0.033, 0.016, 0.639, 0.597, 0.551, 
           0.534, 0.477, 0.409, 0.325, 0.265, 0.216, 0.173, 0.134, 
           0.098, 0.063, 0.03, 0.014, 0.606, 0.566, 0.521, 0.505, 
           0.45, 0.385, 0.305, 0.248, 0.202, 0.161, 0.124, 0.09, 
           0.058, 0.028, 0.013, 0.58, 0.541, 0.498, 0.481, 0.428, 
           0.367, 0.289, 0.234, 0.19, 0.15, 0.116, 0.084, 0.055, 
           0.026, 0.012, 0.558, 0.52, 0.477, 0.461, 0.41, 0.35, 
           0.275, 0.222, 0.18, 0.142, 0.109, 0.079, 0.052, 0.025, 
           0.012, 0.539, 0.502, 0.46, 0.445, 0.395, 0.336, 0.264, 
           0.212, 0.171, 0.135, 0.104, 0.075, 0.049, 0.024, 0.011, 
           0.522, 0.486, 0.445, 0.43, 0.381, 0.323, 0.253, 0.203, 
           0.164, 0.129, 0.099, 0.072, 0.047, 0.023, 0.011, 0.508, 
           0.472, 0.432, 0.417, 0.369, 0.313, 0.244, 0.196, 0.158, 
           0.124, 0.095, 0.096, 0.045, 0.022, 0.011, 0.495, 0.46, 
           0.42, 0.406, 0.359, 0.303, 0.236, 0.19, 0.152, 0.119, 
           0.092, 0.067, 0.044, 0.021, 0.01, 0.484, 0.449, 0.41, 
           0.396, 0.349, 0.295, 0.229, 0.184, 0.148, 0.116, 0.089, 
           0.065, 0.042, 0.02, 0.01, 0.473, 0.439, 0.4, 0.386, 0.341, 
           0.288, 0.223, 0.179, 0.143, 0.112, 0.087, 0.063, 0.041, 
           0.02, 0.01, 0.464, 0.43, 0.392, 0.379, 0.334, 0.282, 
           0.218, 0.174, 0.139, 0.11, 0.084, 0.061, 0.04, 0.019, 
           0.01, 0.455, 0.421, 0.384, 0.371, 0.327, 0.276, 0.213, 
           0.17, 0.136, 0.107, 0.082, 0.059, 0.039, 0.019, 0.009, 
           0.446, 0.414, 0.377, 0.364, 0.32, 0.27, 0.208, 0.166, 
           0.132, 0.104, 0.081, 0.058, 0.038, 0.018, 0.009, 0.439, 
           0.407, 0.371, 0.357, 0.314, 0.265, 0.204, 0.163, 0.13, 
           0.102, 0.079, 0.056, 0.037, 0.018, 0.009, 0.432, 0.4, 
           0.365, 0.352, 0.309, 0.26, 0.2, 0.16, 0.127, 0.1, 0.077, 
           0.055, 0.036, 0.018, 0.009, 0.426, 0.394, 0.359, 0.346, 
           0.304, 0.255, 0.197, 0.156, 0.124, 0.098, 0.076, 0.054, 
           0.036, 0.017, 0.009, 0.42, 0.389, 0.354, 0.341, 0.299, 
           0.25, 0.193, 0.154, 0.122, 0.096, 0.074, 0.053, 0.035, 
           0.017, 0.008, 0.414, 0.383, 0.349, 0.337, 0.295, 0.246, 
           0.19, 0.151, 0.12, 0.095, 0.073, 0.052, 0.034, 0.017, 
           0.008, 0.409, 0.378, 0.344, 0.332, 0.291, 0.243, 0.188, 
           0.149, 0.118, 0.093, 0.072, 0.051, 0.034, 0.016, 0.008, 
           0.404, 0.374, 0.34, 0.328, 0.287, 0.239, 0.185, 0.146, 
           0.116, 0.092, 0.07, 0.051, 0.033, 0.016, 0.008, 0.399, 
           0.369, 0.336, 0.324, 0.283, 0.236, 0.182, 0.144, 0.115, 
           0.09, 0.069, 0.05, 0.032, 0.016, 0.008)
  
  q12 <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, 0.996, 0.992, 0.984, 0.98, 0.96, 
           0.919, 0.838, 0.755, 0.669, 0.579, 0.483, 0.381, 0.268, 
           0.143, 0.074, 0.951, 0.925, 0.891, 0.878, 0.824, 0.745, 
           0.635, 0.545, 0.465, 0.39, 0.316, 0.24, 0.165, 0.088, 
           0.049, 0.875, 0.836, 0.791, 0.773, 0.712, 0.636, 0.528, 
           0.445, 0.374, 0.307, 0.245, 0.183, 0.123, 0.064, 0.031, 
           0.797, 0.76, 0.708, 0.692, 0.632, 0.557, 0.456, 0.382, 
           0.317, 0.258, 0.203, 0.152, 0.101, 0.056, 0.025, 0.739, 
           0.702, 0.656, 0.639, 0.58, 0.504, 0.409, 0.339, 0.27, 
           0.227, 0.177, 0.13, 0.086, 0.044, 0.021, 0.694, 0.655, 
           0.61, 0.594, 0.537, 0.464, 0.373, 0.308, 0.258, 0.204, 
           0.158, 0.116, 0.075, 0.038, 0.019, 0.658, 0.619, 0.575, 
           0.559, 0.502, 0.431, 0.345, 0.283, 0.232, 0.187, 0.145, 
           0.106, 0.069, 0.035, 0.017, 0.629, 0.59, 0.546, 0.529, 
           0.473, 0.406, 0.324, 0.265, 0.217, 0.174, 0.135, 0.098, 
           0.063, 0.032, 0.016, 0.602, 0.564, 0.521, 0.505, 0.451, 
           0.387, 0.307, 0.25, 0.204, 0.163, 0.126, 0.092, 0.059, 
           0.03, 0.015, 0.58, 0.542, 0.501, 0.485, 0.432, 0.369, 
           0.292, 0.237, 0.193, 0.153, 0.118, 0.086, 0.055, 0.028, 
           0.014, 0.56, 0.523, 0.482, 0.467, 0.416, 0.354, 0.28, 
           0.226, 0.184, 0.146, 0.112, 0.082, 0.053, 0.026, 0.013, 
           0.544, 0.508, 0.467, 0.452, 0.401, 0.341, 0.269, 0.217, 
           0.177, 0.139, 0.107, 0.078, 0.05, 0.025, 0.013, 0.529, 
           0.493, 0.453, 0.438, 0.388, 0.33, 0.259, 0.209, 0.17, 
           0.134, 0.103, 0.075, 0.048, 0.024, 0.012, 0.516, 0.48, 
           0.44, 0.426, 0.377, 0.32, 0.251, 0.202, 0.163, 0.129, 
           0.099, 0.072, 0.047, 0.023, 0.012, 0.504, 0.469, 0.429, 
           0.415, 0.367, 0.311, 0.243, 0.196, 0.157, 0.125, 0.096, 
           0.069, 0.045, 0.022, 0.011, 0.493, 0.458, 0.419, 0.405, 
           0.358, 0.303, 0.237, 0.191, 0.153, 0.121, 0.093, 0.067, 
           0.044, 0.022, 0.011, 0.483, 0.449, 0.41, 0.396, 0.349, 
           0.296, 0.231, 0.186, 0.148, 0.118, 0.09, 0.065, 0.042, 
           0.021, 0.01, 0.474, 0.44, 0.402, 0.388, 0.342, 0.29, 
           0.225, 0.181, 0.145, 0.114, 0.088, 0.063, 0.041, 0.02, 
           0.01, 0.465, 0.432, 0.394, 0.381, 0.336, 0.284, 0.22, 
           0.176, 0.141, 0.112, 0.086, 0.062, 0.04, 0.02, 0.01, 
           0.457, 0.423, 0.387, 0.374, 0.33, 0.278, 0.216, 0.173, 
           0.138, 0.109, 0.084, 0.06, 0.039, 0.019, 0.01, 0.45, 
           0.417, 0.381, 0.368, 0.324, 0.273, 0.212, 0.169, 0.135, 
           0.107, 0.082, 0.059, 0.038, 0.019, 0.009, 0.443, 0.411, 
           0.375, 0.362, 0.319, 0.268, 0.208, 0.166, 0.132, 0.105, 
           0.08, 0.058, 0.037, 0.019, 0.009, 0.437, 0.405, 0.37, 
           0.357, 0.314, 0.263, 0.204, 0.163, 0.13, 0.103, 0.079, 
           0.057, 0.037, 0.018, 0.009, 0.431, 0.399, 0.365, 0.352, 
           0.309, 0.259, 0.201, 0.16, 0.128, 0.101, 0.077, 0.056, 
           0.036, 0.018, 0.009, 0.426, 0.394, 0.36, 0.347, 0.305, 
           0.255, 0.197, 0.157, 0.126, 0.009, 0.076, 0.055, 0.035, 
           0.017, 0.009, 0.42, 0.389, 0.355, 0.343, 0.301, 0.251, 
           0.194, 0.154, 0.124, 0.098, 0.075, 0.054, 0.035, 0.017, 
           0.009)
  
  q20 <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, 0.996, 0.992, 0.987, 0.983, 0.967, 
           0.935, 0.871, 0.807, 0.743, 0.676, 0.606, 0.529, 0.44, 
           0.321, 0.235, 0.95, 0.929, 0.901, 0.89, 0.845, 0.782, 
           0.694, 0.623, 0.56, 0.5, 0.44, 0.377, 0.306, 0.218, 0.155, 
           0.865, 0.836, 0.8, 0.786, 0.736, 0.67, 0.585, 0.52, 0.463, 
           0.411, 0.358, 0.305, 0.245, 0.172, 0.126, 0.814, 0.778, 
           0.732, 0.716, 0.661, 0.596, 0.516, 0.454, 0.402, 0.355, 
           0.306, 0.261, 0.208, 0.144, 0.099, 0.746, 0.71, 0.67, 
           0.657, 0.607, 0.545, 0.468, 0.41, 0.361, 0.317, 0.274, 
           0.23, 0.184, 0.125, 0.085, 0.7, 0.667, 0.627, 0.614, 
           0.565, 0.505, 0.432, 0.378, 0.331, 0.288, 0.25, 0.208, 
           0.166, 0.114, 0.077, 0.664, 0.632, 0.592, 0.579, 0.531, 
           0.474, 0.404, 0.354, 0.307, 0.268, 0.231, 0.192, 0.153, 
           0.104, 0.07, 0.627, 0.603, 0.564, 0.551, 0.504, 0.449, 
           0.381, 0.334, 0.29, 0.253, 0.217, 0.181, 0.143, 0.097, 
           0.065, 0.612, 0.579, 0.54, 0.527, 0.481, 0.429, 0.362, 
           0.216, 0.274, 0.239, 0.205, 0.172, 0.136, 0.091, 0.06, 
           0.59, 0.557, 0.52, 0.506, 0.461, 0.411, 0.345, 0.301, 
           0.261, 0.227, 0.195, 0.164, 0.129, 0.086, 0.057, 0.571, 
           0.538, 0.502, 0.489, 0.445, 0.395, 0.332, 0.288, 0.25, 
           0.217, 0.187, 0.157, 0.123, 0.082, 0.054, 0.554, 0.522, 
           0.486, 0.473, 0.43, 0.382, 0.32, 0.277, 0.241, 0.209, 
           0.179, 0.15, 0.118, 0.079, 0.052, 0.539, 0.508, 0.472, 
           0.46, 0.418, 0.37, 0.31, 0.268, 0.233, 0.202, 0.173, 
           0.144, 0.113, 0.076, 0.05, 0.526, 0.495, 0.46, 0.447, 
           0.406, 0.359, 0.301, 0.26, 0.226, 0.195, 0.167, 0.139, 
           0.109, 0.074, 0.049, 0.514, 0.484, 0.449, 0.437, 0.397, 
           0.35, 0.293, 0.252, 0.219, 0.189, 0.162, 0.134, 0.105, 
           0.071, 0.048, 0.503, 0.473, 0.439, 0.427, 0.387, 0.341, 
           0.286, 0.246, 0.213, 0.184, 0.157, 0.13, 0.101, 0.069, 
           0.047, 0.494, 0.464, 0.43, 0.418, 0.378, 0.333, 0.279, 
           0.24, 0.208, 0.179, 0.152, 0.126, 0.098, 0.067, 0.046, 
           0.485, 0.455, 0.422, 0.41, 0.371, 0.326, 0.273, 0.235, 
           0.203, 0.175, 0.148, 0.123, 0.096, 0.065, 0.045, 0.477, 
           0.447, 0.414, 0.402, 0.364, 0.32, 0.267, 0.23, 0.199, 
           0.171, 0.145, 0.12, 0.094, 0.064, 0.044, 0.469, 0.44, 
           0.407, 0.395, 0.358, 0.314, 0.262, 0.225, 0.195, 0.167, 
           0.142, 0.117, 0.092, 0.062, 0.043, 0.462, 0.434, 0.401, 
           0.39, 0.352, 0.309, 0.258, 0.221, 0.192, 0.164, 0.139, 
           0.114, 0.09, 0.061, 0.042, 0.456, 0.428, 0.395, 0.383, 
           0.346, 0.304, 0.254, 0.217, 0.189, 0.161, 0.136, 0.112, 
           0.089, 0.06, 0.041, 0.45, 0.422, 0.39, 0.379, 0.342, 
           0.3, 0.25, 0.214, 0.186, 0.158, 0.134, 0.11, 0.087, 0.059, 
           0.041, 0.444, 0.417, 0.385, 0.374, 0.338, 0.296, 0.246, 
           0.211, 0.183, 0.156, 0.132, 0.109, 0.086, 0.058, 0.04, 
           0.439, 0.412, 0.381, 0.37, 0.333, 0.292, 0.243, 0.208, 
           0.18, 0.154, 0.13, 0.107, 0.085, 0.058, 0.04, 0.434, 
           0.407, 0.376, 0.365, 0.329, 0.288, 0.239, 0.205, 0.177, 
           0.151, 0.128, 0.106, 0.083, 0.057, 0.039, 0.428, 0.402, 
           0.372, 0.361, 0.326, 0.285, 0.236, 0.202, 0.175, 0.149, 
           0.126, 0.104, 0.082, 0.056, 0.039)
  
  q21 <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, 0.998, 0.995, 0.99, 0.987, 0.976, 
           0.952, 0.902, 0.82, 0.795, 0.735, 0.669, 0.594, 0.504, 
           0.374, 0.273, 0.97, 0.951, 0.924, 0.913, 0.872, 0.821, 
           0.745, 0.68, 0.621, 0.563, 0.504, 0.439, 0.364, 0.268, 
           0.195, 0.919, 0.885, 0.842, 0.828, 0.78, 0.725, 0.637, 
           0.575, 0.517, 0.462, 0.408, 350, 0.285, 0.198, 0.138, 
           0.868, 0.829, 0.78, 0.763, 0.71, 0.65, 0.57, 0.509, 0.454, 
           0.402, 0.352, 0.298, 0.24, 0.166, 0.117, 0.816, 0.776, 
           0.725, 0.71, 0.657, 0.594, 0.516, 0.458, 0.407, 0.36, 
           0.313, 0.265, 0.212, 0.146, 0.103, 0.76, 0.726, 0.678, 
           0.664, 0.612, 0.551, 0.474, 0.42, 0.374, 0.329, 0.286, 
           0.24, 0.189, 0.13, 0.089, 0.713, 0.679, 0.638, 0.625, 
           0.576, 0.517, 0.442, 0.391, 0.348, 0.305, 0.265, 0.221, 
           0.173, 0.118, 0.08, 0.675, 0.642, 0.605, 0.592, 0.546, 
           0.49, 0.419, 0.37, 0.326, 0.285, 0.247, 0.206, 0.161, 
           0.11, 0.074, 0.649, 0.615, 0.578, 0.565, 0.521, 0.467, 
           0.399, 0.351, 0.308, 0.269, 0.232, 0.194, 0.152, 0.104, 
           0.07, 0.627, 0.593, 0.556, 0.544, 0.501, 0.448, 0.381, 
           0.334, 0.293, 0.256, 0.219, 0.184, 0.144, 0.099, 0.066, 
           0.607, 0.574, 0.537, 0.525, 0.483, 0.431, 0.366, 0.319, 
           0.28, 0.245, 0.208, 0.175, 0.138, 0.094, 0.062, 0.58, 
           0.557, 0.521, 0.509, 0.467, 0.416, 0.353, 0.307, 0.269, 
           0.235, 0.199, 0.167, 0.132, 0.09, 0.059, 0.573, 0.542, 
           0.507, 0.495, 0.453, 0.403, 0.341, 0.296, 0.259, 0.225, 
           0.192, 0.161, 0.127, 0.086, 0.057, 0.559, 0.529, 0.494, 
           0.482, 0.44, 0.391, 0.331, 0.287, 0.25, 0.218, 0.186, 
           0.155, 0.122, 0.082, 0.054, 0.547, 0.517, 0.482, 0.469, 
           0.428, 0.38, 0.322, 0.279, 0.243, 0.211, 0.18, 0.15, 
           0.117, 0.078, 0.052, 0.536, 0.506, 0.472, 0.46, 0.419, 
           0.371, 0.314, 0.271, 0.236, 0.205, 0.174, 0.145, 0.113, 
           0.075, 0.05, 0.526, 0.496, 0.462, 0.45, 0.41, 0.363, 
           0.306, 0.264, 0.229, 0.199, 0.17, 0.141, 0.11, 0.073, 
           0.049, 0.517, 0.487, 0.453, 0.441, 0.402, 0.356, 0.299, 
           0.258, 0.223, 0.194, 0.165, 0.137, 0.107, 0.071, 0.048, 
           0.509, 0.479, 0.445, 0.434, 0.395, 0.349, 0.293, 0.252, 
           0.218, 0.189, 0.161, 0.133, 0.105, 0.069, 0.046, 0.501, 
           0.471, 0.438, 0.427, 0.388, 0.343, 0.287, 0.247, 0.214, 
           0.185, 0.158, 0.13, 0.103, 0.068, 0.045, 0.493, 0.464, 
           0.431, 0.42, 0.382, 0.337, 0.282, 0.242, 0.21, 0.181, 
           0.154, 0.127, 0.1, 0.067, 0.043, 0.486, 0.457, 0.424, 
           0.414, 0.376, 0.331, 0.277, 0.238, 0.206, 0.178, 0.151, 
           0.125, 0.098, 0.066, 0.042, 0.479, 0.45, 0.418, 0.407, 
           0.37, 0.325, 0.273, 0.234, 0.203, 0.175, 0.149, 0.123, 
           0.096, 0.064, 0.041, 0.472, 0.444, 0.412, 0.402, 0.365, 
           0.32, 0.269, 0.23, 0.2, 0.172, 0.146, 0.121, 0.094, 0.063, 
           0.041, 0.466, 0.438, 0.406, 0.396, 0.36, 0.316, 0.265, 
           0.227, 0.197, 0.17, 0.144, 0.119, 0.092, 0.062, 0.04, 
           0.46, 0.433, 0.401, 0.391, 0.355, 0.312, 0.261, 0.224, 
           0.194, 0.167, 0.142, 0.117, 0.091, 0.061, 0.04)
  
  q22 <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
           NA, NA, NA, NA, NA, NA, NA, 0.998, 0.995, 0.992, 0.99, 
           0.983, 0.965, 0.93, 0.88, 830, 0.78, 0.72, 0.64, 0.54, 
           0.41, 0.3, 0.97, 0.945, 0.919, 0.909, 0.881, 0.85, 0.78, 
           0.73, 0.67, 0.61, 0.54, 0.47, 0.39, 0.27, 0.2, 0.922, 
           0.89, 0.857, 0.846, 0.803, 0.745, 0.664, 0.602, 0.546, 
           0.49, 0.434, 0.375, 0.309, 0.218, 0.156, 0.873, 0.84, 
           0.8, 0.787, 0.737, 0.676, 0.592, 0.53, 0.478, 0.425, 
           0.373, 0.32, 0.261, 0.186, 0.128, 0.826, 0.791, 0.749, 
           0.734, 0.682, 0.62, 0.543, 0.483, 0.433, 0.384, 0.335, 
           0.285, 0.231, 0.15, 0.111, 0.781, 0.745, 0.703, 0.688, 
           0.637, 0.578, 0.503, 0.446, 0.397, 0.351, 0.305, 0.258, 
           0.208, 0.142, 0.099, 0.74, 0.704, 0.661, 0.648, 0.6, 
           0.543, 0.47, 0.416, 0.37, 0.325, 0.282, 0.238, 0.19, 
           0.13, 0.09, 0.705, 0.67, 0.628, 0.616, 0.57, 0.515, 0.443, 
           0.391, 0.347, 0.304, 0.263, 0.222, 0.177, 0.122, 0.084, 
           0.674, 0.641, 0.602, 0.59, 0.546, 0.492, 0.421, 0.37, 
           0.328, 0.287, 0.247, 0.208, 0.166, 0.115, 0.079, 0.647, 
           0.616, 0.579, 0.568, 0.525, 0.472, 0.402, 0.353, 0.312, 
           0.273, 0.234, 0.196, 0.156, 0.109, 0.075, 0.624, 0.595, 
           0.559, 0.548, 0.507, 0.454, 0.386, 0.338, 0.298, 0.261, 
           0.223, 0.186, 0.148, 0.104, 0.071, 0.605, 0.577, 0.542, 
           0.531, 0.49, 0.438, 0.373, 0.325, 0.286, 0.25, 0.214, 
           0.178, 0.142, 0.099, 0.067, 0.589, 0.561, 0.527, 0.516, 
           0.475, 0.424, 0.361, 0.314, 0.276, 0.241, 0.206, 0.171, 
           0.135, 0.094, 0.063, 0.575, 0.547, 0.514, 0.503, 0.462, 
           0.412, 0.35, 0.304, 0.268, 0.233, 0.199, 0.165, 0.103, 
           0.09, 0.06, 0.562, 0.535, 0.502, 0.491, 0.45, 0.401, 
           0.34, 0.295, 0.26, 0.226, 0.193, 0.16, 0.125, 0.086, 
           0.057, 0.551, 0.524, 0.491, 0.48, 0.44, 0.391, 0.331, 
           0.287, 0.252, 0.22, 0.187, 0.155, 0.12, 0.082, 0.054, 
           0.541, 0.514, 0.481, 0.47, 0.43, 0.382, 0.323, 0.28, 
           0.245, 0.213, 0.182, 0.15, 0.116, 0.078, 0.051, 0.532, 
           0.505, 0.472, 0.461, 0.421, 0.374, 0.316, 0.274, 0.239, 
           0.207, 0.177, 0.146, 0.113, 0.075, 0.049, 0.524, 0.497, 
           0.464, 0.452, 0.413, 0.367, 0.31, 0.268, 0.232, 0.201, 
           0.172, 0.142, 0.111, 0.074, 0.047, 0.516, 0.489, 0.457, 
           0.445, 0.406, 0.36, 0.304, 0.262, 0.227, 0.196, 0.168, 
           0.138, 0.108, 0.073, 0.045, 0.508, 0.482, 0.45, 0.438, 
           0.399, 0.354, 0.298, 0.257, 0.222, 0.192, 0.164, 0.135, 
           0.106, 0.072, 0.044, 0.501, 0.475, 0.443, 0.432, 0.393, 
           0.348, 0.292, 0.252, 0.218, 0.189, 0.161, 0.132, 0.104, 
           0.071, 0.043, 0.495, 0.469, 0.437, 0.426, 0.387, 0.342, 
           0.287, 0.247, 0.215, 0.186, 0.158, 0.13, 0.102, 0.069, 
           0.042, 0.489, 0.463, 0.431, 0.419, 0.381, 0.337, 0.282, 
           0.243, 0.211, 0.183, 0.155, 0.128, 0.1, 0.068, 0.041, 
           0.483, 0.457, 0.425, 0.414, 0.376, 0.332, 0.278, 0.239, 
           0.208, 0.18, 0.153, 0.126, 0.098, 0.067, 0.041)
  
  dim(q10) <- c(15, 30)
  dim(q11) <- c(15, 30)
  dim(q12) <- c(15, 30)
  dim(q20) <- c(15, 30)
  dim(q21) <- c(15, 30)
  dim(q22) <- c(15, 30)
  
  if (type == 10) 
    q0 <- q10[, n]
  else if (type == 11) 
    q0 <- q11[, n]
  else if (type == 12) 
    q0 <- q12[, n]
  else if (type == 20) 
    q0 <- q20[, n]
  else if (type == 21) 
    q0 <- q21[, n]
  else 
    q0 <- q22[, n]
  
  if (rev) {
    res <- q_table(p, q0, pp)
  }
  else {
    res <- q_table(p, pp, q0)
  }
  
  res[res < 0] <- 0
  res[res > 1] <- 1
  
  invisible(res)
}


#' Outlier removals with Dixon's method
#' 
#' @param q Vector of quantiles. 
#' @inheritParams q_dixon
p_dixon <- function (q, n, type = 10) 
{
  q_dixon(q, n, type, rev = TRUE)
}


#' Distribution table
#' 
#' @param probs Vector of given probabilities.
#' @param quants Vector of given corresponding quantiles.
#' @inheritParams q_dixon
q_table <- function (p, probs, quants) 
{
  quants <- quants[order(probs)]
  probs <- sort(probs)
  res <- vector()
  
  for (n in 1:length(p)) {
    pp <- p[n]
    if (pp <= probs[1]) {
      q0 <- quants[c(1, 2)]
      p0 <- probs[c(1, 2)]
      fit <- lm(q0 ~ p0)
    }
    else if (pp >= probs[length(probs)]) {
      q0 <- quants[c(length(quants) - 1, length(quants))]
      p0 <- probs[c(length(probs) - 1, length(probs))]
      fit <- lm(q0 ~ p0)
    }
    else {
      x0 <- which(abs(pp - probs) == min(abs(pp - probs)))
      x1 <- which(abs(pp - probs) == sort(abs(pp - probs))[2])
      x <- min(c(x0, x1))
      if (x == 1) 
        x <- 2
      if (x > length(probs) - 2) 
        x <- length(probs) - 2
      i <- c(x - 1, x, x + 1, x + 2)
      q0 <- quants[i]
      p0 <- probs[i]
      fit <- lm(q0 ~ poly(p0, 3))
    }
    
    res <- c(res, predict(fit, newdata = list(p0 = pp)))
  }
  
  invisible(res)
}


#' Outlier removals with Dixon's method
#' 
#' @param x A numeric vector.
Dixon_outliers <- function(x) 
{
  # x = c(0.0000000, 0.0000000, 1.0271542, 0.0000000, 0.2080097)
  # x = c(0.0000000, 0.0000000, NA, 0.0000000, 0.2080097)
  # x = c(0.0000000, 0.0000000, 0.0000000, 0.2080097)
  # x = c(NA, NA, NA, 0.2080097)
  
  x2 <- x[!is.na(x)]
  
  if (length(x2) > 2L && length(unique(x2)) > 1L) {
    out <- dixon_test(as.numeric(x), type = 0)
    
    while(out$p.value < 0.05) {
      if (out$alternative == "high") {
        x[which.max(x)] <- NA
      } else {
        x[which.min(x)] <- NA
      }
      
      x2 <- x[!is.na(x)]
      
      if (length(x2) > 2 && length(unique(x2)) > 1) {
        out <- dixon_test(as.numeric(x), type = 0)
      } else {
        out$p.value <- 1
      }
    }
  }
  
  invisible(x)
}


#' Outlier removals with Grubbs's method
#' 
#' @param x A data frame.
#' @param type Type for grubbs.test.
Grubbs_outliers <- function(x, type = 10) 
{
  x2 <- x[!is.na(x)]
  
  if (length(x2) > 2 && length(unique(x2)) > 1) {
    out <- grubbs.test(as.numeric(x, type))
    
    while(out$p.value < 0.05) {
      if (grepl("^highest", out$alternative)) {
        x[which.max(x)] <- NA
      } 
      else {
        x[which.min(x)] <- NA
      }
      
      x2 <- x[!is.na(x)]
      
      if (length(x2) > 2 && length(unique(x2)) > 1) {
        out <- grubbs.test(as.numeric(x), type = type)
      } 
      else {
        out$p.value <- 1
      }
    }
  }
  
  invisible(x)
}


#' Outlier removals with Grubbs' method
#' 
#' See also outliers::grubbs.test.
#' 
#' @inheritParams dixon_test
grubbs_test <- function (x, type = 10, opposite = FALSE, two.sided = FALSE) 
{
  if (sum(c(10, 11, 20) == type) == 0) {
    stop("Incorrect type", call. = FALSE)
  }
  
  DNAME <- deparse(substitute(x))
  x <- sort(x[complete.cases(x)])
  n <- length(x)
  
  if (type == 11) {
    g <- (x[n] - x[1])/sd(x)
    u <- var(x[2:(n - 1)])/var(x) * (n - 3)/(n - 1)
    pval = 1 - p_grubbs(g, n, type = 11)
    method <- "Grubbs test for two opposite outliers"
    alt = paste(x[1], "and", x[n], "are outliers")
  } 
  else if (type == 10) {
    if (xor(((x[n] - mean(x)) < (mean(x) - x[1])), opposite)) {
      alt = paste("lowest value", x[1], "is an outlier")
      o <- x[1]
      d <- x[2:n]
    } 
    else {
      alt = paste("highest value", x[n], "is an outlier")
      o <- x[n]
      d <- x[1:(n - 1)]
    }
    
    g <- abs(o - mean(x))/sd(x)
    u <- var(d)/var(x) * (n - 2)/(n - 1)
    pval <- 1 - p_grubbs(g, n, type = 10)
    method <- "Grubbs test for one outlier"
  } 
  else {
    if (xor(((x[n] - mean(x)) < (mean(x) - x[1])), opposite)) {
      alt = paste("lowest values", x[1], ",", 
                  x[2], "are outliers")
      u <- var(x[3:n])/var(x) * (n - 3)/(n - 1)
    } 
    else {
      alt = paste("highest values", x[n - 1], ",", 
                  x[n], "are outliers")
      u <- var(x[1:(n - 2)])/var(x) * (n - 3)/(n - 1)
    }
    
    g <- NULL
    pval <- p_grubbs(u, n, type = 20)
    method <- "Grubbs test for two outliers"
  }
  
  if (two.sided) {
    pval <- 2 * pval
    
    if (pval > 1) 
      pval <- 2 - pval
  }
  
  RVAL <- list(statistic = c(G = g, U = u), alternative = alt, 
               p.value = pval, method = method, data.name = DNAME)
  class(RVAL) <- "htest"
  
  invisible(RVAL)
}


#' Distribution function
#' 
#' @param p Vector of probabilities. See also outliers::dixon.test.
#' @param n Length of sample Length of sample. 
#' @param rev Logical; if TRUE, acts as p_dixon.
#' @inheritParams dixon_test
q_grubbs <- function (p, n, type = 10, rev = FALSE) 
{
  if (type == 10) {
    if (!rev) {
      return(((n - 1)/sqrt(n)) * 
               sqrt(qt((1 - p)/n, n - 2)^2/(n - 2 + qt((1 - p)/n, n - 2)^2)))
    }
    else {
      s <- (p^2 * n * (2 - n))/(p^2 * n - (n - 1)^2)
      t <- sqrt(s)
      
      if (is.nan(t)) {
        res <- 0
      }
      else {
        res <- n * (1 - pt(t, n - 2))
        res[res > 1] <- 1
      }
      
      return(1 - res)
    }
  }
  else if (type == 11) {
    if (!rev) {
      return(sqrt((2 * (n - 1) * qt((1 - p)/(n * (n - 1)), 
                                    n - 2)^2)/(n - 2 + qt((1 - p)/(n * (n - 1)), 
                                                          n - 2)^2)))
    }
    else {
      q <- p
      p <- vector()
      for (i in 1:length(q)) {
        if (q[i] > qgrubbs(0.9999, n, type = 11)) {
          pp <- 1
        }
        else if (q[i] < qgrubbs(2e-16, n, type = 11)) {
          pp <- 0
        }
        else {
          f <- function(x, q, n) {
            qgrubbs(x, n, type = 11) - q
          }
          pp <- uniroot(f, c(0.001, 0.9999), q = q[i], 
                        n = n)$root
        }
        p <- c(p, pp)
      }
      
      return(p)
    }
  }
  else {
    if (n > 30) 
      stop("n must be in range 3-30")
    
    pp <- c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.4, 0.6, 
            0.8, 0.9, 0.95, 0.975, 0.99)
    
    gtwo <- c(NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
              NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
              NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 
              NA, NA, 1e-05, 2e-04, 8e-04, 0.0031, 0.007, 0.013, 
              0.055, 0.138, 0.283, 0.399, 0.482, 0.54, 0.589, 0.0035, 
              0.009, 0.0183, 0.0376, 0.058, 0.078, 0.169, 0.276, 
              0.41, 0.502, 0.571, 0.63, 0.689, 0.0186, 0.0349, 
              0.0565, 0.0921, 0.124, 0.153, 0.257, 0.361, 0.478, 
              0.562, 0.626, 0.674, 0.724, 0.044, 0.0708, 0.102, 
              0.1479, 0.186, 0.217, 0.325, 0.423, 0.53, 0.605, 
              0.659, 0.701, 0.743, 0.075, 0.1101, 0.1478, 0.1994, 
              0.238, 0.271, 0.376, 0.468, 0.568, 0.635, 0.684, 
              0.722, 0.763, 0.1082, 0.1492, 0.1909, 0.2454, 0.285, 
              0.319, 0.42, 0.507, 0.598, 0.658, 0.703, 0.738, 0.776, 
              0.1415, 0.1865, 0.2305, 0.2863, 0.326, 0.358, 0.455, 
              0.537, 0.622, 0.678, 0.721, 0.753, 0.787, 0.1736, 
              0.2212, 0.2666, 0.3226, 0.363, 0.394, 0.487, 0.564, 
              0.624, 0.695, 0.734, 0.765, 0.797, 0.2044, 0.2536, 
              0.2996, 0.3552, 0.393, 0.424, 0.514, 0.585, 0.66, 
              0.709, 0.745, 0.773, 0.802, 0.2333, 0.2836, 0.3295, 
              0.3843, 0.421, 0.451, 0.537, 0.605, 0.676, 0.721, 
              0.755, 0.782, 0.809, 0.2605, 0.3112, 0.3568, 0.4106, 
              0.447, 0.477, 0.558, 0.622, 0.689, 0.733, 0.765, 
              0.789, 0.817, 0.2859, 0.3367, 0.3818, 0.4345, 0.469, 
              0.497, 0.576, 0.639, 0.701, 0.742, 0.773, 0.797, 
              0.822, 0.3098, 0.3603, 0.4048, 0.4562, 0.491, 0.518, 
              0.593, 0.653, 0.713, 0.751, 0.78, 0.803, 0.826, 0.3321, 
              0.3822, 0.4259, 0.4761, 0.511, 0.536, 0.609, 0.666, 
              0.723, 0.76, 0.787, 0.808, 0.831, 0.353, 0.4025, 
              0.4455, 0.4944, 0.526, 0.552, 0.622, 0.676, 0.732, 
              0.767, 0.793, 0.814, 0.835, 0.3725, 0.4214, 0.4636, 
              0.5113, 0.543, 0.567, 0.635, 0.688, 0.74, 0.774, 
              0.799, 0.818, 0.838, 0.3909, 0.4391, 0.4804, 0.5269, 
              0.559, 0.582, 0.647, 0.697, 0.748, 0.781, 0.805, 
              0.823, 0.843, 0.408, 0.457, 0.496, 0.542, 0.571, 
              0.594, 0.657, 0.706, 0.755, 0.786, 0.81, 0.828, 0.847, 
              0.425, 0.474, 0.512, 0.556, 0.584, 0.606, 0.668, 
              0.715, 0.762, 0.792, 0.815, 0.834, 0.85, 0.442, 0.486, 
              0.524, 0.568, 0.596, 0.618, 0.677, 0.723, 0.769, 
              0.797, 0.819, 0.836, 0.853, 0.453, 0.5, 0.538, 0.581, 
              0.608, 0.628, 0.686, 0.73, 0.774, 0.802, 0.823, 0.84, 
              0.857, 0.466, 0.511, 0.547, 0.589, 0.616, 0.637, 
              0.693, 0.736, 0.779, 0.807, 0.827, 0.843, 0.86, 0.482, 
              0.525, 0.561, 0.601, 0.627, 0.647, 0.701, 0.743, 
              0.784, 0.811, 0.83, 0.845, 0.861, 0.492, 0.536, 0.572, 
              0.611, 0.636, 0.655, 0.709, 0.749, 0.789, 0.815, 
              0.834, 0.849, 0.864, 0.505, 0.548, 0.583, 0.621, 
              0.646, 0.664, 0.716, 0.755, 0.794, 0.819, 0.837, 
              0.851, 0.866, 0.516, 0.558, 0.592, 0.629, 0.654, 
              0.672, 0.722, 0.76, 0.798, 0.822, 0.84, 0.854, 0.869, 
              0.528, 0.568, 0.602, 0.638, 0.661, 0.679, 0.728, 
              0.765, 0.802, 0.826, 0.842, 0.856, 0.87)
    
    dim(gtwo) <- c(13, 30)
    
    if (!rev) 
      res <- qtable(p, pp, gtwo[, n])
    else 
      res <- qtable(p, gtwo[, n], pp)
    
    res[res < 0] <- 0
    res[res > 1] <- 1
    
    invisible(res)
  }
}


#' Outlier removals with Grubbs' method
#' 
#' @param q Vector of quantiles. 
#' @inheritParams q_dixon
p_grubbs <- function (q, n, type = 10) 
{
  q_grubbs(q, n, type, rev = TRUE)
}


#' Outlier removals with Rosner's method
#' 
#' @param x A matrix or data.frame.
Rosner_outliers <- function(x) 
{
  if (length(unique(x)) < 5) 
    return(x)
  
  # up to 9-number outliers; may get warnings with NA being an outlier
  suppressWarnings(gofOutlier_obj <- EnvStats::rosnerTest(as.numeric(x), 9))
  
  if (gofOutlier_obj$n.outliers > 0) {
    Index <- with(gofOutlier_obj$all.stat, Obs.Num[Outlier == TRUE])
    x[Index] <- NA
  }
  
  invisible(x)
}
qzhang503/proteoQ documentation built on March 16, 2024, 5:27 a.m.