Как моделировать разреженную ковариационную матрицу

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

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

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

входные

р <- 100

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

corr <- Matrix (0, p, p) # создает рабочее пространство

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

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

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

для (я в 2: р){

 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]

             }


              }

0 ответов

Другие вопросы по тегам