【python讲概率】S05E06 多元正态分布及其性质

在前面的章节中,我们介绍了多元随机变量的有关概念,重点围绕着多元随机变量的联合概率、条件与边缘概率分布以及独立性和相关性,阐述了多元随机变量之间的关系,这些都是多元随机变量重点需要关注和研究的问题。在上述理论知识的基础之上,我们在这一小节里以多元正态分布作为实际例子,让大家能够更直观的理解和强化这些概念和方法。

1.再谈相关性:基于多元正态分布

很简单,我们举一个例子,之前我们介绍过随机变量的正态分布,这里我们引入多元随机变量的正态分布:

如果向量$Z$由若干个遵从标准正态分布的独立同分布随机变量 $Z_1,Z_2,...,Z_n$组成,那么我们就说向量$Z$遵从$n$元标准正态分布。

1.1.二元标准正态分布

为了便于讨论,我们这里主要讨论二元随机变量的情况。由随机变量$X$和$Y$组成的二元标准正态分布中,随机变量$X$和$Y$都服从均值为$0$,方差为$1$的标准正态分布,并且随机变量$X$和$Y$之间的协方差为$0$。其协方差矩阵为:$\begin{bmatrix} 1&0\\0&1\end{bmatrix}$。

我们利用$python$来生成服从二元标准正态分布的随机变量$X$和$Y$,并且通过可视化的方式进行观察。

代码片段:

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

mean = np.array([0, 0])
conv = np.array([[1, 0],
                 [0, 1]])

x, y = np.random.multivariate_normal(mean=mean, cov=conv, size=5000).T
plt.figure(figsize=(6, 6))
plt.plot(x, y, 'ro', alpha=0.2)
plt.gca().axes.set_xlim(-4, 4)
plt.gca().axes.set_ylim(-4, 4)
plt.show()

在代码中,我们生成了各自均值为$0$,方差为$1$,随机变量间的协方差为$0$的二元标准正态分布随机变量$X$和$Y$,一共生成$3000$组样本,我们实际观察一下可视化的结果。

运行结果:

图1.二元标准正态分布样本示意图

图1.二元标准正态分布样本示意图

从图中我们发现,在均值点(这里对应的是原点)附近,样本出现的概率较高(我们设置的样本点的透明度为$0.2$,因此颜色越深意味着样本点的个数越多),远离均值点的地方样本出现的概率较低,并且无论向任何方向,总体上概率没有表现出太大区别。

1.2.二元一般正态分布

我们通过调整参数,可以逐渐将二元标准正态分布变换为二元一般正态分布。我们可以调整的参数主要有以下三个方面:

第一:调整多个随机变量自身的均值,这样是让样本整体在二维平面上进行平移,这个很简单,我们就不多说了。

第二:调整随机变量$X$,$Y$自身的方差,当然此时我们还是保留他们互相之间彼此独立的关系,我们来观察一下样本图像的特点。

与标准二元正态分布对照,我们设定随机变量$X_2$的方差为$4$,$Y_2$的方差为$0.25$,对比观察一下:

代码片段:

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

mean = np.array([0, 0])
conv_1 = np.array([[1, 0],
                 [0, 1]])

conv_2 = np.array([[4, 0],
                 [0, 0.25]])

x_1, y_1 = np.random.multivariate_normal(mean=mean, cov=conv_1, size=3000).T
x_2, y_2 = np.random.multivariate_normal(mean=mean, cov=conv_2, size=3000).T
plt.plot(x_1, y_1, 'ro', alpha=0.05)
plt.plot(x_2, y_2, 'bo', alpha=0.05)

plt.gca().axes.set_xlim(-6, 6)
plt.gca().axes.set_ylim(-6, 6)
plt.show()

运行结果:

图2.彼此独立的二元非标准正态分布示意图

图2.彼此独立的二元非标准正态分布示意图

从图中对比可以看出,蓝色的样本点就是调整了随机变量各自的方差,但保持随机变量$X$和$Y$之间协方差为$0$的样本分布。

第三:就是调整协方差。我们保持随机变量各自的方差不变,通过改变协方差的值,来观察协方差的变换给随机变量间的相关特性带来的影响以及在图像上的反映。

代码片段:

import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

fig, ax = plt.subplots(2, 2)
mean = np.array([0,0])

conv_1 = np.array([[1, 0],
                 [0, 1]])

conv_2 = np.array([[1, 0.3],
                 [0.3, 1]])

conv_3 = np.array([[1, 0.85],
                 [0.85, 1]])

conv_4 = np.array([[1, -0.85],
                 [-0.85, 1]])

x_1, y_1 = np.random.multivariate_normal(mean=mean, cov=conv_1, size=3000).T
x_2, y_2 = np.random.multivariate_normal(mean=mean, cov=conv_2, size=3000).T
x_3, y_3 = np.random.multivariate_normal(mean=mean, cov=conv_3, size=3000).T
x_4, y_4 = np.random.multivariate_normal(mean=mean, cov=conv_4, size=3000).T

ax[0][0].plot(x_1, y_1, 'bo', alpha=0.05)
ax[0][1].plot(x_2, y_2, 'bo', alpha=0.05)
ax[1][0].plot(x_3, y_3, 'bo', alpha=0.05)
ax[1][1].plot(x_4, y_4, 'bo', alpha=0.05)

plt.show()

在代码中,我们生成了四组二元正态分布,其中第一组是作为对照用的二元标准正态分布。第二组的协方差为$0.3$,第三组的协方差为$0.85$,第四组的协方差为$-0.85$。

运行结果:

图3.彼此相关的二元非标准正态分布对比示意图

图3.彼此相关的二元非标准正态分布对比示意图

从运行结果中我们发现,与二元标准正态分布的样本图像呈现为圆形相比,协方差不为$0$的二元正态分布呈现为一定斜率的椭圆图像,并且协方差越大,椭圆越窄。

同时协方差为正和为负,椭圆的方向是相反的,这个很容易理解,分别对应体现了正相关和负相关的关系。

2.聚焦相关系数

有了生成多元正态分布随机变量的方法和可视化手段之后,我们再来从量化的角度回答前面一个小节中提到过的问题:协方差大的两个随机变量,他们之间的相关性一定就大于协方差小的随机变量吗?

我们来看下面这段代码:

代码片段:
```
import numpy as np
import matplotlib.pyplot as plt
import seaborn
seaborn.set()

top Created with Sketch.