矩阵中对列的条件分布矢量化

时间:2017-05-02 16:51:46

标签: r vectorization

给出两个整数向量:

X <- c(0, 201, 0, 0, 160, 0, 0, 0, 15, 80)
Y <- c(0, 0, 0, 0, 1, 4, 42, 10, 19, 0)

我想计算概率p1 = P(X10> X11),其中X10是条件分布为X的变量,给定Y = 0,而X11是条件分布为X的变量,给定Y &GT; (这个问题的动机是希望实现RS Pimentel等人2015年的方程式8,Stat Prob Lett 96:61-67。)

对于两对向量,我可以简单地计算:

N <- length(X)
X10 <- X
X10[Y > 0] <- 0
X11 <- X
X11[Y == 0] <- 0
p1 <- sum(X10 > X11) / N

但是,我现在想要计算整数矩阵中所有列对的p1:

Z <- c(0, 0, 0, 0, 0, 1, 0, 1, 8, 0)
matrix(c(X, Y, Z), ncol = 3)

我对对角线不感兴趣。

因此,所需的输出是:

      [,1] [,2]  [,3] 
[1,]       0.2   0.3
[2,]             0.2
[3,]               

如何编写一个函数来计算矩阵中所有列对的p1?

1 个答案:

答案 0 :(得分:2)

您可以创建自定义函数来计算概率,然后将其应用于每个列组合:

p1 <- function(x, y) {
  x10 <- x
  x10[y > 0] <- 0
  x11 <- x
  x11[y == 0] <- 0
  mean(x10 > x11)
}

combinations <- t(combn(ncol(M), 2))

# create a matrix of NAs, fill the appropriate values
result <- matrix(NA, nrow = ncol(M), ncol = ncol(M))

result[combinations] <- apply(combinations, 1, function(r) p1(M[, r[1]], M[, r[2]]))