一、随机变量和增点的稠密性以及一般测度下卷积的效果


第一个问题来自费勒的《概率论及其应用(第2卷)》中的一个引理,书里的证明并不完整,因此我趁此机会将其补充完整。之所以选择这个问题是因为它引发了我关于卷积以及极限定理的一些思考。我们知道,卷积的概率意义就是独立随机变量和的分布。在分析的观点里,卷积可以提高函数的正则性,简单的例子就是两个阶梯函数做一下卷积就变成连续函数了,一个光滑函数去卷任意一个可积函数,那个可积函数就立马变光滑了,所以这样观察下来似乎可以认为卷积就是让函数的连续性和光滑性增强。
但是这实际上忽略了一个问题,就是在分析里面我们定义的卷积都是在勒贝格测度的意义下的,然而在概率论里面我们使用的是一般的有限测度。举一个例子,在伯努利分布的中心极限定理中,伯努利分布用的是离散测度,它的分布函数是在-1和1两个点跳跃的阶梯函数,在离散测度下面不管它做多少次卷积运算,分布函数始终是阶梯函数(多项分布)。最后能逼近正态分布是合理的,但并不是因为卷积让函数变得光滑,而是因为阶梯函数本来就可以逼近光滑函数。于是我开始思考卷积这种运算的本质,最后是受到下面这个定理的启发。

为了讨论更一般的情形,我们定义一个更一般形式的卷积。

定义1:设独立随机变量X和Y的分布函数分别为F和G,定义X+Y的分布函数为\({F}\star{G}\),称为F和G的卷积。

下面陈述问题。

\(F\)\(\mathbb{R}\)一个分布,\(\Sigma\)\(F^{\star},F^{2\star},\cdots\)的所有增点的集合。
(1)若\(F\)集中在非负半轴但不退化到原点,则当\(F\)不是算术(格点)分布时,\(\Sigma\)在无穷远处渐近稠密;当\(F\)为步长为\(\lambda\)的算术分布时,对充分大的\(n,\Sigma\) 包含所有的\(\{n\lambda\}\).
(2)若\(F\)不集中在某一半轴,则当\(F\)不是算术分布时,\(\Sigma\)在整个实轴上稠密;当\(F\)为步长为\(\lambda\)的算术分布时,\(\Sigma=\{0,\pm{\lambda},\cdots\}\).

证明:直接通过定义可以验证:如果\(a,b\)分别是分布函数\(F,G\)的增点,那么\(a+b\)\(F\star G\)的增点。反之,\(F\star G\)的所有增点都是\(a+b\)这种形式的,所以\(\Sigma\)对加法封闭。
根据这个结论,若\(F\)是步长为\(\lambda\)的算术分布,那么\(\Sigma\subset\{n\lambda,n\in\mathbb{Z}\}\),所以此时\(\Sigma\)不可能稠密。先考虑(1),由于\(F\)不退化到原点,故\(\Sigma\)包含无穷多个元素,任取\(0<a<b\in\Sigma\),令\(h=b-a\).先证明\((1^\circ)\)要使\(\Sigma\)稠密,只需要\(h\)可以任意小就行。再证明\((2^\circ)\)如果\(h\)不可以任意小,那么\(F\)是算术分布,于是当\(F\)不是算术(格点)分布时,\(\Sigma\)在无穷远处渐近稠密。
\(I_n=(na,nb]\),

\(N\in\mathbb{N}\)足够大,使\(\forall{n}\geq{N},|I_n|>a\),于是\((n+1)a\in{I_n}\).

\(\Rightarrow\forall{x}>Na,\exists{n}\geq{N},x\in{I_n}\).

另一方面,\(na+kh=(n-k)a+kb\in\Sigma,\forall{n\geq{N}},1\leq{k}\leq{n}\),

这些点将区间\(I_n(n\geq{N})\)划分成了长度为\(h\)的子区间,\(x\)必然落在这些子区间里面。

\(\Rightarrow\forall{x}>Na,\exists{y}\in\Sigma,|x-y|\leq\frac{h}{2}.(\ast)\).

\(1^\circ.\)\(\forall\varepsilon>0,\exists{a,b}\in\Sigma,s.t.h<\varepsilon\),那么由\((\ast)\)式知\(\Sigma\)在无穷远处渐近稠密.

\(2^\circ\)\(\exists\varepsilon_0>0,\forall{a,b}\in\Sigma,h\geq\varepsilon_0\),那么可以取\(a,b\in\Sigma\),使\(h<2\varepsilon_0\),否则用\(2\varepsilon_0\)代替\(\varepsilon_0\).于是由\((\ast)\)式知

\(I_n\subset\{na+kh|k\in\mathbb{N}\},\forall{n}\geq{N}\).

