中心極限定理與Python圖解

中心極限定理與Python圖解

方差與z-score標準化

方差公式V[X]=E((XE(X))2)V[X]=E\left((X-E(X))^{2}\right),也表示爲σ2=(Xμ)2N\sigma^{2}=\frac{\sum(X-\mu)^{2}}{N}

方差描述的是分佈的離散程度,方差爲0時則X=E(X)X=E(X),即分佈不含有任何隨機的成分。

由於數據加常量後其方差σ2\sigma^2不變,乘以nn後則變爲n2σ2n^2\sigma^2,所以對任何分佈的數據都可以做一個標準化(z-score),使得方差σ2=1\sigma^2=1,期望μ=0\mu=0。具體做法爲:

W=XμσW=\frac{X-\mu}{\sigma}

import numpy as np
import matplotlib.pyplot as plt

X = np.random.rand(1000)

fig, (axs1, axs2) = plt.subplots(1, 2, figsize=(9, 4))

axs1.plot(X, '.')
axs1.set_ylim(-2, 2)

axs2.hist(X, edgecolor='k', alpha=0.8)
plt.show()

print("mean:", np.round(X.mean(), 2), "std:", np.round(X.std(), 2))

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WlwuPYyG-1592485360789)(https://static01.imgkr.com/temp/bf9cd8999ba24d929380bee8f5e8835c.png)]

mean: 0.5 std: 0.29

進行z-score標準化z=xμσz=\frac{x-\mu}{\sigma}操作(證明過程見下一小節)

W = (X - X.mean())/X.std()

mean = W.mean()
std_var = W.std()

fig, (axs1, axs2) = plt.subplots(1, 2, figsize=(9, 4))

axs1.plot(W, '.')
axs1.set_ylim(-2, 2)

axs2.hist(W, edgecolor='k', alpha=0.8)
plt.show()

print("mean:", np.round(W.mean(), 2), "std:", np.round(W.std(), 2))

mean: -0.0 std: 1.0

打印的信息顯示新的數據均值爲0,方差爲1,但是histgram顯示出每個bin(默認10個)的數據數量沒有變化。

z-score證明

假設一組數據{X:x1,x2...xn}\{X: x_1,x_2...x_n\}的均值爲μ=inxin\mu=\sum_i^n\frac{x_i}{n},方差爲σ=in(xiμ)2n\sigma=\sum_i^n \frac{(x_i-\mu)^2}{n},經過z-score標準化的數據{Z:zi=xiμσ}\{Z: z_i=\frac{x_i-\mu}{\sigma}\}

ZZ的均值
E(Z)=inxiμσn=inxinσinμnσ=μσμσ=0\begin{aligned}E(Z) &= \sum_i^n\frac{\frac{x_i-\mu}{\sigma}}{n}\\ &= \sum_i^n\frac{x_i}{n\sigma} - \frac{\sum_i^n\mu}{n\sigma}\\ &= \frac{\mu}{\sigma} - \frac{\mu}{\sigma}\\ &= 0\end{aligned}

ZZ的方差(已經得知μz=0\mu_z=0
V(Z)=in((xiμ)σμz)2n=1σ2in(xiμ)2n=σ2σ2=1\begin{aligned}V(Z) &= \sum_i^n \frac{\left(\frac{(x_i-\mu)}{\sigma} - \mu_z\right)^2}{n}\\ &= \frac{1}{\sigma^2}\sum_i^n\frac{(x_i-\mu)^2}{n}\\ &= \frac{\sigma^2}{\sigma^2} = 1 \end{aligned}

標準正態分佈

對於正態分佈xN(μ,σ2)x \sim N\left(\mu, \sigma^{2}\right),其概率密度函數如下:

f(x)=12πσexp((xμ)22σ2)f(x)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)

如果μ=0,σ=1\mu=0, \sigma=1,則稱爲標準正態分佈xN(μ,σ2)x \sim N\left(\mu, \sigma^{2}\right),概率密度函數簡化爲:

f(x)=12πexp(x22)f(x)=\frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{x^2}{2}\right)

def NormDist(x, mean=0, sigma=1):
    assert(sigma != 0)
    return np.exp(-(x-mean)**2/2)/(np.sqrt(2*np.pi)*sigma)

