Questions tagged «random-generation»

随机地或(几乎总是)伪随机地生成数字或符号序列的行为;即缺乏任何可预测性或模式。

5
产生相关非正态数据的方法
我对寻找一种生成相关的非正常数据的方法感兴趣。因此,理想情况下,某种类型的分布将协方差(或相关)矩阵作为参数,并生成近似该分布的数据。但是这里有个要点:我试图找到的方法应该具有灵活性,也可以控制其多元偏度和/或峰度。 我熟悉Fleishman的方法和正态变量的幂方法的使用,但是我相信大多数扩展只允许用户使用边际偏度和峰度的某些组合,而将多元偏度/峰度留在那儿。我想知道的是,是否有一种方法可以帮助指定多元偏度和/或峰度,以及一些相关性/协方差结构。 大约一年前,我参加了一次关于系蝇分布的研讨会,我记得这位教授随便提到了通过使用葡萄系蝇,一个人可以产生的数据在其一维边缘中的每一个都对称,但共同偏斜,反之亦然。 -反之亦然。或者,甚至更进一步,任何维数较低的边距在保持最大维数对称(或不对称)的同时,可能会有些偏斜或峰度。我一直对这种灵活性可能存在的想法感到惊讶,我一直试图找到某种描述上述方法的文章或会议论文,但我没有成功:(。不必通过使用copulas,我愿意接受任何可行的方法。 编辑:我添加了一些R代码,以尝试显示我的意思。到目前为止,我只熟悉Mardia对多元偏斜和峰度的定义。当我第一次解决问题时,我天真地想到如果我使用具有偏斜边线(在本例中为beta)的对称copula(在本例中为高斯),则对边沿的单变量检验会产生显着性,但Mardia对多变量偏斜/峰度的检验会很有意义。不重要。我尝试了一下,但并没有按我预期的那样出来: library(copula) library(psych) set.seed(101) cop1 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"), c("beta", "beta"),list(list(shape1=0.5, shape2=5), list(shape1=0.5, shape2=5)))} Q1 <- rmvdc(cop1, 1000) x1 <- Q1[,1] y1 <- Q1[,2] cop2 <- {mvdc(normalCopula(c(0.5), dim=2, dispstr="un"), c("norm", "norm"),list(list(mean=0, sd=1), list(mean = 0, sd=1)))} Q2 <- rmvdc(cop2, 1000) x2 <- Q2[,1] y2 <- Q2[,2] …

1
从多元高斯分布中产生值
目前我正在试图到的模拟值维随机变量具有与平均向量一个多元正态分布和协方差矩阵。NNNXXXμ=(μ1,...,μN)Tμ=(μ1,...,μN)T\mu = (\mu_1,...,\mu_N)^TSSS 我希望能使用类似于逆CDF方法的过程,这意味着我想首先生成维均匀随机变量,然后把它插入到这个分布的逆CDF,所以生成值。NNNUUUXXX 我遇到问题是因为该过程没有得到很好的记录,并且MATLAB中的mvnrnd函数与我在Wikipedia上找到的描述之间存在细微的差异。 就我而言,我还随机选择分布的参数。特别是,我从均匀分布生成每个均值。然后,我使用以下过程构建协方差矩阵:μiμi\mu_iU(20,40)U(20,40)U(20,40)SSS 创建一个下三角矩阵,其中对于,,对于 ,LLLL(i,i)=1L(i,i)=1L(i,i) = 1i=1..Ni=1..Ni=1..NL(i,j)=U(−1,1)L(i,j)=U(−1,1)L(i,j) = U(-1,1)i&lt;ji&lt;ji < j 令,其中表示的转置。S=LLTS=LLTS = LL^TLTLTL^TLLL 此过程使我可以确保是对称且为正定的。它还提供了一个较低的三角矩阵因此,我认为需要从该分布生成值。SSSLLLS=LLTS=LLTS = LL^T 使用Wikipedia上的指南,我应该能够使用维统一生成值,如下所示:XXXNNN X=μ+L∗Φ−1(U)X=μ+L∗Φ−1(U)X = \mu + L * \Phi^{-1}(U) 但是,根据MATLAB函数,通常按以下方式完成: X=μ+LT∗Φ−1(U)X=μ+LT∗Φ−1(U)X = \mu + L^T * \Phi^{-1}(U) 其中是一个的逆CDF维,可分离,正态分布,并且这两种方法之间的唯一区别是简单地是否使用或。Φ−1Φ−1\Phi^{-1}NNNLLLLTLTL^T 是MATLAB还是维基百科?还是都错了?

3
生成总和为一的均匀分布的权重?
通常在混合模型之类的应用程序中使用权重并线性组合基函数。权重必须经常服从和。我想从此类向量的均匀分布中随机选择一个权重向量。wiwiw_iwi≥wi≥w_i ≥∑iwi=1∑iwi=1\sum_{i} w_i=1w=(w1,w2,…)w=(w1,w2,…)\mathbf{w} = (w_1, w_2, …) 使用w_i = \ frac {\ omega_i} {\ sum_ {j} \ omega_j}可能很诱人,wi=ωi∑jωjwi=ωi∑jωjw_i = \frac{\omega_i}{\sum_{j} \omega_j}其中ωi∼ωi∼\omega_i \sim U(0,1),但是正如下面的注释所讨论的,\ mathbf {w的分布}ww\mathbf{w}是不统一的。 但是,给定约束∑iwi=1∑iwi=1\sum_{i} w_i=1,问题的基本维度似乎为n−1n−1n-1,并且应该有可能通过根据以下方法选择n-1个参数来选择ww\mathbf{w}:进行某种分布,然后根据这些参数计算相应的\ mathbf {w}(因为一旦指定了权重的n-1,就完全确定了剩余的权重)。n−1n−1n-1ww\mathbf{w}n−1n−1n-1 这个问题似乎是类似球面点采摘的问题(但不是采摘3载体,其ℓ2ℓ2ℓ_2标准是统一的,我想挑选nnn -载体,其ℓ1ℓ1ℓ_1标准是统一)。 谢谢!

1
低差异序列中的加扰和相关(Halton / Sobol)
我目前正在一个项目中,在其中使用低差异/准随机点集(例如Halton和Sobol点集)生成随机值。这些本质上是维向量,它们模仿d维均匀(0,1)变量,但分布较好。从理论上讲,它们应该有助于减少项目另一部分中我的估算值的差异。dddddd 不幸的是,我一直在与他们合作时遇到问题,关于它们的许多文献都很密集。因此,我希望从有经验的人那里获得一些见识,或者至少想出一种凭经验评估发生了什么的方法: 如果您曾与他们合作: 到底是什么?它对生成的点流有什么影响?特别是,当生成的点的尺寸增加时,会产生影响吗? 为什么如果我通过MatousekAffineOwen加扰生成两个Sobol点流,则会得到两个不同的点流。当我对Halton点使用反基数加扰时,为什么不是这种情况?这些点集是否还存在其他加扰方法-如果是,是否有MATLAB实现? 如果您尚未与他们合作: 假设我有个假设为随机数的序列S 1,S 2,... ,S n,那么我应该使用哪种类型的统计数据来表明它们之间没有关联?我需要证明什么n才是统计上有意义的?另外,我怎么会做同样的事情,如果我有ň序列小号1,s ^ 2,... ,小号ñ的d维随机[ 0 ,1 ]的载体?nnnS1,S2,…,SnS1,S2,…,SnS_1, S_2, \ldots,S_nnnnnnnS1,S2,…,SnS1,S2,…,SnS_1, S_2, \ldots,S_nddd[0,1][0,1][0,1] 红衣主教回答的后续问题 从理论上讲,我们可以将任何加扰方法与任何低差异序列配对吗?MATLAB只允许我对Halton序列应用反基数加扰,并且想知道这仅仅是实现问题还是兼容性问题。 我正在寻找一种方法,使我可以生成彼此不相关的两个(t,m,s)网。MatouseAffineOwen可以允许我这样做吗?如果我使用确定性加扰算法并简单地决定选择每个以k为质数的'kth'值,该怎么办?


1
如何从超椭圆体(恒定的马氏距离)的表面均匀采样?
在实值多元情况下,是否有一种方法可以从表面上的点开始均匀采样,这些点的马氏距离与均值的距离是恒定的? 编辑:这只是归纳为满足方程的超椭圆体表面的均匀采样点, (x−μ)TΣ−1(x−μ)=d2.(x−μ)TΣ−1(x−μ)=d2.(x-\mu)^T \Sigma^{-1}(x-\mu) = d^2. 更准确地说,“均匀”是指样本,以使超曲面的每个面积元素dAdAdA包含相同的概率质量。

6
是否存在我们无法抽样的单变量分布?
从单变量分布(逆变换,接受拒绝,Metropolis-Hastings等)中,我们有各种各样的随机生成方法,似乎我们可以从任何有效分布中采样-是这样吗? 您能否提供无法随机生成的单变量分布示例?我想这个不可能的例子不存在(?),所以说“不可能”是指计算量非常大的情况,例如,需要蛮力模拟,例如绘制大量样本以仅接受他们很少。 如果不存在这样的示例,我们是否可以实际证明可以从任何有效分布中生成随机抽奖?我只是很好奇是否存在反例。

2
扔硬币是将一组随机分为两组的一种公平方法吗?
因此,我自己和叔叔都在争论一次硬币翻转是否真的是随机的。我认为这不是因为实际上硬币投掷者总是会操纵硬币,所以结果不是50/50,因此,作为在临床试验中分配组的随机化技术不是一个好的选择。但是他认为,抛硬币的微小缺陷是造成随机性的原因。因此,他然后假定了一种机器,该机器将永远能够抛弃一个公平的硬币,并使它落在头上,说实话,我只需要有人为我解决这个论点。扔硬币是将一组随机分为两组的一种公平方法吗?

2
如何从日志空间中的离散(分类)分布中采样?
假设我有一个由向量定义的离散分布这样将以概率来绘制类别。然后,我发现分布中的某些值是如此之小,以至于淹没了我计算机的浮点数表示形式,因此,为了补偿,我在对数空间中进行了所有计算。现在我有一个日志空间向量。θ0,θ1,...,θNθ0,θ1,...,θN\theta_0, \theta_1, ..., \theta_N000θ0θ0\theta_0log(θ0),log(θ1),...,log(θN)log(θ0),log(θ1),...,log(θN)log(\theta_0), log(\theta_1), ..., log(\theta_N) 是否可以从分布中采样,以使原始概率成立(类别是用概率绘制的),而又不会离开对数空间?换句话说,如何从该分布中采样而不会出现下溢?iiiθiθi\theta_i

3
如何有效地生成间隔中的排序均匀分布值?
假设我要从interval生成一组随机数(a, b)。生成的序列还应该具有对其进行排序的属性。我可以想到两种方法来实现这一目标。 让n是要生成的序列的长度。 第一种算法: Let `offset = floor((b - a) / n)` for i = 1 up to n: generate a random number r_i from (a, a+offset) a = a + offset add r_i to the sequence r 第二算法: for i = 1 up to n: generate a random number …

1
在每个代码块之前或每个项目一次设置种子?
标准建议是设置一个随机种子,以便可以重现结果。但是,由于种子是随着伪随机数的绘制而前进的,因此,如果任何一段代码绘制了一个额外的数字,则结果可能会发生变化。 乍一看,版本控制似乎是一种解决方案,因为当您将结果记录在便笺或纸上时,它至少可以让您返回并重现现有的版本。但是,由于只需要抽奖就可以解决问题,因此,如果更新R,结果也可能会更改。 我意识到这可能仅在极少数情况下是有问题的,但是我很好奇这里是否有最佳实践。这是我在自己的工作中一直在努力的事情。


2
这会给随机数带来偏差吗?
假设一个数据文件随机生成80+百万个1和0。 从这个文件中,我们想创建一个随机十进制整数的列表。 这是进行此转换的计划。 将8000万个数字分为4个二进制数字的分组。 将每个4位二进制数转换为十进制。 丢弃所有大于9的十进制值。 这将导致从0-9的随机整数字符串 这里是关注点。包含与值10到15对应的4个二进制数字的6个分组的24个二进制数字包含17个1和7个0。这种不平衡会以任何方式影响偶数与奇数整数的分布,还是损害最终的十进制数字字符串的随机性? 更新:从发布的答案来看,上面列举的方法似乎是正确的。我同意这个结论。但是,我仍然不明白为什么从二进制字符串中删除比零多两倍的数字不会使结果偏向于更少的奇数。我寻求解释。

5
如何生成均值为的序列?
我知道如何生成均值为的序列。例如,在Matlab中,如果我想生成长度为的序列,则为:0 ± 1 10000±1±1\pm 1000±1±1\pm 1100001000010000 2*(rand(1, 10000, 1)&lt;=.5)-1 然而,如何产生一个与平均序列,即,具有稍微优选?0.05 1±1±1\pm 10.050.050.0511个1

3
使用Ahrens和Dieter(1972)的方法而不是通过逆变换的指数随机发生器的优点是什么?
我的问题是受R的内置指数随机数生成器函数启发的rexp()。当尝试生成指数分布的随机数时,许多教科书建议使用此Wikipedia页面中概述的逆变换方法。我知道还有其他方法可以完成此任务。特别是,R的源代码使用Ahrens&Dieter(1972)在论文中概述的算法。 我已经说服自己,Ahrens-Dieter(AD)方法是正确的。不过,与逆变换(IT)方法相比,我看不出使用它们的方法的好处。AD不仅比IT实施更复杂。似乎也没有速度上的好处。这是我的R代码,用于对两种方法及其结果进行基准测试。 invTrans &lt;- function(n) -log(runif(n)) print("For the inverse transform:") print(system.time(invTrans(1e8))) print("For the Ahrens-Dieter algorithm:") print(system.time(rexp(1e8))) 结果: [1] "For the inverse transform:" user system elapsed 4.227 0.266 4.597 [1] "For the Ahrens-Dieter algorithm:" user system elapsed 4.919 0.265 5.213 比较这两种方法的代码,AD至少绘制两个统一的随机数(使用C函数unif_rand())以获得一个指数随机数。IT只需要一个统一的随机数。大概是R核心团队决定不实施IT,因为它假设采用对数可能比生成更统一的随机数慢。我了解对数的获取速度可能与机器有关,但至少对我而言是相反的。也许IT的数值精度与对数为0的奇异性有关吗?但是然后,R 源代码sexp.c揭示了AD的实现也失去了一些数值精度,因为C代码的以下部分从统一随机数u中删除了前导位。 double u = unif_rand(); while(u &lt;= 0. || u …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.