\(\Rightarrow (N+1)a=Na+k_0h,\Rightarrow a=k_0h\)于是在充分远处\(\Sigma_{\geq Na}=\{nh|h\geq Nk_0\}\)

这就证明了(1)的后半部分,另一方面,

\(\Rightarrow\forall c为F的增点,c\in\Sigma,于是\exists n,s.t.na+c>Na,\Rightarrow na+c=n'a+k'h,\Rightarrow h|c\),即\(F\)是算术分布,且步长\(\lambda=h\)

综合前面的分析可以得到,如果\(F\)不是算术分布,那么\(\Sigma\)在无穷远处渐近稠密,这样就证明了(1)的前半部分。

\(3^\circ\)\(F\)不集中在一个半轴,那么\(\exists -c\in\Sigma\)

于是当\(F\)不是算术分布时,\(\forall x\in\mathbb{R},\exists n,s.t.nc+x>Na\),由\((\ast)\)式和(1),

\(\forall\varepsilon>0,\exists{y}\in\Sigma,|x-y+nc|<\varepsilon,而y-nc\in\Sigma\),故\(\Sigma\)在整个实轴上稠密.

\(F\)为算术分布时,由\(2^\circ\)的论述知\(\lambda|c\),因此\(\{n\lambda,n\in\mathbb{Z}\}\subset\Sigma\),反包含关系开头已经证了,所以\(\{n\lambda,n\in\mathbb{Z}\}=\Sigma\).


关于随机变量和的增点以及卷积在一般测度上的作用的思考:

比如看这样一个例子:

n=400
t<-seq(0,by=0.05,length.out=n)
x<-0.4*(t-5)+rnorm(n)*4
plot(t,x,type="l",ylim=c(-12,12))

y<-x
y[c(1,2,n-1,n)]<-x[c(1,2,n-1,n)]
y[c(3:(n-2))]<-0.2*(x[c(1:(n-4))]+x[c(2:(n-3))]+x[c(3:(n-2))]+x[c(4:(n-1))]+x[c(5:(n))])
plot(t,y,type="l",ylim=c(-12,12))

z<-y
z[c(1,2,n-1,n)]<-y[c(1,2,n-1,n)]
z[c(3:(n-2))]<-0.2*(y[c(1:(n-4))]+y[c(2:(n-3))]+y[c(3:(n-2))]+y[c(4:(n-1))]+y[c(5:(n))])
plot(t,z,type="l",ylim=c(-12,12))

比较这三幅图很容易看出,每次进行一次取平均(实际上就是做了一个离散的卷积)之后,那些大的震荡就很显著地被削去了,而那些大致的趋势被保留下来了。我们可以很容易从后面两幅图看出,哪个时间段它总体上是在往上走的,哪个时间段总体是在往下走的。以及藏在剧烈震荡背后那缓慢的递增趋势也浮现出来。这是符合我们预期的。而这只不过是取了离散五个点的平均就有如此效果,那在勒贝格测度下那种连续的密度下更不必多说。

二、独立条件下的中心极限定理。


第二个话题的选择,是因为在这一学期的概率论学习当中,中心极限定理是我最深入学习的一个部分,一开始看着长达十几页的证明望而生畏,而等到真正理解之后发现一切都相当自然。这部分的内容算是对我这学期概率论学习的一个总结吧,上一个部分内容其实也为此做了一个小小的铺垫。那问题的话,就定为“浅析独立分布情形下中心极限定理”吧。

  相比建立在Borel-Cantelli引理上通过改进不等式精度进行硬估计的大数定律,中心极限定理的推导过程就显得更加优美迷人,无论是条件的得来还是经典的证明方法,每一个都有其显著的概率意义,一旦把这些全部想通,那即便林德贝格条件下的证明也变得相当自然。


  中心极限定理研究的是一个独立随机变量序列的和的分布什么条件下会收敛到正态分布的问题。不同版本的中心极限定理,对随机变量的要求有所不同,证明需要引入的工具也有所不同。但一般都是对各阶矩的收敛性和各个变量在总体中起的作用作出一些限制,这些限制在充要条件的版本中得到了精确的量化描述。

1.关于独立性

  独立条件是古典概率论中的重要假设,在古典中心极限定理中自然也十分重要。而且中心极限定理中的独立条件不像大数定律中的独立条件一样可以比较容易减弱和推广。比如在弱大数定律的证明中,由于只涉及方差等各阶中心矩的计算,所以证明过程中实际上只需要用到变量的不相关性而并不需要独立性。这是因为大数定律实际上只对一个点做出了估计,而中心极限定理要解决的是整个分布的渐近性态,独立性在其中就起了非常大的作用。因为有了独立性之后,随机变量和对应的卷积运算就是特征函数的乘积运算了,卷积不好处理,化成乘积就变成数学分析的问题了。

