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