我正在尝试编写一个函数,该函数将使用一个奇特的距离估计(dcorr
布朗距离)创建一个相关矩阵。更一般地说,我想为一个通用的“相关”矩阵编写代码,您可以在其中插入任何距离估计器。
我的数据被格式化,使得列是变量,行是观察。
我的基本代码有问题。我的算法如下:
- 使用 apply 获取变量
- 传递给将再次应用于整个矩阵的函数
- 此时你应该有两对变量
- 用于
na.omit
删除缺失的观测值(dcorr 所必需的) - 计算 dcorr
我希望这会产生相关矩阵,但我在基本变量管理方面遇到了很多问题。我很难将变量传递给应用函数。特别是,我想传递在第一个应用中拉出的列并将其传递给第二个应用(即应用于整个原始矩阵)
我的代码:
dcormatrix <- function(Matrix){
dcorhelper <- function (Col1){
as.matrix(apply(Matrix,2,function(Col2){
B <- na.omit(cbind(Col1,Col2))
dcor(B[,1],B[,2],index=1)
},Col1=Col1))
}
apply(Matrix,2,dcorhelper(),Matrix=Matrix)
}
有任何想法吗?我相信一定有一个简单的方法来做到这一点。