【问题标题】:bootstrapping/resampling matrix by row in R在R中逐行引导/重采样矩阵
【发布时间】:2014-12-10 19:59:38
【问题描述】:

我有一个矩阵x,有 20 行和 10 列。我需要一次采样(替换)5行并计算列均值。我需要重复此过程 15 次,并报告每次的列均值。

例如,我使用R 中的重采样库来执行此操作。

# Create a random matrix
library("resample")

set.seed(1234)
x <- matrix( round(rnorm(200, 5)), ncol=10)

## Bootstrap 15 times by re sampling 5 rows at a time. 
k <- bootstrap(x,colMeans,B = 15,block.size=5)

我对上述过程的担忧是我不确定行是否保持“完整”,这意味着列均值是在选定的 5 行内计算的。第二个问题是,上述函数中的block.size是否随机选择5行并计算colMeans并重复此操作15次并在重复中报告如下所示?

 k$replicates
      stat1 stat2 stat3 stat4 stat5 stat6 stat7 stat8 stat9 stat10
 [1,]  4.65  4.50  4.65  5.25  5.25  5.05  4.90  5.60  4.85   5.20
 [2,]  4.60  4.65  4.80  5.60  5.50  5.20  5.05  5.10  5.00   5.40
 [3,]  4.90  4.35  4.55  5.20  5.80  4.80  4.60  5.30  5.15   4.20
 [4,]  4.75  4.65  4.15  5.30  5.25  4.80  4.70  5.15  5.55   4.35
 [5,]  4.55  4.65  4.50  5.40  5.40  4.90  4.85  5.55  5.00   4.75
 [6,]  4.65  4.25  5.00  5.35  5.20  5.05  4.95  5.20  4.75   5.20
 [7,]  4.70  4.30  4.75  5.35  5.50  4.75  5.00  5.45  4.85   4.75
 [8,]  4.75  4.15  4.95  5.10  5.55  4.70  4.70  5.30  5.05   4.90
 [9,]  4.40  4.30  4.50  5.25  5.50  4.70  4.75  5.35  4.95   4.85
[10,]  4.85  4.50  4.35  5.25  5.70  4.75  4.65  5.35  4.95   4.10
[11,]  4.35  4.50  4.65  5.30  5.20  4.75  4.85  5.30  5.20   5.20
[12,]  4.25  4.55  5.20  5.00  5.45  4.80  4.90  5.15  5.30   5.00
[13,]  4.30  4.70  4.55  5.05  5.35  4.85  5.00  4.90  5.75   4.60
[14,]  4.70  4.35  4.95  5.25  5.40  4.85  4.90  5.20  5.40   5.20
[15,]  4.55  4.70  4.40  5.15  5.20  4.70  4.80  5.45  6.00   4.90

我并不特别限于这个功能或包,任何其​​他建议将不胜感激。

非常感谢

【问题讨论】:

    标签: r matrix resampling statistics-bootstrap


    【解决方案1】:

    不使用包,你可以这样做:

    # your data
    set.seed(1234)
    x <- matrix( round(rnorm(200, 5)), ncol=10)
    
    # reset seed for this sampling exercise; define sample size and # iterations    
    set.seed(1)
    samp_size <- 5
    iter <- 15
    
    # here are 15 blocks of 5 numbers, which will index rows of your matrix x
    samp_mat <- matrix(sample(1:nrow(x), samp_size*iter, replace=T),
                       ncol=samp_size, byrow=T)
    
    # example, look at the first 3 blocks:
    samp_mat[1:3,]
    
    #       [,1] [,2] [,3] [,4] [,5]
    # [1,]    6    8   12   19    5
    # [2,]   18   19   14   13    2
    # [3,]    5    4   14    8   16
    
    # so, you can get the colMeans for the first block like this 
    # (i.e colMeans for rows 6  8 12 19  5, in this case)
    colMeans(x[samp_mat[1,],])
    
    # for all 15 blocks:
    t(apply(samp_mat, 1, function(i) colMeans(x[i,])))
    

    ...如果您想将所有内容整合到一个语句中,您可以:

    t(apply(matrix(sample(1:nrow(x), 5*15, replace=T), ncol=5, byrow=T), 1,
            function(i) colMeans(x[i, ])))
    

    (但这显然不太可读)

    【讨论】:

    • 非常感谢,这很有帮助
    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多