R: Разница в процентах начальной загрузки только при A > B

#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. Спасибо! Я попробую это сделать.