我有一组使用以下代码创建的指数相关矩阵。
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分解。但其中许多都是否定的。我怎么能解决这个问题?
答案 0 :(得分:1)
尝试使用它来构建正确的矩阵
A<-matrix(runif(n^2),n,n)
dim(A)
A<-A%*%t(A)
chol(A)
答案 1 :(得分:0)
空间或时间建模中使用的指数相关矩阵具有控制衰减速度的因子alpha
:
exp(- alpha * (x[i] - x[j]) ^ 2))
您已将此因素修正为1.但在实践中,此类因素是根据数据估算的。
请注意,alpha
是确保数字正定性所必需的。该矩阵原则上是正定的,但在数值上不是alpha
不足以快速衰减。
鉴于x <- runif(n, 0, 1)
,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)