R

时间:2016-10-05 23:20:14

标签: arrays r statistics-bootstrap do-loops gbm

我需要进行分析,我们需要将GBM算法应用于一系列自举重复。另一个问题是每个重复都需要具有分位数标准化结果。 我想要最终实现的是 1.从主数据集开始 2.创建包含200个重采样的三维数组 3.分位数对每个重采样中的结果变量进行标准化 4.在所有样本中运行GBM

现在,我甚至无法进行重新采样步骤。

#generating some data    
main<-matrix(
  replicate(52,rnorm(1132)),
  ncol=52,
  nrow=1132,
  dimnames = list(
    1:1132,
    1:52)
)

colnames(main)[1]<-"outcome"

#trying to create 200 resampled replicates
resampled = array (
  rep(NA),
  dim= c(1000, ncol(main), 200),
  dimnames= list(
      1:1000,
      colnames(main),
      1:200
      )
   ) 


  for (i in 1:dim(resampled)[1]) {
    for (j in 1:dim(resampled)[2]) {
      for (k in 1:dim(resampled)[3]) {
        resampled[i,j,k]= main[sample(nrow(main), size=1000, replace=TRUE),]

  }
}}

我很确定这是因为我没有正确指定循环,但经过数周的搜索,我找不到能够帮助我的示例代码。

我目前收到错误消息: 重采样[i,j,k] = main [样本(nrow(main),size = 1000,replace = TRUE)出错,:   要替换的项目数量不是替换长度的倍数

1 个答案:

答案 0 :(得分:0)

循环中的问题是resampled[i,j,k]期望接收一个元素但main[sample(nrow(main), size=1000, replace=TRUE),]返回1000x52矩阵。

我做了一个基于你的小例子。尝试以下代码,看看这是否是您期望获得的结果:

ncol = 3
nrow = 10
sample.size = 5
sample.rep = 4

#generating some data    
main<-matrix(
  replicate(ncol,rnorm(nrow)),
  ncol=ncol,
  nrow=nrow,
  dimnames = list(
    1:nrow,
    1:ncol)
)

colnames(main)[1]<-"outcome"

#trying to create 'sample.rep' resampled replicates
resampled = array (
  rep(as.numeric(NA)),
  dim= c(sample.size, ncol(main), sample.rep),
  dimnames= list(
    1:sample.size,
    colnames(main),
    1:sample.rep
  )
) 

for (k in 1:dim(resampled)[3]) {
  resampled[,,k]= main[sample(nrow(main), size=sample.size, replace=TRUE),]
}
print(resampled)