2.关于收敛

  中心极限定理中的收敛说的是分布函数的收敛。然而,如果要求分布函数的收敛是点态收敛或者强收敛就太严苛了,因为这会使得很多本来在实际中有应用价值的情形无法适用,也会使得一些得到的结论并不符合我们的直观。比如对于格点分布,在上一部分已经证明了它的无穷卷积依然是格点分布,所以其实只需要关心那些格点的状态而不需要分析整个空间。所以在说分布函数的收敛时,考虑的其实是弱收敛。赋范线性空间\(X\)中的序列{\(f_n\)}弱收敛到\(f\)在分析里的定义是说\(X\)上的所有的有界线性泛函作用在{\(f_n\)}后都收敛,但是由于分布函数本身单调有界的性质,这个定义可以被转化为{\(f_n\)}在\(f\)所有连续点收敛到\(f\)。到这里会有两个问题要处理,一是弱收敛之后的函数是否还是分布函数,单调性和右连续是自然满足的,但要保证概率不亏损则要附加一定条件;另一个问题是对于这种弱收敛我们有没有一种更方便的刻画。下面的连续性定理就回答了这两个问题,一是给出了保证极限分布不亏损的条件,这个条件对于正态分布是天然满足的;二是揭示了分布函数的弱收敛其实对应着特征函数的点态收敛。这个结果是十分漂亮的,不仅再次说明了特征函数在概率论中的有力应用,而且证明是基于一般的概率测度,比分析中基于勒贝格测度的反演是更进一步的。

连续性定理:
(1)若分布函数列\(\{F_n(x)\}\)弱收敛于某一分布函数\(F(x)\),则相应的特征函数列\(\{f_n(t)\}\)内闭一致收敛于\(f(t)\).
(2)若特征函数列\(\{f_n(t)\}\)收敛于某个\(f(t)\),且\(f(t)\)在原点连续,则相应的分布函数列\(\{F_n(x)\}\)弱收敛于分布函数\(F(x)\),且\(F(x)\)的特征函数是\(f(t)\).

3.一般的证明思路

  要证明一个分布收敛到另外一个分布,我们实际上就是要找到可以几乎完全刻画这个分布的数字特征,证明它收敛到正态分布的数字特征,然后由数字特征的收敛反过来导出原来分布的收敛。数字特征可以由期望构造,而构造的出发点就是标准化随机变量和\(\{Z_N\}\)的形式,\(Z_N\)本质上是一个随机变量和的分布,而和的分布对应于卷积运算,所以我们构造数字特征的时候必需处理掉卷积运算,特征函数只是其中一种方式,我觉得下面的推导可以给出一个更一般意义上的形式,从这也可以看出独立性在其中起的重要作用。

首先如果\(X\)\(Y\)相互独立,我们有\(EXY=EXEY\),其次对任意的可测函数\(f(X)\)\(g(Y)\),也是相互独立的,于是我们可以利用指数函数将变量和化为变量乘积以应用上式,则\(Ee^{t(X+Y)}=E[e^{tX}\cdot e^{tY}]=Ee^{tX}Ee^{tY}\),这就是在研究这个问题时最早使用的矩母函数,我们可以将t替换成任意其他的东西。由于\(Ee^{tX}\)的收敛性对分布函数的要求较高,所以我们才想到要到复数域上去处理问题。通过引入虚数单位,指数上的增长变成了震荡,震荡过程中的积分抵消使得每个变量的\(Ee^{itX}\)是收敛的,所以用特征函数来处理这个问题可以使得结论更加普遍。

  各个步骤的操作思路大体上也是一样的,主要还是是对高频的部分和低频的部分分开估计。高频的部分的处理类似于Markov不等式,低频的部分则使用一般的估计。

4.矩的收敛性对于分布收敛的影响

  由于概率测度是有限测度,所以根据赫尔德不等式,高阶矩存在是可以推出低阶矩存在的。在中心极限定理中,一般会要求二阶矩(也就是方差)存在,这是因为我们对特征函数做泰勒展开的时候,展开到\(x^2\)那一项就可以保证最后的极限可以求出,而peano余项并不依赖于更高阶矩的存在,所以我们其实只需要对二阶矩做出限制就可以保证最后的收敛性。要求方差存在的另一个目的是为了做变量标准化,使得最后的极限分布会收敛到标准正态分布。不过既然有变量标准化的手段,我们又可以适当对方差有限的结论弱化,因为对于某些方差不存在的场合我们依然可以通过乘一个适当的系数使得它的极限分布的方差反而有限。虽说高阶矩(三阶及以上)对最后是否收敛并不会有影响,但是却控制着最后那个无穷小项收敛到零的速度。这在实际应用中十分重要,因为收敛的速度会决定误差的大小和检验方法的可信程度。在独立同分布样本有限的情况下,收敛速度越快,认为它们服从正态分布最后得到的结果可信程度就会越高。所以实际上我们应该还要要求三阶矩存在,这样的话从展开式就可以看出收敛速度大概是\(\sqrt{n}\)的阶。简单而言就是低阶矩控制收敛性,高阶矩控制收敛速度。

