Как моделировать разреженную ковариационную матрицу
Я хотел бы спросить вас, как я мог бы симулировать многомерную матрицу разреженных ковариаций?
Это означает, что желаемыми характеристиками являются: 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]
}
}