2014-10-14 2 views
1

Можно ли установить correlation = 1 с использованием холесковой техники разложения?Могу ли я генерировать двумерные нормальные случайные величины с корреляцией 1 с использованием факторизации Холецкого?

set.seed(88) 
mu<- 0 
sigma<-1 
x<-rnorm(10000, mu, sigma) 
y<-rnorm(10000, mu, sigma) 
MAT<-cbind(x,y) 
cor(MAT[,1],MAT[,2]) 

#this doesn't work because 1 makes it NOT positive-definite. any number 0 to .99 works 
correlationMAT<- matrix(1,nrow = 2,ncol = 2) 

U<-chol(correlationMAT) 
newMAT<- MAT %*% U 
cor(newMAT[,1], newMAT[,2]) #.....but I want to make this cor = 1 

Любые идеи?

+1

Если вы хотите создать переменные с 'cor' 1, это довольно просто ...' x <- rnorm (10000) ',' y <- constant * x' где 'constant' - это все, что вы хотите, это больше, чем 0. Но если есть шум, то корреляция будет меньше 1. – Gregor

+0

@ Грегор. Но я хочу превратиться в использование хола или чего-то подобного. – user3022875

+0

@ user3022875 Почему это имеет значение, как вы это сделали? 1 - патологический случай, но он тривиальный. –

ответ

0

Фактически вы можете, используя pivoted Cholesky факторизация.

correlationMAT<- matrix(1,nrow = 2,ncol = 2) 
U <- chol(correlationMAT, pivot = TRUE) 
#Warning message: 
#In chol.default(correlationMAT, pivot = TRUE) : 
# the matrix is either rank-deficient or indefinite 

U 
#  [,1] [,2] 
#[1,] 1 1 
#[2,] 0 0 
#attr(,"pivot") 
#[1] 1 2 
#attr(,"rank") 
#[1] 1 

Примечание: U имеет одинаковые столбцы. Если мы сделаем MAT %*% U, мы дважды повторяем MAT[, 1], что означает, что вторая случайная величина будет идентична первой.

newMAT<- MAT %*% U 

cor(newMAT) 
#  [,1] [,2] 
#[1,] 1 1 
#[2,] 1 1 

Вам не нужно беспокоиться о том, что две случайные величины идентичны. Помните, что это означает, что они идентичны после стандартизации (до N(0, 1)). Вы можете перемасштабировать их по разным стандартным отклонениям, а затем сдвинуть их на разное среднее, чтобы сделать их разными.


Скользящая факторизация Cholesky очень полезна. Мой ответ на этот пост: Generate multivariate normal r.v.'s with rank-deficient covariance via Pivoted Cholesky Factorization дает более полную картину.

Смежные вопросы