考虑一下,我希望x
随机数加起来等于1,并且该分布是指数分布。当我使用
x<-c(10,100,1000)
a<-rexp(x[3],rate=1)
a<-a/sum(a)
这会改变分布,对吗?
那么有人知道一种使概率仍然呈指数分布的方法吗?我知道他们将不再完全独立。
非常感谢!
答案 0 :(得分:2)
是的,归一化会改变分布,实际上,不可能精确地实现所需的内容。
简单明了
让X 1 ,…,X n 对于某些有限的n是要生成其值的随机变量。您有两个要求
虽然很容易满足这两个要求中的每个要求,但不可能同时满足两个要求。这样做的原因是,指数分布的probability density function在[0,∞)上为正。这意味着每个X i 都以正概率获得大于1的值,这意味着要求2并不总是成立。实际上,它具有零概率。
归一化所隐含的概率分布
现在,您提出了一种直观的方法,从需求1开始并执行归一化Z i = X i /(X 1 + …+ X n ),每个i = 1,…,n。但是,很少有分布在诸如加法,乘法,尤其是除法的变换下表现良好,因为随机分母几乎很难处理。在这种情况下,我们还要担心Z i 的分子和分母是依赖的。
尽管如此,Z i 的 exact 分布的名称实际上是已知的,它是Dirichlet distribution。可以看到note that X i 〜Gamma(1,λ),其中λ作为速率参数。接下来,我们看一下Dirichlet分布的definition:对于i = 1,…,我们从Y i 〜Gamma(α i ,θ)开始。 n,然后按照您的建议,定义W i = Y i /(Y 1 +…+ Y n 子>)。然后(W 1 ,...,W n )〜Dirichlet(α i ,…,α n )。但是,在要求1的情况下,对于每个i = 1,…,n,我们都有α i = 1。因此,您的方法导致(Z 1 ,...,Z n )〜Dirichlet(1,...,1)。
然后,您可以使用MCMCpack
包来模拟其中的值:
library(MCMCpack)
rdirichlet(1, c(1, 1, 1))
# [,1] [,2] [,3]
# [1,] 0.2088649 0.7444334 0.04670173
sum(rdirichlet(1, c(1, 1, 1)))
# [1] 1
现在查看Dirichlet(1,...,1)的probability density function,您会发现它实际上是常数(当为正数时)。因此,从某种意义上讲,您可能会认为它是多元统一的。如果想一秒钟,这是有道理的(例如,考虑x + y = 1,x + y + z = 1上的点)。
但是,多元分布在某种程度上是均匀的,并不意味着在边际分布方面类似。实际上,可以show证明它们是Beta(1,n-1)。
在Z i 上被限制为[0,1]
由于对于某些λ值,指数随机变量集中在接近零的位置,所以人们可能会错误地认为它们实际上具有有限的支持度。
X i 〜Exp(λ)的累积分布函数为1-exp(-λx)。因此,P(X i <= 1)= 1-exp(-λ)仅在极限处为λ->∞,而在λ->∞时为1,但在这种情况下,X的分布收敛为0。因此,我们不能将非退化指数随机变量限制为[0,1]。但是请注意,对于较大的λ1-exp(-λ)固定值来说,它接近1,并且可能会错误地认为X i 实际上限制为[0,1]。
一些琐碎的示范。首先,Z i (遵循Dirichlet分布)被限制为[0,1]。
data <- replicate({
x <- rexp(5)
z <- x[1] / sum(x)}, n = 100000)
range(data)
# [1] 1.060492e-06 9.633081e-01
plot(density(data, bw = 0.01))
第二,X〜Exp(1)显然取大于1的值。
x <- rexp(10000)
range(x)
# [1] 7.737341e-05 1.005980e+01
mean(x < 1)
# [1] 0.6391
plot(density(x))
按正数缩放比例
有多条评论建议使用fact,即指数分布在按比例缩放时以正因子闭合,因此如果X〜Exp(λ),则kX〜Exp(λ/ k)。确实是这样,但这不适用于当前情况。原因是k = X 1 +…+ X n 不是常数(这意味着k对于X i 的不同实现是不同的),因此,kX〜Exp(λ/ k)不成立。现在,如果我们将k视为一个常数(例如5),则无法保证Z i = X i / 5将满足您的要求2。实际上,则约束将以0的概率成立。
要清楚地了解正在发生的事情,不要被@MauritsEvers的经验“证明”所误导,这里有一些详细信息。
让(Ω,F,P)为概率空间。然后X i :Ω-> R;即,X i 是一个函数,它取R中的值X i (ω),结果ω(将其想象为set.seed
值)来自Ω。现在我们确实具有这样的性质,对于常数k,kX i 〜Exp(λ/ k)。然而,常数是指,不管来自Ω的已实现结果ω,k的值始终相同,就好像k:Ω-> R是常数函数一样。 @MauritsEvers提出的是k = X 1 +…+ X n 。但是,这被视为一个函数,它不是常数,并且取决于结果ω。
一些说明这个逻辑如何失败的简单示例如下:让k = 1 / X i 。然后kX i = 1,它是一个退化的随机变量,而不是指数变量。类似地,如果X〜N(0,1),则kX = 1而不是kX〜N(0,1 / X ^ 2),这将根据X〜N(0,1)给出kX的事实进行“跟进”约N(0,k ^ 2)表示常数 k。
错误逻辑
现在,上述错误逻辑的起源可以说是对概率概念的错误处理+直接处理R中的模拟值。@ MauritsEvers声称如果我们运行
n <- 3
x <- rexp(n)
k <- sum(x)
然后,实现的总和k
可以用作上述常数k,并期望kX i 〜Exp(?)。像上面的示例一样,对n <- 1
进行的健全性检查已经表明,这种论点有问题,因为x / k
就是1
-一个退化的随机变量,而不是指数的。声称k <- sum(x)
是一个有效的选择,因为它是许多已经观察到的实现。这实际上就是该选择无效的原因。在前面的符号中,我们有k(ω)= X 1 (ω)+…+ X n (ω),因此k不是常数函数。 / p>
另一种看待它的方式是,如果我们认为x
是某种随机的,那么k
是一样随机的,因为它是{{1 }}。现在x
和x
都是数字和实现,但是在要求R打印它们之前,我们都不知道它们的值。常数k的定义是,不管ω或k
,我们总是知道它的值。
最后,作为一项大学练习,可以考虑查看kX i 的CDF:
P(kX i <= x)= P(X i <= x / k)= 1-exp(-λx/ k)
,因此是预期的kX i 〜Exp(λ/ k)。现在以set.seed
为例。在这种情况下,我们正在处理
P(X 1 /(X 1 + X 2 )<= x)
,我们再也无法轻易摆脱复杂的分母。对于来自Ω的某个固定ω,我们当然可以定义一个常数k = X 1 (ω)+…+ X n (ω)。但是Z i = X i /(X 1 (ω)+ ... + X n (ω) )不再限制为[0,1],并且要求2再次失败。
错误的经验“证明”
最后,有人可能会问,为什么@MauritsEvers的经验“证明”部分(由于模拟+拟合+假设检验与理论证明相去甚远)声称Z i 实际上确实遵循指数分布。
此“证明”的关键要素是取n <- 2
和lambda <- 1
相对较大的值。在这种情况下,我们有
Z i = X i /(X 1 + ... + X n )≈X i / n * n /(X 1 +…+ X n )。
根据大数定律,右边的第二项变为λ-一个固定数-而众所周知的第一项为Exp(λn)。因此,对于较大的n,我们得到Z i 的逼近作为λExp(λn)。但是,最初的问题不是关于近似值或极限分布。
摘要
我们可以区分以下三种情况:
答案 1 :(得分:0)
来自?rexp
rexp(n, rate = 1) [...] n: number of observations. If ‘length(n) > 1’, the length is taken to be the number required.
所以
x<-c(10,100,1000)
a<-rexp(x,rate=1)
与
相同rexp(3, rate = 1)
归一化为1可确保(指数)概率函数满足(指数)概率密度函数的标准。
在与@JuliusVainora的讨论有些晦涩之后,我将证明a
确实是指数分布的。
让我们重新生成数据:
x <- c(10, 100, 1000)
set.seed(2018)
a <- rexp(x[3], rate=1)
a <- a / sum(a)
我在这里使用固定的随机种子来提高可重复性。
我将使用贝叶斯指数模型来拟合lambda
,并使用a
来估算rstan
library(rstan)
stan_code <- "
data {
int N;
real x[N];
}
parameters {
real lambda;
}
model {
x ~ exponential(lambda);
}
"
fit <- stan(
model_code = stan_code,
data = list(N = length(a), x = a))
fit
#Inference for Stan model: b690462e8562075784125cf0e71c81e2.
#4 chains, each with iter=2000; warmup=1000; thin=1;
#post-warmup draws per chain=1000, total post-warmup draws=4000.
#
# mean se_mean sd 2.5% 25% 50% 75% 97.5% n_eff Rhat
#lambda 1000.21 0.80 31.11 941.86 978.74 998.95 1020.84 1062.97 1502 1
#lp__ 5907.27 0.02 0.66 5905.52 5907.09 5907.53 5907.71 5907.75 1907 1
#
#Samples were drawn using NUTS(diag_e) at Sun Nov 4 01:09:40 2018.
#For each parameter, n_eff is a crude measure of effective sample size,
#and Rhat is the potential scale reduction factor on split chains (at
#convergence, Rhat=1).
我们执行Kolmogorov-Smirnov检验,以比较a
的经验分布和根据先前Stan模型估计的lambda
的指数分布
ks.test(a, "pexp", summary(fit)$summary[1, 1])
#
# One-sample Kolmogorov-Smirnov test
#
#data: a
#D = 0.021828, p-value = 0.7274
#alternative hypothesis: two-sided
当 p 值为0.72时,我们失败拒绝从两个不同分布中抽取样本的原假设。
要清除评论中的讨论,
straightforward(以及更加透明的IMO)证明了指数分布族在缩放时被正因子封闭,而不必调用整个度量理论机器。
更重要的是,让我们回想一下,任何概率密度函数都定义为
phi(x) = p(x) * N
其中
N = int p(x)
将积分取到p(x)
的样本空间中,使得
int phi(x) = 1.
是的,p(x)
和phi
的表达式都是相同的N
。这里是重要的部分: N
仍然是一个常数,因为我们在整个样本空间中进行求和(积分)。
等效地,我们通过(已)抽取样本的恒定总和对从指数分布抽取的样本进行归一化。