2013-09-18 10 views
5

Предположим, я хочу создать 50 двоичных переменных длиной 100, каждая из которых коррелирует между собой.Как вычислить предельные вероятности для генерации коррелированных двоичных переменных

Для создать матрицу корреляции с указанными Ро:

cor.mat <- matrix(0.2,nrow=50, ncol=50) 
diag(cor.mat) <- 1 

рядом я использую rmvbin:

library(bindata) 
rmvbin<-rmvbin(100, margprob=x, bincorr=cor.mat) 

Однако, я не уверен, как рассчитать margprob аргумент. Может кто-нибудь помочь?

Может ли это быть вектором суммы вероятностей в каждой строке и столбце?

+1

Отметьте '? Rmvbin' и посмотрите в примерах. Существует пример использования 'margprob'. – nograpes

+0

yes Я видел пример, моя проблема в том, что я не знаю, какие значения заполнять для моей матрицы. – user1984076

+0

Что случилось с моим вопросом? может кто-нибудь объяснить? – user1984076

ответ

4

margprob должен быть просто повторным вектором вероятности того, что любая одиночная переменная равна 1, независимо от остальной; назовите это значение p. Предполагая одинаково распределенные переменные (которые, по-видимому, соответствуют вашей корреляционной матрице), margprob=rep(p,50).

Он не должен быть вектором суммы вероятностей в каждой строке и столбце, так как корреляционная матрица не может использоваться для определения предельных вероятностей. Если у вас возникли проблемы с выяснением, что такое предельные вероятности для ваших случайных величин, вам нужно будет предоставить больше контекста для проблемы, и вопрос будет более подходящим для math.stackexchange.com.

4

Я думаю, проблема в том, что люди видели решение как слишком простое или неправильно заданное. Вы фактически не вычисляете предельные вероятности ... вы их указываете. Затем функция rmvbin использует спецификацию предельных вероятностей, а совместные корреляции для выполнения необходимой выборки (в среднем) дают совместные распределения, соответствующие этим спецификациям.

library(bindata) 
rmvbin<-rmvbin(100, margprob=rep(.5,50), bincorr=cor.mat) 

> str(rmvbin) 
num [1:100, 1:50] 0 0 0 1 0 0 0 1 0 0 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : NULL 

Так, чтобы посмотреть на характеристики выборки этого результата, вы можете увидеть, что корреляция существует с первой колонки:

Hmisc::describe(apply(rmvbin[,-1], 2, function(col) cor(col, rmvbin[,1]))) 
apply(rmvbin[, -1], 2, function(col) cor(col, rmvbin[, 1])) 
     n missing unique Mean  .05  .10  .25  .50  .75  .90 
    49  0  38 0.2009 0.05886 0.09874 0.13309 0.19372 0.25208 0.29723 
    .95 
0.33772 

lowest : 0.03508 0.04013 0.08696 0.09874 0.10889 
highest: 0.29942 0.32450 0.34653 0.40902 0.46714 

Таким образом, средняя корреляция при выборке была довольно близка к номинальной стоимости 0.2. но он довольно сильно варьировался.

Смежные вопросы