【问题标题】:How to generate correlated binary variables如何生成相关的二元变量
【发布时间】:2011-01-27 08:14:48
【问题描述】:

我需要生成一系列具有给定相关函数的 N 个随机二元变量。令 x = {xi} 为一系列二进制变量(取值 0 或 1,i 从 1 到 N)。边际概率给定 Pr(xi = 1) = p,变量应该在方式如下:

更正[xixj ] = const × |i-j|(对于 i!=j)

其中 α 是一个正数。

如果更简单,考虑相关函数:

更正[xixj ] = (|i-j|+1)

重要的部分是我想研究相关函数像幂律一样时的行为。 (不是α|i-j|

是否可以生成这样的系列,最好是在 Python 中?

【问题讨论】:

  • @Paul:不,绝对不是:“MathOverflow 的主要目标是让用户提出和回答研究级别的数学问题,即您在撰写或阅读文章时遇到的各种问题或研究生水平的书籍。” 几乎所有与数学相关的问题属于此范围。
  • @johannes:好的-感谢您的澄清-这似乎更像是一个数学问题而不是编程问题,因为一旦确定了数学,编程将变得微不足道,但听起来好像有没有比这更适合问这种问题了。
  • 将相关性大致解释为“两个变量的指数差异越大,两者为1的概率越小”是否正确?直观地说,这更喜欢集群。
  • @Svante:换一种说法:变量索引的差异越大,它们作为自变量的行为就越多。你的直觉是对的,这更喜欢集群。
  • jonalm,你需要实现这个特定的相关结构,还是只是一些强度随着距离而降低(并且可以通过一个参数修改)的相关结构?

标签: algorithm math random statistics probability


【解决方案1】:

感谢您的所有意见。我在 Chul Gyu Park 等人的可爱小文章中找到了我的问题的答案,所以如果有人遇到同样的问题,请查找:

“一种生成相关二进制变量的简单方法”(jstor.org.stable/2684925)

对于一个简单的算法。如果相关矩阵中的所有元素都是正数,并且对于一般边际分布 Pr(x_i)=p_i,则该算法有效。

j

【讨论】:

  • 有趣...另见projecteuclid.org/…
  • 你是用 Python 实现的吗?你还有剧本吗?请问有没有机会把它包括在内?
【解决方案2】:

您正在描述一个随机的过程,这对我来说似乎很难...如果您消除了二进制 (0,1) 要求,而是指定了期望值和方差,可以将其描述为通过 1 极点低通滤波器馈送的白噪声发生器,我认为这会给您 α|ij| 特性。

这实际上可能符合 mathoverflow.net 的标准,具体取决于它的措辞方式。让我试试问....


更新:我为 α|i-j| 案例做了ask on mathoverflow.net。但也许有一些想法可以适应你的情况。

【讨论】:

  • 其实是|i-j|^-\alpha; \alpha^|i-j| 的解在文献中。
  • hmmm... |i-j|^-alpha 没有 i=j 的解。我们确定 OP 没有错误陈述吗?
  • 它可以是 Corr[xi xj] = const x|ij|^-alpha for i != j,或者 Corr[xj xi] = (|ij|+1)^alfa(无论是最简单)。无论哪种方式,我都没有声称它们是平等的,而是只对尾部行为感兴趣(|i-j| >> 1)所以这不重要。
  • 非常感谢杰森。虽然这是一个不同的相关性,但解决方案真的很有趣。
【解决方案3】:

RSeek 的快速搜索显示R 有包

这样做。

【讨论】:

  • 这也是我的第一个想法,但我怀疑他们能否处理每 jonalm 在 cmets 中的声明 N=1000-10000。
  • 我不知道 R,但这似乎是学习它的理由 :) 谢谢。
【解决方案4】:

蛮力解决方案是将问题的约束表示为具有2^N 变量pr(w) 的线性程序,其中w 的范围是所有长度为N 的二进制字符串。首先pr是一个概率分布的约束:

for all w: 0 <= pr(w) <= 1
sum_w pr(w) = 1

二、每个变量的期望为p的约束:

for all i: sum_{w such that w[i] = 1} pr(w) = p

三、协方差约束:

for all i < j: sum_{w such that w[i] = w[j] = 1} pr(w) = const * |j - i|^alpha - p^2

