Advertisement
Guest User

Untitled

a guest
Dec 15th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 2.99 KB | None | 0 0
  1.  
  2. BB_estimator <- function(X, sim, interval, method){
  3.   N <- nrow(X)
  4.   dirichlet_sample <- matrix(rexp(N * sim, 1) , ncol = N, byrow = TRUE)
  5.   dirichlet_sample <- dirichlet_sample / rowSums(dirichlet_sample)
  6.   off_diag <- list()
  7.   diag_l <- list()
  8.  
  9.   if(method == "ridge"){
  10.    
  11.     for( i in 1:sim) {
  12.       print(i)
  13.       center <- colSums(X * dirichlet_sample[i,])
  14.       x <- sqrt(dirichlet_sample[i,]) * sweep(X, 2, center, check.margin = FALSE)
  15.      
  16.       shrinkage.lambda <- lambda.TargetD(x = X)
  17.       OPT <-  ridge.lambda <- shrinkage.lambda / (1.0 - shrinkage.lambda)
  18.       mat_temp2 <- ridgeP(crossprod(x), lambda = OPT , type = "ArchII")
  19.      
  20.       off_diag[[i]] <- mat_temp2[upper.tri(mat_temp2)]
  21.       diag_l[[i]] <- diag(mat_temp2)
  22.      
  23.     }  
  24.   }    
  25.  
  26.   if(method == "lw"){
  27.     for(i in 1:sim){
  28.       n=nrow(X)
  29.       p = ncol(X)
  30.       print(i)
  31.       # de-mean returns
  32.       #Y = scale(Y, scale = FALSE)
  33.       center <- colSums(X * dirichlet_sample[i,])
  34.       x <- sqrt(dirichlet_sample[i,]) * sweep(X, 2, center, check.margin = FALSE)
  35.       # compute S covariance matrix
  36.       S = crossprod(X)/n
  37.       S_w <- crossprod(x)
  38.       # compute prior
  39.      
  40.       meanvar = mean(diag(S))
  41.      
  42.       prior = meanvar*diag(1,p)
  43.      
  44.      
  45.       # what we call b
  46.       T=X^2
  47.       phiMat = (crossprod(T)/n) - S^2
  48.       phi = sum(phiMat)
  49.      
  50.       # what we call c
  51.       gamma = sum(abs(S-prior)^2)
  52.      
  53.       # compute shrinkage constant
  54.       kappa = phi/gamma
  55.       shrinkage = max(0,min(1,kappa/n))
  56.       Sigma=shrinkage*prior+(1-shrinkage)*S_w
  57.       Sigma <- solve(Sigma)
  58.       off_diag[[i]] <- Sigma[upper.tri(Sigma)]
  59.       diag_l[[i]] <- diag(Sigma)
  60.     }
  61.   }  
  62. if(method == "ml"){
  63.   for(i in 1:sim){
  64.   center <- colSums(X * dirichlet_sample[i,])
  65.   x <- sqrt(dirichlet_sample[i,]) * sweep(X, 2, center, check.margin = FALSE)
  66.   # compute S covariance matrix
  67.   ml <- crossprod(x)
  68.   ml <- solve(ml)
  69.   off_diag[[i]] <- ml[upper.tri(ml)]
  70.   diag_l[[i]] <- diag(ml)
  71.   }
  72.  
  73. }
  74.   mlt_dat <- reshape2::melt(diag_l)
  75.   mlt_dat$position <- 1:ncol(X)
  76.   t <- mlt_dat  %>% group_by(position) %>% summarise(mean(value))
  77.   d <- t$`mean(value)`
  78.  
  79.   mlt <- reshape2::melt(off_diag)
  80.   mlt$position <- 1:((ncol(X) * (ncol(X) - 1)) / 2)
  81.   results  <- mlt %>%
  82.     group_by(position) %>%
  83.     summarise(mean(value),
  84.               low = quantile(value, (1 - interval) / 2)[1],
  85.               up = quantile(value, 1 -( (1 - interval) / 2))[1])
  86.  
  87.   mat_point <- matrix(0, ncol(X), ncol(X))
  88.   mat_sig <- matrix(0, ncol(X), ncol(X))
  89.   mat_point[upper.tri(mat_point)]   <-  results$`mean(value)`
  90.   mat_point <- as.matrix(Matrix::forceSymmetric(mat_point))
  91.   sig <- ifelse(results$low < 0 & results$up > 0, 0, 1)
  92.   mat_sig[upper.tri(mat_sig)]   <-  sig
  93.   mat_sig <- as.matrix(Matrix::forceSymmetric(mat_sig))
  94.   mat_point_sparse <- mat_sig * mat_point
  95.   diag(mat_point_sparse) <- d
  96.   list(mat_point = mat_point, mat_sig = mat_sig, mat_point_sparse = mat_point_sparse)
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement