Сделать матрицу случайной корреляции полуопределенной положительной - PullRequest
2 голосов
/ 31 января 2020

Я пытаюсь сделать случайную матричную корреляцию по 183 переменным, чтобы вычислить разложение Холецкого и сопоставить 183 случайные нормали. Для создания матрицы корреляции я использую следующий воспроизводимый код:

Сначала я устанавливаю начальное число

set.seed(2)

Затем я генерирую случайные числа в диапазоне от 0,6 до 0,8

corr <- matrix(runif(183*183, min = 0.6, max = 0.8), 183, 183)

Следующий шаг - это превращение диагонали в единицы

for (i in 1:183) {
  for (j in 1:183) {
    if (i == j) {
    corr[i,j] <- 1
    }
  }
}

Последний шаг - симметрия c

for (i in 1:183) {
  for (j in 1:183) {
    if (i < j) {
    corr[i,j] <- corr[j,i]
    }
  }
}

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

cholesky <- chol(corr)

Я получаю следующую ошибку:

Ошибка в chol.default (corr): старший минор порядка 14 не является положительно определенным

Как сделать корреляционную матрицу полуопределенной положительной?

1 Ответ

1 голос
/ 31 января 2020

Может быть, вы можете попробовать приведенный ниже код для генерации полуопределенной положительной матрицы

set.seed(2)
v <- runif(183,0.6,0.8)
corr <- `diag<-`(tcrossprod(v),1)
...