这很慢,但粗略的文献搜索没有更好的结果。如果你决定实现它,这里有一些带有 Python 绑定的 LP 求解器:http://wiki.python.org/moin/NumericAndScientific/Libraries

【讨论】:

  • 我不知道线性规划,但我不知道它是如何工作的。二进制序列的任何配置都将具有非零概率。是否可以计算任何配置的概率?
  • 是的,如果问题是可以解决的,那么 LP 例程会给你每个 2^N 配置的概率。
【解决方案5】:

将分布xi表示为一些独立基分布fj的线性组合:xi = ai1f1 + ai2f2 + 。 .. .让我们将 fj 约束为均匀分布在 0..1 或 {0,1}(离散)中的自变量。现在让我们用矩阵形式表达我们所知道的一切:

Let X be the vector (x1, x2, .., xn)
Let A be the matrix (a_ij) of dimension (k,n) (n rows, k columns)
Let F be the vector (f1, f2, .., fk) 
Let P be the vector (p1, p2, .., pn)
Let R be the matrix (E[x_i,x_j]) for i,j=1..n
Definition of the X distribution: X = A * F
Constraint on the mean of individual X variables: P = A * (1 ..k times.. 1)
Correlation constraint: AT*A = 3R or 2R in the discrete case (because E[x_i x_j] = 
  E[(a_i1*f_1 + a_i2*f_2 + ...)*(a_j1*f_1 + a_j2*f_2 + ...)] =
  E[sum over p,q: a_ip*f_p*a_jq*f_q] = (since for p/=q holds E[f_p*f_q]=0)
  E[sum over p: a_ip*a_jp*f_p^2] =
  sum over p: a_ip*a_jp*E[f_p^2] = (since E[f_p^2] = 1/3 or 1/2 for the discrete case)
  sum over p: 1/3 or 1/2*a_ip*a_jp
And the vector consisting of those sums over p: a_ip*a_jp is precisely AT*A.

现在你需要解两个方程:

AT*A      = 3R (or 2R in the discrete case)
A*(1...1) = P

第一个方程的解对应于求矩阵 3R 或 2R 的平方根。例如见http://en.wikipedia.org/wiki/Cholesky_factorization 和一般http://en.wikipedia.org/wiki/Square_root_of_a_matrix。 第二个也应该做点什么:)

我请周围的数学家纠正我,因为我很可能将 ATA 与 AAT 混为一谈,或者做的更糟。

要生成 xi 的值作为基分布的线性混合,请使用两步过程:1)使用均匀随机变量来选择一个的基础分布,用相应的概率加权,2) 使用选择的基础分布生成结果。

【讨论】:

  • 不幸的是,连续 -> 离散转换通常是最难的部分。例如,如果允许复杂的条目,则查找 Hadamard 矩阵的问题会变得容易很多。我看不出有任何方法可以在给定的框架内离散化您的解决方案。
  • 为什么要这么难?解决方案仅取决于生成的分布是基础分布的线性混合,但我不明白它如何依赖于它们的连续性。是不是离散分布不容易线性混合?
  • 在这种情况下,您的连续分布不是伯努利试验的凸组合。
  • 对不起,我不太明白。我知道什么是凸组合,什么是伯努利试验,但仍然:我已经编辑了我的帖子;上一段中描述的过程没有给出正确的结果吗?如果是这样,您能否指出一些扩展您观点的来源? (无论如何,也许我应该只实现我描述的东西,看看它是否有效)
  • 问题是 A 可能有不在 0 和 1 之间的条目。
【解决方案6】:

这是一种似乎可行的直观/实验方法。

如果 b 是二进制 r.v., m 是二进制 r.v. 的平均值, c 是你想要的相关性, rand() 生成一个 U(0,1) r.v.,并且 d 是相关的二进制 r.v。你想要的:

d = if(rand()

也就是说,如果一个统一的房车。小于所需的相关性,d = b。否则 d = 另一个随机二进制数。

我为 2000 个二进制 r.v.s 的列运行了 1000 次。 m=.5 和 c = .4 和 c = .5 相关平均值完全符合规定,分布似乎是正态的。 对于 0.4 的相关性,相关性的标准偏差为 0.02。

抱歉 - 我无法证明这始终有效,但您必须承认,这确实很容易。

【讨论】:

  • 重读问题:这不是正确的相关结构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-20
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多