2016-10-05 30 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