2017-05-24 3 views
1

다음 코드를 사용하여 생성 된 지수 상관 행렬 집합이 있습니다.Cholesky R에서 무작위 지수 상관 행렬의 분해.

x=runif(n) 
R=matrix(0,n,n) 
for (j in 1:n) 
{ 
    for(k in 1:n) 
    { 
    R[j,k]=exp(-(x[j]-x[k])^2); 
    } 
} 

이제 Cholesky 분해를 원합니다. 그러나 이들 중 다수는 부정적이다. 어떻게 해결할 수 있을까요?

exp(- alpha * (x[i] - x[j])^2)) 

당신은 1. 그러한 인자를 고정했지만, 실제로, 이러한 요소가 추정된다

+1

에 오신 것을 환영합니다 SO에 건설을! 복제 가능한 예제는'set.seed (..)'를 사용하십시오. 'crossprod (R)'에 의해 양의 semidefinite 행렬을 생성 할 수 있습니다. det (R)> 0이면 짝수 개의 음의 고유치가 있습니다. – jogo

답변

0

공간 또는 시간 모델링에 사용 지수 상관 행렬은, 붕괴의 속도를 제어하는 ​​인자 alpha을 갖는다 데이터.

숫자 긍정적 인 한정을 보장하려면 alpha이 필요합니다. 이 행렬은 원칙적으로 양의 값을 가지지 만, alpha이 빠른 감쇠를 위해 충분히 크지 않은 경우 숫자가 아닙니다.

이 주어진 경우, x[i]x[j] 사이의 거리는 짧은 범위 [0, 1]에 집중됩니다. 상관 관계가 감소하는 큰 범위는 아니며 alpha = 10000을 사용해 보려고합니다.

alpha = 1으로 머무르려면 거리를 넓혀야합니다. 시도해보십시오 x <- runif(n, 0, 100). 감쇠는 매우 빠릅니다. alpha = 1도 마찬가지입니다.

그래서 우리는 거리와 alpha 사이의 이중성을 봅니다. 이러한 상관 행렬이 통계 모델링에서 안정적으로 사용될 수있는 이유이기도합니다. alpha이 추정 될 때, 거리에 적응할 수 있으므로, 상관 행렬은 항상 양의 값을 갖습니다.


예 :

f <- function (xi, xj, alpha) exp(- alpha * (xi - xj)^2) 

n <- 100 

# large alpha, small distance 
x <- runif(n, 0, 1) 
A <- outer(x, x, f, alpha = 10000) 
R <- chol(A) 

# small alpha, large distance 
x <- runif(n, 0, 100) 
A <- outer(x, x, f, alpha = 1) 
R <- chol(A) 
0

시도의 사용이 긍정적 인 defitive 매트릭스를

A<-matrix(runif(n^2),n,n) 
dim(A) 
A<-A%*%t(A) 
chol(A) 
+0

고마워요! 왜 그리고 어떻게 긍정적 인 결정을했는지 설명해 주시겠습니까? – H3V

관련 문제