R:填充具有协方差函数的矩阵

时间:2012-06-20 21:40:47

标签: arrays r covariance

我正在尝试使用光谱模拟来生成空间变量的无条件高斯实现。该变量具有协方差函数c(h)= exp(-h / a),其中a是协方差函数的范围,h是距离。在第一步中,我需要将协方差函数离散化为数组/矩阵。矩阵中的条目对应于空间中的物理位置(即,矩阵索引对应于x和y坐标):

cov(i,j) = exp(-sqrt((i-64)^2 + (j-64)^2) / 20) for i,j = 1 to 128

我希望在R中生成一个矩阵,并用与数组索引相关的协方差函数填充它。作为R的初学者,我有点失落。

2 个答案:

答案 0 :(得分:2)

将表达式填充到函数中:

myfun <- function(i, j) {
  exp(-sqrt((i-64)^2 + (j-64)^2) / 20)
}

然后制作可能i, j组合的“矩阵”:

n <- 128
combos <- expand.grid(i=1:n, j=1:n)

然后用这两个向量调用你的函数:

matrix(myfun(combos$i, combos$j), nrow=n)

使用较小的数字:

> n <- 5
> combos <- expand.grid(i=1:n, j=1:n)
> matrix(myfun(combos$i, combos$j), nrow=n)
           [,1]       [,2]       [,3]       [,4]       [,5]
[1,] 0.01162296 0.01203954 0.01246747 0.01290681 0.01335761
[2,] 0.01203954 0.01247458 0.01292166 0.01338085 0.01385221
[3,] 0.01246747 0.01292166 0.01338860 0.01386840 0.01436113
[4,] 0.01290681 0.01338085 0.01386840 0.01436960 0.01488451
[5,] 0.01335761 0.01385221 0.01436113 0.01488451 0.01542247
> 

答案 1 :(得分:1)

您也可以使用outer

f <- function(i, j) {
  exp(-sqrt((i-64)^2 + (j-64)^2) / 20)
}
n <- 5

outer(1:n, 1:n, f)