#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. Теперь он выдает мне сообщение о том, что у меня нет нужного количества индексов, но мой массив также превратился в один абсурдно большой объект. Я немного пытался найти способ разделить гигантский объект обратно в массив. Я собираюсь попробовать другой подход к этому, поскольку после создания массива должно произойти еще очень много шагов. Спасибо за вашу помощь!