Как моделировать разреженную ковариационную матрицу - PullRequest
0 голосов
/ 15 декабря 2018

Я хотел бы спросить вас, как я могу смоделировать многомерную матрицу разреженных ковариаций?

Это означает, что желаемыми характеристиками являются: 1. Положительная полуопределенность 2. Разреженность 3. В результате корреляция между -1, 1 4.симметрия 5.положительные числа по диагонали

Мое решение практически работает только для p <200, потому что это очень трудоемкое решение для более высокой размерности </p>

входы

p <- 100 </p>

разреженность <- 0,01 </p>

corr <- Матрица (0, p, p) # рабочая область создания </p>

diag (corr) <-1 #сделать диагональ </p>

l1 <- 1 # первые мин.собственное значение </p>

моделирование матрицы корреляции

для (i в 2: p) {

 c<-runif(i-1) #for testing sparsity for each previous stock

для (j в 1: (i-1)) {

     if( c[j] < sparsity)  { #testing sparsity

        stp <- 0            # starting position of stop

        while ( stp == 0 ) {

               hij <- runif(1,-1,1)  # generating correlation
               corr[i,j] <- hij      # plugging 
               corr[j,i] <- hij

               l1 <- eigs_sym(corr,1,which='SA',opts=list(retvec=FALSE))$values # min eigen value

        if(l1 > 0) {

                  stp <- 1        #checking PSD

                     }
                     } 
                     }
                     }
                     }

производная ковариационная матрица

   covariance <- Matrix(0,p,p)  # creating workspace

   hi <- abs(rnorm(p,10,2)) # generating variance

   diag(covariance) <- hi        # plugging variance to covariance matrix


   for (k in 2:p){

          for(m in 1:(k-1)){

          #deriving covariance
   covariance[k,m] <- corr[k,m]*sqrt(covariance[k,k])*sqrt(covariance[m,m])
   covariance[m,k] <- covariance[k,m]

             }


              }
...