ошибка несогласованных массивов при умножении двух матриц (*% *) - PullRequest
0 голосов
/ 31 января 2020

Следующий воспроизводимый код генерирует 394 наблюдения из 183 случайных нормалей и пытается соотнести их с разложением Холецкого:

Генерировать параметры

d <- 211

l <- 183

m <- -0.006495094

vectorsd <- rep(0.29, 183)

Генерировать случайные нормали без корреляции

rnormd <- as.data.frame(rnorm(l, mean = m, sd = vectorsd))

for (i in 1:(d+l))  {
  rnormd[,i] <- rnorm(l, mean = m, sd = vectorsd)
}

Генерация случайной полуопределенной положительной матрицы корреляций

v <- runif(183,0.6,0.8)
corr <- `diag<-`(tcrossprod(v),1)

Генерация матрицы холесского

cholesky <- chol(corr)

Корреляция нормалей и транспонирование выходных данных

rnormd <- t(t(rnormd)%*%cholesky)

В этой последней инструкции я получаю ошибку

Ошибка в rnormd * cholesky: несоответствующие массивы

Сначала возникла мысль, что проблема будет решена транспонированием моего матрица cholesky, но потом я понял, что chol() функция уже транспонирует его.

Кто-нибудь может мне помочь?

1 Ответ

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

Если вы хотите умножить две матрицы, вы должны использовать %*% вместо знака *. Итак, вот часть, которую вы должны исправить.

rnormd <- t(t(rnormd)%*%cholesky)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...