计算矩阵列表 R 的逐元素分位数
Compute element-wise quantiles for a list of matrices R
我有一个矩阵列表,如下所示:
matrix.list <- list()
for(i in 1:1000){
matrix.list[[i]] <- matrix(rnorm(9), ncol=3, nrow=3)
}
我可以按照 this Whosebug question:
直接计算元素均值和标准差
matrix.mean <- apply(simplify2array(matrix.list), 1:2, mean)
matrix.sd <- apply(simplify2array(matrix.list), 1:2, sd )
但是,我想计算 0.025 和 0.975 分位数。我会在这样的向量上执行此操作:
my.vec <- rnorm(1000)
q.0.025 <- quantile(my.vec, probs = 0.025)
q.0.975 <- quantile(my.vec, probs = 0.975)
但是我如何计算我的矩阵列表中的这些逐元素分位数,类似于我可以为 mean 和 sd 做的?一旦我将参数传递给函数 apply
,它就会失败。
Q <- apply(simplify2array(matrix.list), 1:2, quantile, prob = c(0.025, 0.975))
apply
会将结果简化为数组,并且由于函数 quantile
returns 有多个值,因此您有一个 3D 数组。但是提取很简单:
Q[1, , ] ## 0.025 quantile
# [,1] [,2] [,3]
#[1,] -2.046691 -1.925256 -2.075718
#[2,] -1.981182 -1.999648 -1.887588
#[3,] -1.931738 -1.743275 -1.854083
Q[2, , ] ## 0.975 quantile
# [,1] [,2] [,3]
#[1,] 1.953820 2.042508 1.836591
#[2,] 2.065854 2.006068 1.899495
#[3,] 1.885080 2.021729 1.943645
我有一个矩阵列表,如下所示:
matrix.list <- list()
for(i in 1:1000){
matrix.list[[i]] <- matrix(rnorm(9), ncol=3, nrow=3)
}
我可以按照 this Whosebug question:
直接计算元素均值和标准差matrix.mean <- apply(simplify2array(matrix.list), 1:2, mean)
matrix.sd <- apply(simplify2array(matrix.list), 1:2, sd )
但是,我想计算 0.025 和 0.975 分位数。我会在这样的向量上执行此操作:
my.vec <- rnorm(1000)
q.0.025 <- quantile(my.vec, probs = 0.025)
q.0.975 <- quantile(my.vec, probs = 0.975)
但是我如何计算我的矩阵列表中的这些逐元素分位数,类似于我可以为 mean 和 sd 做的?一旦我将参数传递给函数 apply
,它就会失败。
Q <- apply(simplify2array(matrix.list), 1:2, quantile, prob = c(0.025, 0.975))
apply
会将结果简化为数组,并且由于函数 quantile
returns 有多个值,因此您有一个 3D 数组。但是提取很简单:
Q[1, , ] ## 0.025 quantile
# [,1] [,2] [,3]
#[1,] -2.046691 -1.925256 -2.075718
#[2,] -1.981182 -1.999648 -1.887588
#[3,] -1.931738 -1.743275 -1.854083
Q[2, , ] ## 0.975 quantile
# [,1] [,2] [,3]
#[1,] 1.953820 2.042508 1.836591
#[2,] 2.065854 2.006068 1.899495
#[3,] 1.885080 2.021729 1.943645