plt.figure(figsize=(8, 6))

xs = np.linspace(-5, 5, 100)
X = [NormDist(i) for i in xs]
plt.plot(xs, X, '-', label=r'$\frac{1}{\sqrt{2\pi}\sigma}exp(\frac{-x^2}{2})$')

X = [np.exp(-i**2/2) for i in xs]
plt.plot(xs, X, '--', label=r'$exp(\frac{-x^2}{2})$')

X = [np.exp(-i**2) for i in xs]
plt.plot(xs, X, '--', label=r'$exp(-x^2)$')

plt.legend(fontsize=14)
plt.show()

從上圖可以看出:1. 由於x2-x^2的存在使得在0點處左右對稱,並且xx越接近於0越大;2. 而12π\frac{1}{\sqrt{2\pi}}ee的指數除以1/21/2使得其面積(在x軸上積分)爲1,滿足了概率密度函數積分爲1的性質。

z-score變換爲標準正態分佈

正態分佈xN(μ,σ2)x \sim N\left(\mu, \sigma^{2}\right)經過z-score標準化後會變成標準正態分佈。證明過程如下

正態分佈概率密度函數
f(x)=12πσexp((xμ)22σ2)f(x)=\frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right)

其精髓和意義就是通過對f(x)f(x)積分,可以得到xx在任意區間的概率,例如x<kx \lt k的概率:

P(x<k)=k12πσexp((xμ)22σ2)dxP(x \lt k)=\int_{-\infty}^{k} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right) \mathrm{d} x

經過z-score標準化的新數據爲z=xμσz=\frac{x-\mu}{\sigma},那麼z<kz \lt k的概率:

P(z<k)=P(xμσ<k)=P(x<kσ+μ)P(z \lt k) = P\left(\frac{x-\mu}{\sigma} \lt k\right) = P(x \lt k\sigma + \mu)

kσ+μk\sigma + \mu代入積分公式,替換上限kk

P(x<kσ+μ)=kσ+μ12πσexp((xμ)22σ2)dxP(x \lt k\sigma + \mu) = \int_{-\infty}^{k\sigma + \mu} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(x-\mu)^{2}}{2 \sigma^{2}}\right) \mathrm{d} x

可是我們要求的是z<kz < k的概率P(z<k)P(z < k),由於P(z<k)=P(x<kσ+μ)P(z\lt k) = P(x \lt k\sigma + \mu),只需要將x=zσ+μx = z\sigma + \mu只要代入積分公式替換掉xx即可:

P(z<k)=k12πσexp((zσ+μμ)22σ2)σdz=k12πexp(z22)dz\begin{aligned} P(z\lt k) &=\int_{-\infty}^{k} \frac{1}{\sqrt{2 \pi} \sigma} \exp \left(-\frac{(z \sigma+\mu-\mu)^{2}}{2 \sigma^{2}}\right) \sigma \mathrm{d} z \\ &=\int_{\infty}^{k} \frac{1}{\sqrt{2 \pi}} \exp \left(-\frac{z^{2}}{2}\right) \mathrm{d} z \end{aligned}

注意兩點:

  1. 積分xx的上限爲x=kσ+μx^*=k\sigma + \mu,新變量zz的上限爲xμσ=kσ+μμσ=k\frac{x^*-\mu}{\sigma} = \frac{k\sigma + \mu - \mu}{\sigma} = k
  2. x=zσ+μx=z\sigma + \mu兩邊求導,得到dx=σdzdx=\sigma dz

至此,證明得到z-score變化後的數據服從標準正態分佈zN(0,1)z \sim N(0, 1)

中心極限定理

The central limit theorem in statistics states that, given a sufficiently large sample size, the sampling distribution of the mean for a variable will approximate a normal distribution regardless of that variable’s distribution in the population.

名詞解釋

在統計學中,有一些專用名詞不能弄混淆,特別是我們平時說的“樣本”在這裏並不是指單個數據,參見Central Limit Theorem Explained

  • 總體(population):研究對象的整個羣體(the complete set of all objects or people of interest)
  • 樣本(sample):從總體中選取的一部分數據(a subset of the entire population)
  • 樣本數量(the number of samples):有多少個樣本。
  • 樣本大小/樣本容量(sample size):每個樣本里包含多少個數據。
  • 抽樣分佈(sampling distribution):將樣本平均值的分佈可視化。

