Подвыборка и нормализация квантилей в R

Мне нужно провести анализ, где нам нужно применить алгоритм 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),]

  }
}}

Я почти уверен, что это потому, что я неправильно указываю цикл, но после нескольких недель поиска я не могу найти образец кода, который мне поможет.

В настоящее время я получаю сообщение об ошибке: Error in resampled[i, j, k] = main[sample(nrow(main), size = 1000, replace = TRUE), : количество заменяемых элементов не кратно длине замены


person BobaAddict    schedule 05.10.2016    source источник
comment
Можете ли вы задать минимальный воспроизводимый вопрос с небольшим набором данных и ожидаемыми результатами?   -  person shayaa    schedule 06.10.2016
comment
Когда вы делаете минимальный воспроизводимый пример, было бы полезно иметь ожидаемый результат и фактический результат, который вы получаете.   -  person pdb    schedule 06.10.2016
comment
Я готов. Все это очень ново для меня. Обновлю позже сегодня вечером, когда я выясню, как получить воспроизводимый пример.   -  person BobaAddict    schedule 06.10.2016


Ответы (1)


Проблема в вашем цикле заключается в том, что 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)
person Gabriel Mota    schedule 06.10.2016
comment
Теперь он выдает мне сообщение о том, что у меня нет нужного количества индексов, но мой массив также превратился в один нелепо большой объект. Я некоторое время пытался найти способ разделить гигантский объект обратно на массив. Я собираюсь попробовать другой подход к этому, так как после создания массива нужно сделать еще много шагов. Спасибо за вашу помощь! - person BobaAddict; 09.10.2016