4.1关于变量标准化

  变量标准化大致有两个目的,一是使得极限分布的方差存在;二是使得增点稠密。

(方差不存在时的例子)\(\{X_n\}\)独立同分布,若\[F(-x)=1-F(x)(x\in\mathbb{R}),2F(-x)=x^{-2}(x\geq 1)\]\(\{\frac{S_n}{\sqrt{nlnn}}\}\)收敛于标准正态分布。

5.定理条件的一般刻画

  中心极限定理的条件千奇百怪,但总的来说只有两个目的:一是保证特征函数的收敛性,二是保证各加项均匀地小,也就是每个变量在总的分布中不起太大的作用(或者说个体特征在群体中无法体现)。前者依靠对各阶矩的收敛性做出限制,后者则由林德贝格给出了量化描述。在独立同分布的场合,由于每个变量起的作用是一样的,所以后者是自动满足的,因此只需要对各阶矩进行限制。对于独立不同分布的场合,额外的条件都是为了后面的条件得到满足。在证明的过程中,各加项均匀地小实际上使得高频的部分可以被控制住。

5.1关于林德贝格条件

  林德贝格条件告诉我们,满足方差存在以及各加项均匀地小的独立随机变量叠加起来会满足正态分布。但是各加项均匀地小其实只是一个充分条件,而非必要条件,因为即使有一个随机变量个体在群体中起了支配作用,只要这个随机变量它是正态变量,那依然有机会使得总体分布表现为正态分布。比如\(X_n\backsim N(0,2^n)\),显然不满足各加项均匀地小,但是叠加在一起还是正态分布。因此要避免这种情况发生,就要对随机变量附加费勒条件,这样林德贝格条件就也是必要条件了。林德贝格条件虽然给出了各加项均匀地小的量化描述,但在实际问题中这是不易于验证的,不过由于它是充要条件,所以对于其他条件的中心极限定理,我们就不需要重复证明,只需要验证林德贝格条件是否满足就行。基于此可以得到一些在实际应用中更易于检验的充分条件。

6.直观的解释

6.1信息论的启发

通过计算推导和逻辑论证,我们确实证明了独立分布和最终会收敛到正态分布,但是有没有可能省去那些繁杂的步骤给出一个直观解释呢?直观地想,变量的增加是会导致不确定性的增加的,而在课本中“熵与信息”这一节中提到了这么一个定理:“在方差固定的情况下,正态分布的熵是最大的。”所以当我们把变量个数不断增加,系统将逐渐趋于最“混乱”的正态分布。基于上述讨论和以下引理,我有一个猜想,不过尝试之后被我否定掉了。

引理:若非负随机变量的密度函数为\(p(x)\),均值为\(a\),那么当分布为指数分布的时候熵达到最大。

猜想:均值为a的非负独立同分布随机变量和的分布收敛与指数分布。

  但是通过分析同分布的情形之后就发现了很大困难。主要在于变量标准化:如果想保持均值不变,会导致方差趋于0(大数定律);而想保持方差不变,又会使均值趋于无穷;为了保持变量的非负性,又不能像中心极限定理那样把均值置零。解决方案应该有两种,一是优化变量标准化的形式,二是对随机变量序列做出一些特殊的限制。但是这样处理之后最终都会回到中心极限定理上面,所以应该是无法仅仅通过类推建立类似于正态分布的结论的。

6.2特征函数的临界

  可以证明:\(f(t)=\exp(-|t|^\alpha)\)\(0<\alpha\leq2\)时为特征函数,而当\(\alpha>2\)时不是特征函数。故正态分布的特征函数也是某种意义上的临界值。

三、重对数律

重对数律是介于中心极限定理和大数定律之间的极限定理。要估计\(S_n=X_1+\cdots +X_n在n\to\infty\)时候概率点集的范围,由大数定律保证了这个范围的宽度应该是\(o(n)\)级别的,但这个范围太过粗糙;由中心极限定理知道,大部分点会落在一个\(6\sigma\sqrt{n}\)的范围里面,但这不能把所有点囊括进来。介于两者之间的重对数律,则是给了这个范围一个更加精确的估计。

