给出两个整数向量:
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?
答案 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]]))