2016-10-05 31 views
0

我需要进行分析,我们需要将GBM算法应用于一系列自举复制。另一个缺点是每个重复都需要分位标准化结果。 我试图最终实现的是 1.从 开始主数据集2.创建一个包含200个重采样的3维阵列 3.分位数在每个重采样内标准化结果变量 4.全部运行GBM样本R中的子采样和分位数标准化

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

#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] =主[样品(nrow(主),大小= 1000,替换= TRUE),: 数项替换的是不替换长度的倍数

+2

你可以问一个最小的可重复的问题,以小数据集和预期的结果? – shayaa

+0

当您创建一个最小可重现的示例时,它将有助于获得您的预期结果和您获得的实际结果。 – pdb

+0

我在上面。这对我来说是非常新的。将在今晚晚些时候更新,当我弄清楚如何得到一个可重复的例子。 – BobaAddict

回答

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) 
+0

它现在给我一个关于没有正确数目下标的信息,但是我的数组也变成了一个荒谬的大对象。我尝试了一下,找到一种方法将巨大的物体分成数组。我将尝试一种不同的方法,因为在创建阵列之后还有很多步骤必须发生。谢谢你的帮助! – BobaAddict