命题:设\(X_1,X_2,\cdots\)为独立同分布的随机变量,且均值为0,方差为1。令\(S_n=X_1+\cdots +X_n\),则随机变量序列 \[ \{\frac{S_n}{\sqrt{2n \mathrm{lnln}n}}\}_{n\geq 1} \] 的概率点集依概率1重合于[-1,1].

  这个命题应该是指出了这是最佳估计,也就是要证明: \[ \tag 1 P\Big(\limsup_{n\to\infty}\Big|\frac{S_n}{\sqrt{2n\ln\ln n}}\Big|=1\Big)=1 \]

\(A_n=\{{S_n}> c\sqrt{2n\ln\ln n}\},c>0\),那么根据\(S_n\)的对称性,要证的式子就等价于(2)式: \[ \tag 2 P\{A_n\ i.o.\}=\begin{cases} 0,c>1\\ 1,0<c<1 \end{cases} \] 根据\(Borel-Cantelli\)引理,要证明(2)式的第一部分,只需要证明(3)式: \[ \tag 3 \sum P(A_n)<\infty,\forall c>1 \] 而对(2)的第二部分,要使用\(Borel-Cantelli\)引理,则需要保证事件序列的独立性。注意到随机变量序列\(\{S_{n_k}-S_{n_{k-1}}\}\)是相互独立的,为此可以构造独立的事件序列\(\{B_{n_k}\}\) \[ B_{k,\delta} =\{S_{n_k}-S_{n_{k-1}}>(1-\delta){\sqrt{2m_k\ln\ln m_k}}\},m_k=n_k-n_{k-1} \] 只要证明\(\forall 0<c<1\),都可以找到一个合适的子列\(\{n_k\}\)\(\delta>0\),使得 \[ \tag 4 P(A_{n_k}\ i.o.)\geq P(B_{k,\delta}\ i.o.) \] 再根据: \[ \tag 5 P(A_n\ i.o.)\geq P(A_{n_k}\ i.o.) \]

那么根据\(Borel-Cantelli\)引理,要证明(2)的后半部分,就只需要证明(6)式: \[ \tag 6 \sum P(B_{k,\delta}\ i.o.)=\infty,\forall 0<\delta<1 \] 因此问题化归为对(3)(4)(6)的证明。先分析(3),对\(P(A_n)\)本身很难做比较好的估计,为了应用一系列的极大不等式,考虑先将其放大: \[ \begin{aligned} P(A_n\ i.o.)&=P\{{S_n}> c\sqrt{2n\ln\ln n}\ \ i.o.\}\\ &\leq P\{\max_{j\leq n_{k+1}}{S_j}> c\sqrt{2n_k\ln\ln n_k}\ \ i.o.\}\\ &\leq 2P\{S_{n_{k+1}}>c\sqrt{2n_k\ln\ln n_k}-\sqrt {n_{k+1}}\ \ i.o.\}\\ \end{aligned} \] 这对任意的子序列\(\{n_k\}\)是成立的,最后一个不等式的估计用到了莱维极大不等式(7)和赫尔德不等式估计(8): \[ \tag 7 P\{\max_{k\leq n}{S_k}\geq a\}\leq 2P\{S_n>a-\mathbb E|S_n|\},\forall a>0 \] \[ \tag 8 (\mathbb E|S_n|)^2\leq\mathbb ES_n^2=n \] 因此要证明(3),只需要找到一个子序列\(\{n_k\}\),使得 \[ \sum P\{S_{n_{k+1}}>c\sqrt{2n_k\ln\ln n_k}-\sqrt {n_{k+1}}\}<\infty \] 注意到只要\(\frac{n_{k+1}}{n_k}\)是有界的,那么\(\forall c_1\in(1,c)\),当\(k\)充分大的时候有: \[ P\{S_{n_{k+1}}>c\sqrt{2n_k\ln\ln n_k}-\sqrt {n_{k+1}}\}\leq P\{S_{n_{k+1}}>c_1\sqrt{2n_k\ln\ln n_k}\} \] 再选取\(c_2=\frac{1+c_1}{2},n_k=[c_2^k](k\gg 1)\),就有 \[ P\{S_{n_{k+1}}>c_1\sqrt{2n_k\ln\ln n_k}\}\leq P\{S_{n_{k+1}}>c_2\sqrt{2n_{k+1}\ln\ln n_{k+1}}\} \] 于是(3)最终转化为证明(9), \[ \tag 9 \sum P\{S_{n_k}>c_2\sqrt{2n_k\ln\ln n_k}\}<\infty,n_k=[c_2^k] \] 根据独立同分布的中心极限定理和\(Berry-Esseen\)不等式的估计,,当\(\{n_k\}\)是指数正增长时, \[ \tag {10}\sum P\{S_{n_k}>c_2\sqrt{2n_k\ln\ln n_k}\}<\infty\Leftrightarrow \sum_k 1-\Phi(\frac{c_2\sqrt{2\ln\ln n_k}}{\mathbb E (X_{n_k}^21_{|X_{n_k|<\sqrt{n_k}}})})<\infty \] 根据课本第五章作业题的如下估计式: \[ \frac{x}{1+x^2}\mathrm e^{-x^2/2}\leq\int_x^\infty \mathrm e^{-t^2/2}\mathrm dt\leq\frac{1}{x}\mathrm e^{-x^2/2} \] 所以当\(k\to\infty\)时, \[ \tag{11} 1-\Phi(\frac{c_2\sqrt{2\ln\ln n_k}}{\mathbb E (X_{n_k}^21_{|X_{n_k|<\sqrt{n_k}}})})\backsim\frac{\mathbb E (X_{n_k}^21_{|X_{n_k|<\sqrt{n_k}}})}{2c_2\sqrt{\pi \ln \ln n_k}}(\ln n_k)^{-c_2^2}\backsim O(\frac{1}{k^{-c_2^2}}) \] 因此根据(10)和(11),(9)式成立。下面证明命题的第二部分,即(4)和(6)。先对(6)做估计, \[ P\{S_{n_k}-S_{n_{k-1}}>(1-\delta){\sqrt{2m_k\ln\ln m_k}}\}=P\{S_{m_{k-1}}>(1-\delta){\sqrt{2m_k\ln\ln m_k}}\} \] 为了应用(10),只需要在选取选取\(\{n_k\}\)时使\(\{m_k\}\)呈指数正增长。然后在k充分大时又有 \[ \mathbb E (X_{n_k}^21_{|X_{n_k|<\sqrt{n_k}}})>1/2 \] 因此根据(11)式就得到(6)式成立。要使\(\{m_k\}\)呈指数正增长,只需要\(\{n_k\}\)呈指数正增长,设\(n_k=[a^k],a>1\)对选定的\(0<c<1\),要使(4)式成立,只需要在k充分大时有 \[ \tag {12} c\sqrt{n_k\ln\ln n_k}<(1-\delta)\sqrt{m_k\ln\ln m_k} \] 只需要 \[ (\frac{c}{1-\delta})^2<1-\frac{1}{a} \]\(\delta=\frac{1-c}{2},a=[\frac{4}{(c+1)^2-4c^2}]+1\)即可,于是就证明了最终命题。

