Субдискретизация и нормализация квантилей в R

#arrays #r #statistics-bootstrap #do-loops #gbm

#массивы #r #статистика-bootstrap #циклы выполнения #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[sample(nrow (main), size = 1000, replace = TRUE) : количество элементов для замены не кратно длине замены

Комментарии:

1. Можете ли вы задать минимальный воспроизводимый вопрос с небольшим набором данных и ожидаемыми результатами?

2. Когда вы создаете минимально воспроизводимый пример, это поможет получить ожидаемый результат и фактический результат, который вы получите.

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

Ответ №1:

Проблема в вашем цикле заключается в том, что resampled[i,j,k] ожидается получение одного элемента, но main[sample(nrow(main), size=1000, replace=TRUE),] возвращается матрица 1000×52.

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

 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)
  

Комментарии:

1. Теперь он выдает мне сообщение о том, что у меня нет нужного количества индексов, но мой массив также превратился в один абсурдно большой объект. Я немного пытался найти способ разделить гигантский объект обратно в массив. Я собираюсь попробовать другой подход к этому, поскольку после создания массива должно произойти еще очень много шагов. Спасибо за вашу помощь!