使用 Python 为指数 Weibull 分布生成随机样本
Generate random sample for exponentiated Weibull distribution using Python
对于 运行 的分布,以检测作为指数 Weibull 分布的最佳拟合,函数输出 4 个参数值。但是如何生成符合这种分布的大小 n
数据样本 list
。
我不想重写函数。任何执行此操作的 python 软件包都会有所帮助。
通常您会使用 ppf
从 rando 种子生成。
对于一个完全虚假的简单示例,假设我们将一个均匀随机变量(值从 0 到 15)拟合到 Weibull 分布。然后,创建一个种子随机变量(从 0 到 1,因为它是您将获得的分位数的值)并将其放入 ppf
函数中。
import scipy.stats as st
import numpy as np
# fitting part
samples = np.random.rand(10000)*15
dist = st.exponweib.fit(samples)
# generation part
sample_seed = np.random.rand(10000)
random_exponweib_samples = st.exponweib.ppf(sample_seed, *dist)
# plotting
import matplotlib.pyplot as plt
plt.hist(samples, label="uniform", alpha=.5)
plt.hist(random_exponweib_samples, label="exponweib", alpha=.5)
plt.legend()
plt.show()
您将看到如下内容。
请注意查看ppf
关于威布尔分布的文档。在我的函数 st.exponweib.ppf(sample_seed, *dist)
中,我只使用了 *dist
,但可能应该以不同的方式发送参数,您可以通过橙色图的形式看到它,这可能不正确。
对于 运行 n
数据样本 list
。
我不想重写函数。任何执行此操作的 python 软件包都会有所帮助。
通常您会使用 ppf
从 rando 种子生成。
对于一个完全虚假的简单示例,假设我们将一个均匀随机变量(值从 0 到 15)拟合到 Weibull 分布。然后,创建一个种子随机变量(从 0 到 1,因为它是您将获得的分位数的值)并将其放入 ppf
函数中。
import scipy.stats as st
import numpy as np
# fitting part
samples = np.random.rand(10000)*15
dist = st.exponweib.fit(samples)
# generation part
sample_seed = np.random.rand(10000)
random_exponweib_samples = st.exponweib.ppf(sample_seed, *dist)
# plotting
import matplotlib.pyplot as plt
plt.hist(samples, label="uniform", alpha=.5)
plt.hist(random_exponweib_samples, label="exponweib", alpha=.5)
plt.legend()
plt.show()
您将看到如下内容。
请注意查看ppf
关于威布尔分布的文档。在我的函数 st.exponweib.ppf(sample_seed, *dist)
中,我只使用了 *dist
,但可能应该以不同的方式发送参数,您可以通过橙色图的形式看到它,这可能不正确。