定義

對於獨立同分布的變量X1,X2,X3...XnX_1, X_2, X_3 ... X_n,其中E(Xi)=μ, V(Xi)=σ2<E(X_i)=\mu,\ V(X_i)=\sigma^2 < \infty,這組樣本的均值表示爲:

Xˉn:=X1++Xnn\bar{X}_{n}:=\frac{X_{1}+\cdots+X_{n}}{n}

中心極限定理研究的就是這個Xnˉ\bar{X_n}的分佈情況,而不是XX的分佈情況,因爲現實中很多數據我們是無法獲得其總體(population)分佈情況的,而中心極限定理可以幫助我們分析其均值位置。

不同的nn或者不同的樣本都會影響Xnˉ\bar{X_n},直覺上Xnˉ\bar{X_n}是和E(Xi)E(X_i)有關的,而且是圍繞着E(Xi)E(X_i)的。如果對這組數據做z-score標準化得到Yn=(Xiμ)/σY_n = (X_i-\mu)/\sigma,標準化後的樣本均值

Yˉn=in(Xiμσ)n=inxinσμσ\bar{Y}_n = \frac{\sum_i^n(\frac{X_i - \mu}{\sigma})}{n} = \sum_i^n{\frac{x_i}{n\sigma}} - \frac{\mu}{\sigma}

由大數定律(大數定律、中心極限定理與格里文科定理)可知,當n+n\rightarrow+\infty時,{Xi,i=1,2,...,n}\{X_i, i=1,2,...,n\}以概率1收斂於期望μ\mu,因此得到

limnYˉn0\lim_{n\rightarrow\infty} \bar{Y}_n \rightarrow 0

現在給出中心極限定理的定義:

limn+P{Xnˉμσ/nx}=12πxet22dt\lim _{n \rightarrow+\infty} P\left\{\frac{\bar{X_n}-\mu}{\sigma / \sqrt{n}} \leqslant x\right\}=\frac{1}{\sqrt{2 \pi}} \int_{-\infty}^{x} e^{\frac{-t^{2}}{2}} d t

公式左邊相當於對Xˉn\bar{X}_n做了類似z-score的處理,減去總體均值μ\mu,併除以σ/n\sigma/\sqrt{n},右邊就是標準正態分佈N(0,1)N(0,1)的概率密度函數的積分,也就是說當樣本容量極大時,樣本均值的抽樣分佈趨近於期望爲μ\mu,標準差爲σn\frac{\sigma}{\sqrt{n}}的正態分佈。如果將分子分母同乘以nn,那麼可以得到XiX_i和的表示形式

i=1nXinμσnN(0,1)\frac{\sum_{i=1}^{n} X_{i}-n \mu}{\sigma \sqrt{n}} \sim N(0,1)

證明過程將Xˉnorm\bar{X}_{norm}特徵函數在0點泰勒展開,得到了和標準正態分佈N(0,1)N(0, 1)一樣的特徵函函數et22e^{-\frac{t^2}{2}}

單次採樣

均勻分佈

以均勻分佈np.random.rand()爲例,一次採樣1000個值,可以看到樣本均值接近0.5,並且histgram(默認10個bin)中每個bin的值都接近1000/10=100

sample_size = 1000 # 採樣個數
number_of_sample = 1 # 採樣次數

np.random.seed(0)
X = np.random.rand(number_of_sample, sample_size)

mean = X.mean(axis=1)

fig, axs = plt.subplots(1, 2, figsize=(9, 4))

# sample values
axs[0].plot(X[0], '.')
axs[0].set_ylim(-1, 2)
axs[0].set_title('sample values')

# histgram of X
axs[1].hist(X[0], edgecolor='k', alpha=0.8)
axs[1].set_title('histgram of $X$')

plt.show()
print('mean:', mean)

mean: [0.49592153]

偏正態分佈

如果用正態分佈實驗,結果可能不能很好的展示中心極限定理。我們直接用SciPy裏的skewnorm偏正態分佈,概率密度函數爲skewnorm.pdf(x, a) = 2 * norm.pdf(x) * norm.cdf(a*x)