四、概率模型的模拟:赌徒破产

问题陈述与分析

1.原始陈述:假设我一开始有本金\(N_0(\geq 1)\)元,在赌场每一局有概率\(p\)赢1元,概率\(1-p\)输1元,我把本金输光或者赢到总共有\(N(>N_0)\)元时离开。

2.问题提出

(1)我会不会死在赌场里出不来了?也就是说我是不是一定可以在有限局内输光或者赢够?

(2)我赢够钱走出赌场的概率是多少?如果(1)是对的,那么我输光钱走出赌场的概率一个就是这个的互补概率。

(3)考虑到确实有可能赌到死都出不来,那我们还是多加一个终止状态:达到一定局数时也离开赌场。这个局数应该和目标相匹配,比如就设最大局数\(M_k=\max\{kN,100\},k\in\mathbb Z\)。那自然可以问,当\(k\)取什么值的时候,我有\(99\%\)以上的把握在\(M_k\)局之前离开赌场,赢够离开和输够离开的概率分别是多少?

(4)更进一步,可以考虑一点玄学成分:赢钱的概率不总是\(p\),如果前面两场都赢了,那么下一场赢的概率会提高为\(p+0.1\);反之,如果前两场都输了,那么下一场赢的概率会降低为\(p-0.1\)。在这个情况下再考虑上面三个问题。概率会变大还是变小(直观上输出来的概率会变大,假设p<0.5),临界的\(k\)会变大还是变小(直观上应该是变小)。

3.问题分析

    下面会利用程序模拟和数学论证两个方面解决上面几个问题,那么需要相应地对问题进行重述和简化。

用计算机做如下模拟:

  • a.设\(N_0=10,N=20,p=0.45\),不考虑概率变动与最大局数,模拟10000次,记录每次终止的局数与终止状态(“WIN”or”LOSE”),近似计算问题(2)中的概率。
  • b.设\(N_0=10,N=20,p=0.45\),考虑概率变动,不考虑最大局数,同样模拟10000次,近似计算问题(2)中的概率。
  • c.改变参数组\((N_0,N,p)\),重复a.和b.

原理分析的部分放在计算机模拟之后。

计算机模拟

对情形a.进行模拟,画出实验结果的散点图

