Как сгенерировать биномиальный вектор из n связанных элементов?

Я хочу создать биномиальный вектор на основе ряда коррелированных элементов, каждый из которых имеет определенную вероятность. Когда я использую эл. г. rbinom(1e3, size = 4, prob = c(p.x1, p.x2, p.x3, p.x4)) Я получаю что-то вроде 3 3 0 0 2 4 1 0 4 4 0 1 4.... Теперь эти x_i имеют определенные вероятности, но не коррелированы.

Пять лет назад Джош О'Брайен предложил отличный подход к генерации коррелированных биномиальных данных. Я думаю, что это близко к моим потребностям, но оно предназначено для пар, и я хочу 1., один вектор и 2., больше переменных p. Я уже пытался изменить функцию, чтобы создать большее количество переменных, но пока безуспешно, и я часто сталкиваюсь с

Error in commonprob2sigma(commonprob, simulvals) : 
Matrix commonprob not admissible. 

который отправляется импортированным пакетом bindata.

Моя идея состоит в том, чтобы определить в функции Джоша четыре (или лучше произвольное число) вероятностей и рос, что-то вроде

rmvBinomial3 <- function(n, size, p1, p2, p3, p4, rho) {
  X <- replicate(n, {
    colSums(rmvbin(size, c(p1,p2,p3,p4), bincorr=(1-rho)*diag(4)+rho))
  })
  t(X)
}

Конечно, требуется больше rhos, и я думаю, что матрица вероятностей должна быть каким-то образом включена, как это можно сделать с помощью пакета bindata. Я не знаю, как его включить.

rho1 <- -0.89; rho2 <- -0.75; rho3 <- -0.62; rho4 <- -0.59
m <- matrix(c(1, rho1, rho2, rho3,
     rho1, 1, rho4, rho2,
     rho2, rho4, 1, rho1,
     rho3, rho2, rho1, 1), ncol = 4) 
#       [,1]  [,2]  [,3]  [,4]
# [1,]  1.00 -0.89 -0.75 -0.62
# [2,] -0.89  1.00 -0.59 -0.75
# [3,] -0.75 -0.59  1.00 -0.89
# [4,] -0.62 -0.75 -0.89  1.00

К сожалению, каждая матрица, чтобы соответствовать условиям для bindata, которую я проверяю с помощью bindata::check.commonprob(m), выдает ту же ошибку, что и выше. Я также не смог получить матрицу, созданную bindata::commonprob2sigma().

Другим недостатком для меня является диапазон Джоша rmvBinomial(), похоже, он работает только между значениями для p.X_i= 0,2- -0,8 что-то, и мне нужны меньшие значения, например 0,01--0,1 тоже.

Любая помощь очень ценится.

Правка: Чтобы уточнить, ожидаемый результат действительно представляет собой всего один единственный вектор 3 3 0 0 2 4 1 0 4 4 0 1 4..., как показано в начале, но элементы, из которых он получен, должны быть коррелированы в определенной степени ( т.е. один из элементов может вообще не иметь корреляции).


person jay.sf    schedule 30.10.2017    source источник