在jupyter里使用接受拒绝法生成大小为1000,服从Beta(3,2)分布的随机样本比较直方图和对数正态密度曲线
时间: 2024-10-20 20:09:56 浏览: 38
在Jupyter Notebook中,你可以使用`numpy`库的`beta`函数来生成服从Beta分布的随机样本,并结合`matplotlib`库来进行数据可视化。首先,需要安装这两个库,如果还没安装可以使用命令`!pip install numpy matplotlib`。
以下是生成并比较Beta分布直方图和对数正态密度曲线的步骤:
1. 导入必要的库:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import beta, lognorm
```
2. 定义Beta分布的参数(形状参数a=3, b=2):
```python
a = 3
b = 2
```
3. 生成大小为1000的随机样本:
```python
size = 1000
samples = beta.rvs(a, b, size=size)
```
4. 绘制直方图:
```python
plt.hist(samples, bins='auto', alpha=0.5, density=True, label='Beta(3, 2) Distribution')
plt.title('Histogram of Beta Distributed Samples')
plt.xlabel('Value')
plt.ylabel('Density')
plt.legend()
```
5. 对数正态分布通常用于对数值数据进行拟合,虽然Beta分布不是严格的对数正态分布,我们可以创建一个对数正态曲线作为参考。由于两者并不完全匹配,这里我们仅作展示:
```python
mean_log = (np.log(a) - np.log(b)) / 2
sigma = np.sqrt(np.log(a + b))
lognormal_samples = np.exp(lognorm.rvs(mean_log, sigma, size=size))
# 创建一个对数正态密度曲线
x_values = np.linspace(min(samples), max(samples), 1000)
pdf_lognormal = lognorm.pdf(x_values, mean_log, sigma)
plt.plot(x_values, pdf_lognormal, 'r--', label='Log-Normal Approximation', linewidth=2)
```
6. 添加标题、标签和图例,并显示图形:
```python
plt.legend()
plt.show()
```
阅读全文