在Python中生成具有指定边缘的copula相关示例 我有n个随机变量(x1,…,xn),每个变量都分布在一个特定的边缘(正常,对数正态,泊松…),并且我想生成一个p变量联合实现的变量席的样本,假设变量与给定的Copula相关,使用Python 3。我知道R是一个更好的选择,但我想用Python来实现它
按照下面的方法,我用高斯Copula成功地做到了这一点。现在我想修改这个方法,使用阿基米德Copula(Gumbel,Frank…)或Student Copula。在高斯copula方法的开始,您从多元正态分布中提取p实现的样本。为了适应另一个copula,例如二元Gumbel,我的想法是从中抽取一个样本,但我不确定如何实现这一点 我尝试过使用几个Python3包:,并且都提供了将特定copula适配到数据集的noption,但不允许从给定copula中随机抽取样本在Python中生成具有指定边缘的copula相关示例 我有n个随机变量(x1,…,xn),每个变量都分布在一个特定的边缘(正常,对数正态,泊松…),并且我想生成一个p变量联合实现的变量席的样本,假设变量与给定的Copula相关,使用Python 3。我知道R是一个更好的选择,但我想用Python来实现它,python,random,statistics,Python,Random,Statistics,按照下面的方法,我用高斯Copula成功地做到了这一点。现在我想修改这个方法,使用阿基米德Copula(Gumbel,Frank…)或Student Copula。在高斯copula方法的开始,您从多元正态分布中提取p实现的样本。为了适应另一个copula,例如二元Gumbel,我的想法是从中抽取一个样本,但我不确定如何实现这一点 我尝试过使用几个Python3包:,并且都提供了将特定copula适配到数据集的noption,但不允许从给定copula中随机抽取样本 你能提供一些关于如何从给定的
你能提供一些关于如何从给定的具有统一边界的Copula中提取多元随机样本的算法见解吗?下面的代码实现了Clayton和AMH Copula。的第4页显示了如何实现其他类型的连接
import random
import math
import scipy.stats as st
def clayton(theta, n):
v=random.gammavariate(1/theta,1)
uf=[random.expovariate(1)/v for _ in range(n)]
return [(k+1)**(-1.0/theta) for k in uf]
def amh(theta, n):
# NOTE: Use SciPy RNG for convenience here
v=st.geom(1-theta).rvs()
uf=[random.expovariate(1)/v for _ in range(n)]
return [(1-theta)/(math.exp(k)-theta) for k in uf]
请检查这一页。我想这就是你要找的
例如,如果在[1,3]和x2:Normal(0,2)上有两个分布x1:Uniform,并且知道依赖结构copula,那么可以非常容易地构建多维分布X=(x1,x2)
import openturns as ot
x1 = ot.Uniform(1, 3)
x2 = ot.Normal(0, 2)
copula = ot.IndependentCopula()
X = ot.ComposedDistribution([x1, x2], copula)
X.getSample(5)
将返回大小为5的样本:
>>> [ X0 X1 ]
0 : [ 1.87016 0.802719 ]
1 : [ 1.72333 2.73565 ]
2 : [ 1.00422 2.00869 ]
3 : [ 1.47887 1.4831 ]
4 : [ 1.51031 -0.0872247 ]
可以在二维视图中查看云
import matplotlib.pyplot as plt
sample = dist.getSample(1000)
plt.scatter(sample[:, 0], sample[:, 1], s=2)
如果选择copula=ot.ClaytonCopula(2)
,结果将是:
使用GumbelCopula(2):