python实现抽样分布单个正态总体模拟

数理统计中,我们利用样本数据推断总体的信息。在应用时,往往不是直接使用样本本身,而是针对不同的问题构造样本统计量,利用样本统计量进行推断。因此,清楚样本统计量服从什么分布就至关重要了。样本统计量的分布就称为抽样分布。这里,样本是随机变量,样本统计量作为样本的函数,自然也是随机变量,因此才有分布。它是指当多次抽样,得到多个样本,每个样本都可以计算一个样本统计量的观测值;由于抽样的随机性,这些值一般不相等,但有一定的规律,即服从某种分布。抽样分布就指出了它们所服从的分布。

以单个正态总体的均值为例,设总体?~?(?, σ 2 \sigma^2 σ2), 典型的参数估计问题是,已知一个样本的观测值为 x 1 , x 2 x_{1},x_{2} x1,x2,⋯, x n x_{n} xn, 求总体均值?的估计。我们知道样本均值? ̅ = 1/? ∑ ?? =1 是总体均值?的无偏估计,给定一个样本的观测值?1,?2,⋯,??, 可以 计算出样本均值的观测值 X ˉ = 1 n ∑ i = 0 n x i = 1 \bar{X}=\frac{1}{n}\sum_{i=0}^nx_{i}=1 Xˉ=n1i=0nxi=1 . 此处容易迷惑了,由一个样本得到了一个样本均值的观测值,怎么还有样本均值的分布呢?事实上,这里所指的分布,是指多次抽样,得到多个样本,每个样本都可以计算样本均值。由于抽样的随机性,这些样本均值一般来说不相等,但它们的取值有一定的规律,即服从一定的分布。比如,方差 σ 2 \sigma^2 σ2已知时, X ˉ ∼ ( μ , σ 2 n ) \bar{X}\sim(\mu,\frac{\sigma^2}{n}) Xˉ(μ,nσ2)
下面的定理给出了单个总体的抽样分布结论:
定理 设 x 1 , x 2 x_{1},x_{2} x1,x2,⋯, x n x_{n} xn是来自正态总体(?, σ 2 \sigma^2 σ2)的样本, X ˉ , S 2 \bar{X},S^2 Xˉ,S2分别为样本均值和样本方差,则有:

  1. X ˉ \bar{X} Xˉ~?(?, σ 2 n \frac{\sigma^2}{n} nσ2),进而 X ˉ − μ σ / n ∼ N ( 0 , 1 ) \frac{\bar{X}-\mu}{{\sigma}{/\sqrt{n}}}\sim N(0,1) σ/n XˉμN(0,1);
  2. ( n − 1 ) S 2 σ 2 ∼ χ 2 ( n − 1 ) (n-1)\frac{S^2}{\sigma^2}\sim\chi^2(n-1) (n1)σ2S2χ2(n1)
  3. X ˉ 2 \bar{X}^2 Xˉ2 S 2 S^2 S2相互独立;
  4. X ˉ − μ S / n ∼ t ( n − 1 ) \frac{\bar{X}-\mu}{S/\sqrt{n}}\sim t(n-1) S/n Xˉμt(n1)
    下面,利用 numpy 生成服从正态分布的随机数,每一列表示一个样本,利用得到的多个样本,模拟抽样,并比较由抽样结果得到的概率密度估计值和上面定理给出的理论抽样分布的概率密度曲线。
    (1)方差 sigma2 已知时,样本均值的抽样分布 即 X ˉ − μ σ / n ∼ N ( 0 , 1 ) \frac{\bar{X}-\mu}{{\sigma}{/\sqrt{n}}}\sim N(0,1) σ/n XˉμN(0,1)
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
from numpy import matlib
import math
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
n = 10  # 样本容量
m = 10000  # 抽样次数
# N(0,1)
mu = 0.0
sigma = 1.0
X = sigma * matlib.randn((n, m)) + mu  # 模拟抽样,每一列是一个样本容量为n的样本,共抽样m次
Xmean = np.mean(X, axis=0)  # 样本均值
z = (Xmean - mu) / (sigma / math.sqrt(n))  # (? ̅−? )/(?/√?)~?(0,1);
Z = np.array(z).flatten()
x = np.linspace(-5, 5, 100)
N, bins, patches = plt.hist(Z, 50, density=1, facecolor="yellow", edgecolor="black", alpha=0.7)
plt.plot(x, stats.norm.pdf(x), "b", label="N(0,1)")
plt.xlabel('x')
plt.ylabel('pdf')
plt.suptitle("方差sigma2已知时,样本均值的抽样分布")
plt.legend()
plt.show()

在这里插入图片描述
(2)方差sigma2未知时,样本均值的抽样分布 即 X ˉ − μ S / n ∼ t ( n − 1 ) \frac{\bar{X}-\mu}{S/\sqrt{n}}\sim t(n-1) S/n Xˉμt(n1)

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
from numpy import matlib
import math
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
n = 10  # 样本容量
m = 10000  # 抽样次数
#N(0,1)
mu=0.0
sigma=1.0
X=sigma * matlib.randn((n, m)) + mu#模拟抽样,每一列是一个样本容量为n的样本,共抽样m次
Xmean=np.mean(X,axis=0)#样本均值
Xstd=np.std(X,axis=0)#标准差
T=(Xmean-mu)/(Xstd/math.sqrt(n))#(? ̅−?)/(?/√?)~?(?−1).
t=np.array(T).flatten()
x=np.linspace(-5, 5, 100)
N, bins, patches =plt.hist(t, 50, density=1, facecolor="yellow", edgecolor="black", alpha=0.7)
plt.plot(x, stats.norm.pdf(x),"b", label="N(0,1)")
plt.plot(x, stats.t.pdf(x, n-1),"r", label="t(n-1)")
plt.xlabel('x')
plt.ylabel('pdf')
plt.suptitle("方差sigma2未知时,样本均值的抽样分布")
plt.legend()
plt.show()

在这里插入图片描述
(3)方差 S^2 的抽样分布 即 ( n − 1 ) S 2 σ 2 ∼ χ 2 ( n − 1 ) (n-1)\frac{S^2}{\sigma^2}\sim\chi^2(n-1) (n1)σ2S2χ2(n1)

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
from numpy import matlib
import math
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
n = 10  # 样本容量
m = 10000  # 抽样次数
#N(0,1)
mu=0.0
sigma=1.0
X=sigma * matlib.randn((n, m)) + mu#模拟抽样,每一列是一个样本容量为n的样本,共抽样m次
Xmean=np.mean(X,axis=0)#样本均值
zhen2=np.var(X, axis=0)#样本方差
xchi2=(np.dot((n), np.array(zhen2)))/(sigma*sigma)#(?−1)?2/?2 ~?2(? −1)
Xchi2=np.array(xchi2).flatten()
c2=stats.chi2.isf(0.0000001, n-1)
x=np.linspace(0, c2, 100)
N, bins, patches =plt.hist(Xchi2, 50, density=1, facecolor="yellow", edgecolor="black", alpha=0.7)
plt.plot(x, stats.chi2.pdf(x, n-1),"b", label="$\chi2(n-1)$")
plt.xlabel('x')
plt.ylabel('pdf')
plt.suptitle("方差 S^2 的抽样分布")
plt.legend()
plt.show()

在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值