a<-seq(from=0,to=0,length.out=10000)
win=seq(from=0,to=0,length.out=10000)
for(i in c(1:10000)){
      money=10
      N=20
      p=0.45
      n=0
      while(money>0 && money<N)
        {
        n<-n+1
        x<-runif(1,0,1)
        if(x<p) money<-money+1
        else money<-money-1
        }
      a[i]=n
      if(money==N) win[i]<- 1
}
result<-factor(win,levels = c(0,1),labels = c("LOSE","WIN"))
{print("总共进行了10000次试验,结果为:")
print(table(result))
print("平均每次实验需要进行的游戏局数为:")
cat(mean(a))
cat('\n')
print("需要进行的游戏局数大于200的概率为:")
cat(length(which(a>200))/100,'%')}
## [1] "总共进行了10000次试验,结果为:"
## result
## LOSE  WIN 
## 8850 1150 
## [1] "平均每次实验需要进行的游戏局数为:"
## 75.847
## [1] "需要进行的游戏局数大于200的概率为:"
## 4.21 %
plot(a,xlab = "实验次数",ylab = "总局数",main="实验结果",panel.first = grid(10,50,col='grey'))

从分布图和数据结果可以看出,基本上玩200局就可以结束,所以上面我们担心的问题(3)似乎没有必要,之后再对此进行论证。另外,就是在这种情况下,我输光的概率已经接近90%了,真的十赌九输,大家别去赌了。

下面考虑情形b,需要在循环中添加一个判断语句。

