2016-10-05 21 views
0

Мне нужно провести анализ, где нам нужно применить алгоритм GBM к серии загрузочных реплик. Еще одна морщина заключается в том, что каждый репликат должен иметь количественный нормализованный результат. То, что я пытаюсь достичь, - 1. Начните с основного набора данных с помощью . 2. Создайте трехмерный массив, содержащий 200 повторных образцов. 3. Quantile нормализует переменную результата в каждом повторном запросе. 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

 Смежные вопросы

  • Нет связанных вопросов^_^