Нарисуйте d наблюдения из выборки n раз и рассчитайте среднее - PullRequest
0 голосов
/ 07 мая 2018

Рассмотрим следующие данные:

x <- c(2, 4, 6, 8)
mean(x)
[1] 5

Теперь я хочу сделать 2 наблюдения. Это дает мне 6 комбинаций. Я хочу рассчитать среднее значение для всех 6 комбинаций и среднее значение этих 6 значений. То есть я должен получить следующие средства:

(2+4)/2 = 3
(2+6)/2 = 4
(2+8)/2 = 5
(4+6)/2 = 5
(4+8)/2 = 6
(6+8)/2 = 7

Я знаю, что порядок может отличаться от приведенного выше, но каждый раз он должен давать мне в среднем 5 (в случае выше: (3+4+5+5+6+7)/6 = 5).

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Я думаю, что OP шел в правильном направлении, чтобы использовать sample, чтобы нарисовать 2 наблюдений n раз (как следует из названия).Но каким-то образом угол решения изменился в сторону функции combn (что не является правильным вариантом).

Можно использовать sample вместе с replicate как:

x <- c(2, 4, 6, 8)

mean(replicate(6, sample(x,2)))
#[1] 4.666667        #There is random-ness in set of observations selected.

В приведенной выше попытке replicate предоставляет 6 наборов из 2 наблюдений в виде:

replicate(6, sample(x,2))
#      [,1] [,2] [,3] [,4] [,5] [,6]
# [1,]    2    4    4    4    8    8
# [2,]    6    2    2    8    6    2

Лично я не думаю, что combn является правильным вариантом для использования здесь.combn возвращает все возможные комбинации выбранного количества наблюдений.Это означает, что каждое наблюдение (из x) будет появляться равное количество раз в наборе комбинаций, полученном из функции combn.Это означает, что mean из combn(x,2) будет таким же, как mean(x).Следовательно, какой смысл использовать combn в этом случае.

0 голосов
/ 07 мая 2018

Ответ в одну строку:

mean(rowMeans(t(combn(x,2))))

объяснил шаг за шагом:

с помощью «нарисовать 2 наблюдения» вы фактически хотите выбрать 2 объекта / наблюдения из x:

x <- c(2, 4, 6, 8) 
combn(x, 2)
##      [,1] [,2] [,3] [,4] [,5] [,6]
## [1,]    2    2    2    4    4    6
## [2,]    4    6    8    6    8    8

с t() вы можете преобразовать его в:

t(combn(x,2))
##      [,1] [,2]
##  [1,]    2    4
##  [2,]    2    6
##  [3,]    2    8
##  [4,]    4    6
##  [5,]    4    8
##  [6,]    6    8

Средство, которое вы можете рассчитать с помощью rowMeans()

rowMeans(t(combn(x,2)))
## [1] 3 4 5 5 6 7

Если вы вычислите среднее значение этого, вы получите то, что вы хотите.

mean(rowMeans(t(combn(x,2))))
## [1] 5
...