from scipy.stats import skewnorm
import matplotlib.pyplot as plt

a = 4
fig, ax = plt.subplots(1, 1)
mean, var, skew, kurt = skewnorm.stats(a, moments='mvsk')

x = np.linspace(skewnorm.ppf(0.01, a), skewnorm.ppf(0.99, a), 100)
ax.plot(x, skewnorm.pdf(x, a), 'r-', lw=5, alpha=0.6, label='skewnorm pdf')

print('E(X) =', mean)
E(X) = 0.7740617226446519

打印的結果顯示這個分佈均值約等於0.774,我們採樣1000個值看看其分佈情況。

r = skewnorm.rvs(a, size=1000)

fig, axs = plt.subplots(1, 2, figsize=(9, 4))

# sample values
axs[0].plot(r, '.')
axs[0].set_ylim(-2, 5)
axs[0].set_title('sample values')

# histgram of X
axs[1].hist(r, edgecolor='k', alpha=0.8)
axs[1].set_title('histgram of $X$')

print('mean:', r.mean())
mean: 0.7426786528215207

多次採樣

均勻分佈

我們分別測試n={3,10,30,100}n=\{3, 10, 30, 100\}的情況,每種情況都採集100000次,並畫出每種情況下均值的分佈圖(已歸一化)。從圖中可以看出,雖然樣本容量n=3n=3很小,但是其均值的分佈圖已經是正態分佈,這和均勻分佈本身對稱有關係。當n=30n=30時候已經很好了。

sample_size = [3, 10, 30, 100] # 每次採樣個數
number_of_sample = 100000 # 採樣次數

plt.figure(figsize=(8,6))

for i, ss in enumerate(sample_size):
    Xs = np.random.rand(number_of_sample, ss)    
    h, b = np.histogram(Xs.mean(axis=1), bins=50, density=True)
    b = (b[:-1] + b[1:]) / 2.
    plt.plot(b, h, '-', label=f'sample size = {ss}')

plt.legend()

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Iw3aDmtH-1592485360810)(https://static01.imgkr.com/temp/455608657cea4ca8867401ab1e077261.png)]

偏正態分佈

同均勻分佈一樣,仍然測試n={3,10,30,100}n=\{3, 10, 30, 100\}的情況,但是注意,由於樣本容量n=3n=3太小,其均值分佈類似於總體數據的偏正態分佈,而n=10n=10就好了很多。

sample_size = [3, 10, 30, 100] # 每次採樣個數
number_of_sample = 100000 # 採樣次數


plt.figure(figsize=(8,6))

for i, ss in enumerate(sample_size):
    Xs = skewnorm.rvs(4, size=(number_of_sample, ss))
    h, b = np.histogram(Xs.mean(axis=1), bins=50, density=True)
    b = (b[:-1] + b[1:]) / 2.
    plt.plot(b, h, '-', label=f'sample size = {ss}')

plt.legend()

練習題

e.g.1 某炮兵陣地對敵人的防禦地段進行100次射擊,每次射擊中炮彈的命中數是一個隨機變量,其期望爲2,方差爲1.69,求在100次射擊中有180顆到220顆炮彈命中目標的概率。

解:設XiX_i表示第ii次設計命中的炮彈數,則E(Xi)=2, D(Xi)=1.69E(X_i)=2,\ D(X_i)=1.69,因爲100很大,所以根據中心極限定理可以認爲(S100100μ)100σ\frac{(S_{100}-100\mu)}{\sqrt{100}\sigma}近似服從N(0,1)N(0,1)100μ=200 σ=1.3100\mu=200\ \sigma=1.3,所以

P(180Sn220)=P(18020013Sn2001322020013)(2013)(2013)=2(1.54)1=0.8764P\left(180 \leq S_{n} \leq 220\right) = P\left(\frac{180-200}{13} \leq \frac{S_{n}-200}{13} \leq \frac{220-200}{13}\right)\\ \approx \varnothing\left(\frac{20}{13}\right)-\varnothing\left(-\frac{20}{13}\right)\\ = 2\varnothing(1.54) - 1 = 0.8764

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章