(一)连续随机量的生成-从t分布采样

连续随机量的生成-从t分布采样

  • 1. t t t 分布
  • 2. 从 t t t 分布采样
  • 3. Python编程实现

1. t t t 分布

t t t 分布作为 t t t 检验的抽样分布出现。 令 z 1 , ⋯   , z n z_1, \cdots, z_n z1,,zn 为 i.i.d,分布为 N ( μ , σ 2 ) N\left(\mu, \sigma^2\right) N(μ,σ2),样本均值和样本方差分别为:
X ˉ = 1 n ( X 1 + ⋯ + X n ) , S 2 = 1 n − 1 ∑ i = 1 n ( X i − X ˉ ) 2 . {\bar{X}}=\frac{1}{n}\left(X_1+\cdots+X_n\right), \quad S^2=\frac{1}{n-1} \sum_{i=1}^n\left(X_i-\bar{X}\right)^2 . Xˉ=n1(X1++Xn),S2=n11i=1n(XiXˉ)2.
t t t-统计量定义为
T = X ˉ − μ S 2 / n , T=\frac{\bar{X}-\mu}{\sqrt{S^2 / n}}, T=S2/n Xˉμ,
T T T 有度为 n − 1 n-1 n1 t t t-分布, 密度函数定义为
f ( x ) = τ ( n 2 ) ( n − 1 ) π τ ( n − 1 2 ) ( 1 + x 2 n − 1 ) − n 2 f(x)=\frac{\tau\left(\frac{n}{2}\right)}{\sqrt{(n-1) \pi} \tau\left(\frac{n-1}{2}\right)}\left(1+\frac{x^2}{n-1}\right)^{-\frac{n}{2}} f(x)=(n1)π τ(2n1)τ(2n)(1+n1x2)2n
其中 τ ( ⋅ ) \tau(\cdot) τ() 定义为 τ ( z ) = ∫ 0 ∞ x z − 1 e − x d x \tau(z)=\int_0^{\infty} x^{z-1} e^{-x} d x τ(z)=0xz1exdx,对于 z > 0 z>0 z>0.

2. 从 t t t 分布采样

如何从度为 ( n − 1 ) (n-1) (n1) t t t-分布的随机量 Z Z Z采样?

一个关于 T T T的重要定理是
T = Z Y n − 1 T=\frac{Z}{\sqrt{\frac{Y}{n-1}}} T=n1Y Z
其中 Z ∼ N ( 0 , 1 ) Z \sim N(0,1) ZN(0,1) Y ∼ χ 2 ( n − 1 ) Y \sim \chi^2(n-1) Yχ2(n1), 关于度为 n − 1 n-1 n1 χ \chi χ-平方分布, 此外 Z Z Z Y Y Y独立。

  • Sample a random quantity Y Y Y from the distribution χ 2 ( n − 1 ) \chi^2(n-1) χ2(n1),
      • Sample a random quantity Z ∼ N ( 0 , Y n − 1 ) Z \sim N\left(0, \frac{Y}{n-1}\right) ZN(0,n1Y)
      • Return X = Z X=Z X=Z.

3. Python编程实现

作业: 通过编程实现上述伪代码,生成1000个随机量,并绘制直方图。

import numpy as np
import matplotlib.pyplot as plt

# 定义自由度和样本数量
n = 10  # 自由度(可以根据需要更改)
sample_size = 1000  # 样本数量

# 生成随机量

chi_squared_samples = np.random.chisquare(df=n - 1, size=sample_size)
normal_samples = np.random.normal(loc=0, scale=np.sqrt(chi_squared_samples / (n - 1)), size=sample_size)


# 绘制直方图
plt.hist(normal_samples, bins=30, density=True, alpha=0.6, color='b', label='Generated Samples')
plt.xlabel('Value')
plt.ylabel('Probability Density')
plt.title('Histogram of Generated t-Distribution Samples')
plt.legend()
plt.grid(True)
plt.show()

你可能感兴趣的:(数据科学和Python实现,算法,python)