R/gaussianDistribution.R

Defines functions gaussianDistribution

Documented in gaussianDistribution

#' Gaussian Distribution Generation
#'
#' Generate a Gaussian Distribution with specific covariance
#'
#' @param p Dimension of the covariance
#' @param n Number of samples
#' @param diag_cov Structure of the covariance matrix
#'
#' @importFrom clusterGeneration rcorrmatrix
#' @importFrom MASS mvrnorm
#'
#' @return A list contains correlation, simulated data, multivariate mean, multivariate standard deviation, covariance
#'
#' @keywords covariance, gaussian
#'
#' @examples
#' out = gaussianDistribution(100, 50, "unstructure")
#' out = gaussianDistribution(100, 50, "diagonal")
#' out = gaussianDistribution(100, 50, "toeplitz")
#'
#' @export

gaussianDistribution <- function(p, n, diag_cov = "unstructure"){
    if(diag_cov == "diagonal"){
        R = diag(p)
    }else if(diag_cov == "toeplitz"){
        R = toeplitz(0.8^(0:(p-1)))
    }else if(diag_cov == "unstructure"){
        R = rcorrmatrix(p)
    }else{
        R = rcorrmatrix(p)
    }
    mean_list = rnorm(p)
    sd_list = rgamma(n = p, shape = 2)
    X = mvrnorm(n, mu = mean_list, Sigma = diag(sd_list) %*% R %*% diag(sd_list))
    # X = t(chol(diag(sd_list) %*% R %*% diag(sd_list))) %*% matrix(rnorm(p * n), nrow = n) + mean_list
    return(list(R = R, X = X, mean_list = mean_list, sd_list = sd_list, Sigma = diag(sd_list) %*% R %*% diag(sd_list)))
}
CHuanSite/copulaKnockoff documentation built on Aug. 1, 2020, 12:50 p.m.