#r #for-loop #bootstrapping
Вопрос:
У меня есть два набора чисел A и B. Я хотел бы провести анализ начальной загрузки, в котором я вычисляю процентную разницу между значениями в каждой группе, но только для случаев, когда значение в группе A gt; B.
Я попытался написать код ниже, но все значения, которые я получаю, равны 0. У кого-нибудь есть какие-нибудь советы о том, как это сделать?
A lt;- c(13,5,8,1,23,4,7,2,14,27) B lt;- c(5,7,0.5,10, 1,3, 0.7,2,0.8,4) percentage_difference lt;- function(value, value_two) { (value - value_two) / value } n lt;- 10000 Per_Dif lt;- numeric(n) for (i in 1:n) { if(A gt; B){Per_Dif[i] lt;- percentage_difference(sample(A, replace = T), sample(B, replace = T))} }
Комментарии:
1. Что означает ваше условие $Agt;B$? Вы берете случайную выборку из A и B, а затем сопоставляете только те, которые удовлетворяют условию? Это звучит как очень запутанный подход, разве это не эквивалентно вычислению всех процентных различий и удалению отрицательных?
2. Да, я хотел бы получить случайную выборку из A и B, а затем сопоставить только те, которые удовлетворяют условию. Причина, по которой я выбрал этот запутанный подход, заключалась в том, что я хотел, чтобы итоговое число n составляло 10 000. И если я выполню ту же операцию с другим набором данных, я хотел бы сравнить 10 000 элементов из группы 1 с 10 000 элементами из группы 2.
Ответ №1:
Попробуй
do.call(c,lapply(1:n, function(boot){ a lt;- sample(A, replace = T) b lt;- sample(B, replace = T) percentage_difference(a,b)[agt;b] }))
Комментарии:
1. Большое спасибо за ваш ответ. Среднее значение и распределение, которые я получаю с помощью вашего решения, похоже, делают, но количество элементов, которые я получаю, составляет примерно 77 000? Поскольку n = 10 000, я думал, что количество элементов будет равно 10 000. Знаете ли вы, почему количество элементов в 77 000 при использовании вашего метода?
2. @SM87 Функция выборки выбирает вектор той же длины, что и A, с заменой, поэтому количество элементов, которые вы получаете, должно зависеть от распределений A и B. Если вы хотите выбрать только один элемент из случайного розыгрыша, укажите вместо
sample(A, size =1)
этого , чтоreplace= T
является избыточным. Если я правильно понял вопрос, то это3. Но размер окончательного списка все равно будет зависеть от условий
A gt; B
. Если вы хотите продолжать рисовать до тех пор, пока размер элемента не достигнет 10000, для этого, вероятно, потребуетсяwhile
цикл.4. Спасибо! Я попробую это сделать.