代码之家  ›  专栏  ›  技术社区  ›  colin

计算矩阵R的元素分位数

  •  1
  • colin  · 技术社区  · 7 年前

    matrix.list <- list()
    for(i in 1:1000){
      matrix.list[[i]] <- matrix(rnorm(9), ncol=3, nrow=3)
    }
    

    我可以直接计算元素平均值和标准差,如下 this stackoverflow 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 它失败了。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Zheyuan Li    7 年前
    Q <- apply(simplify2array(matrix.list), 1:2, quantile, prob = c(0.025, 0.975))
    

    apply 将结果简化为数组,并且 quantile 返回多个值,则有一个三维数组。但提取过程很简单:

    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