2017-05-24 8 views
1

次のコードを使用して指数相関行列のセットを作成しました。コレスキーランダム指数相関行列の分解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); 
    } 
} 

そして、私はコレスキー分解をしたいです。しかし、これらの多くは否定的です。どうすればこの問題を解決できますか?

+1

正defitive行列を構築するためにこれを使用してみてくださいSOへようこそ!複製可能な例は、 'set.seed(..)'を使ってください。 'crossprod(R)'によって、正の半正定値行列を生成することができます。 det(R)> 0の場合、偶数の負の固有値が存在します。 – jogo

答えて

0

空間的、時間的なモデリングに使用される指数の相関行列は、崩壊の速度を制御する要因alphaがあります

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

あなたは1で、このような要因を固定しているが、実際には、こうした要因がから推定されますデータ。

数字の正当性を保証するには、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

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

ありがとう!なぜ、どうやってそれが正の明確さを持っているのか説明してください。 – H3V