a<-seq(from=0,to=0,length.out=10000)
win=seq(from=0,to=0,length.out=10000)
for(i in c(1:10000)){
      money=10
      N=20
      p=0.45
      judge<-c(2,2);up=c(1,1);down=c(0,0)
      n=0
      while(money>0 && money<N)
        {
        n<-n+1
        x<-runif(1,0,1)
        if(all(judge==down)){
          if(x<p-0.1) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        else if(all(judge==up)){
          if(x<p+0.1) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        else {
          if(x<p) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        }
      a[i]=n
      if(money==N) win[i]<- 1
}
result<-factor(win,levels = c(0,1),labels = c("LOSE","WIN"))
{print("总共进行了10000次试验,结果为:")
print(table(result))
print("平均每次实验需要进行的游戏局数为:")
cat(mean(a),'\n')
print("需要进行的游戏局数大于200的概率为:")
cat(length(which(a>200))/100,'%')}
## [1] "总共进行了10000次试验,结果为:"
## result
## LOSE  WIN 
## 8465 1535 
## [1] "平均每次实验需要进行的游戏局数为:"
## 57.6468 
## [1] "需要进行的游戏局数大于200的概率为:"
## 1.36 %
plot(a,xlab = "实验次数",ylab = "总局数",main="实验结果",panel.first = grid(10,50,col='grey'))

,考虑概率变动之后,需要进行的游戏局数明显减少了,这和我们直观是相符的;而我赢钱的概率反而上升了,这让我有点吃惊,这应该和参数设置有关,那接下来改变一下参数来进行模拟。

\((N_0,N,p)=(20,35,0.45)\),不考虑概率变动

a<-seq(from=0,to=0,length.out=10000)
win=seq(from=0,to=0,length.out=10000)
for(i in c(1:10000)){
      money=20
      N=35
      p=0.45
      n=0
      while(money>0 && money<N)
        {
        n<-n+1
        x<-runif(1,0,1)
        if(x<p) money<-money+1
        else money<-money-1
        }
      a[i]=n
      if(money==N) win[i]<- 1
}
{result<-factor(win,levels = c(0,1),labels = c("LOSE","WIN"))
print("总共进行了10000次试验,结果为:")
print(table(result))
print("平均每次实验需要进行的游戏局数为:")
cat(mean(a))
cat('\n')
print("需要进行的游戏局数大于400的概率为:")
cat(length(which(a>400))/100,'%')}
## [1] "总共进行了10000次试验,结果为:"
## result
## LOSE  WIN 
## 9501  499 
## [1] "平均每次实验需要进行的游戏局数为:"
## 183.5923
## [1] "需要进行的游戏局数大于400的概率为:"
## 5.69 %
plot(a,xlab = "实验次数",ylab = "总局数",main="实验结果",panel.first = grid(10,50,col='grey'))

战线拉越长,输得更彻底。所谓“小赌怡情,大赌伤身”。

\((N_0,N,p)=(20,35,0.45)\),考虑概率变动

a<-seq(from=0,to=0,length.out=10000)
win=seq(from=0,to=0,length.out=10000)
for(i in c(1:10000)){
      money=20
      N=35
      p=0.45
      judge<-c(2,2);up=c(1,1);down=c(0,0)
      n=0
      while(money>0 && money<N)
        {
        n<-n+1
        x<-runif(1,0,1)
        if(all(judge==down)){
          if(x<p-0.1) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        else if(all(judge==up)){
          if(x<p+0.1) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        else {
          if(x<p) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        }
      a[i]=n
      if(money==N) win[i]<- 1
}
result<-factor(win,levels = c(0,1),labels = c("LOSE","WIN"))
{print("总共进行了10000次试验,结果为:")
print(table(result))
print("平均每次实验需要进行的游戏局数为:")
cat(mean(a),'\n')
print("需要进行的游戏局数大于400的概率为:")
cat(length(which(a>400))/100,'%')}
## [1] "总共进行了10000次试验,结果为:"
## result
## LOSE  WIN 
## 9212  788 
## [1] "平均每次实验需要进行的游戏局数为:"
## 141.3968 
## [1] "需要进行的游戏局数大于400的概率为:"
## 2.19 %
plot(a,xlab = "实验次数",ylab = "总局数",main="实验结果",panel.first = grid(10,50,col='grey'))

仍然是胜率变高,局数减少。

\((N_0,N,p)=(10,20,0.4)\),不考虑概率变动

a<-seq(from=0,to=0,length.out=10000)
win=seq(from=0,to=0,length.out=10000)
for(i in c(1:10000)){
      money=10
      N=20
      p=0.4
      n=0
      while(money>0 && money<N)
        {
        n<-n+1
        x<-runif(1,0,1)
        if(x<p) money<-money+1
        else money<-money-1
        }
      a[i]=n
      if(money==N) win[i]<- 1
}
result<-factor(win,levels = c(0,1),labels = c("LOSE","WIN"))
{print("总共进行了10000次试验,结果为:")
print(table(result))
print("平均每次实验需要进行的游戏局数为:")
cat(mean(a))
cat('\n')
print("需要进行的游戏局数大于200的概率为:")
cat(length(which(a>200))/100,'%')}
## [1] "总共进行了10000次试验,结果为:"
## result
## LOSE  WIN 
## 9807  193 
## [1] "平均每次实验需要进行的游戏局数为:"
## 48.7442
## [1] "需要进行的游戏局数大于200的概率为:"
## 0.24 %
plot(a,xlab = "实验次数",ylab = "总局数",main="实验结果",panel.first = grid(10,50,col='grey'))

\((N_0,N,p)=(10,20,0.4)\),考虑概率变动

a<-seq(from=0,to=0,length.out=10000)
win=seq(from=0,to=0,length.out=10000)
for(i in c(1:10000)){
      money=10
      N=20
      p=0.4
      judge<-c(2,2);up=c(1,1);down=c(0,0)
      n=0
      while(money>0 && money<N)
        {
        n<-n+1
        x<-runif(1,0,1)
        if(all(judge==down)){
          if(x<p-0.1) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        else if(all(judge==up)){
          if(x<p+0.1) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        else {
          if(x<p) {money<-money+1;judge=c(judge[2],1)}
          else {money<-money-1;judge=c(judge[2],0)}
        }
        }
      a[i]=n
      if(money==N) win[i]<- 1
}
result<-factor(win,levels = c(0,1),labels = c("LOSE","WIN"))
{print("总共进行了10000次试验,结果为:")
print(table(result))
print("平均每次实验需要进行的游戏局数为:")
cat(mean(a),'\n')
print("需要进行的游戏局数大于200的概率为:")
cat(length(which(a>200))/100,'%')}
## [1] "总共进行了10000次试验,结果为:"
## result
## LOSE  WIN 
## 9672  328 
## [1] "平均每次实验需要进行的游戏局数为:"
## 38.9218 
## [1] "需要进行的游戏局数大于200的概率为:"
## 0.05 %
plot(a,xlab = "实验次数",ylab = "总局数",main="实验结果",panel.first = grid(10,50,col='grey'))

仍然是胜率变高,局数减少。

  • 虽然上面的模拟没有考虑更复杂的情形:对赌局的结果只做了赢一倍和输一倍两个假设,但这实际上已经可以反映大体情形了。因为在赌场赢钱的期望总是为负,所以我们上面也总是假设p<0.5。

原理分析

(因为主要是模拟,所以论证的部分稍微简略)

先对问题(1),我们设置的情境是一个Markov过程,很容易看出\([0,N]\)中每个状态都是可达的,所以有限步之后被终止状态吸收的概率为1。

然后问题(2),只需要计算赢够的概率:这和问题(3)可以放在一起考虑,考虑概率转移矩阵\(P\)\(n\)次幂第\(N_0+1\)行,首尾的概率和总是趋近1。解首尾概率和大于99%的不等式,就可以得到k的估计。该行最后一个元素就收敛到要求的概率。用MATLAB试过可以完成计算。

问题(4)还没怎么想清楚,目前想到的办法就是用计算机遍历一下,或者把不同情况考虑进来,写一个更大的转移矩阵,然后同样计算n次幂。