在Python中生成具有指定边际的copula相关样本

问题描述 投票:1回答:1

我有N个随机变量(X1,...,XN),每个变量都分布在特定的边际(正态,对数正态,泊松...),我想生成这些的p个联合实现的样本变量Xi,考虑到变量与给定的Copula相关联,使用Python3。我知道R是更好的选择,但我想在Python中完成。

按照this方法,我设法用高斯Copula做到了。现在,我想调整方法以使用Archimedean Copula(Gumbel,Frank ...)或Student Copula。在高斯copula方法的开始,您从多元正态分布中提取了p个实现的样本。为了使它适应另一个copula,例如双变量Gumbel,我的想法是从joint distribution of a bivariate Gumbel中抽取一个样本,但是我不确定如何实现此目的。

[我已经尝试过使用多个Python 3软件包:copulaecopulacopulas都提供了n选项以使特定的copula适应数据集,但不允许从给定的copula中抽取随机样本。

您能否提供一些算法上的见解,以了解如何从具有均匀边际的给定Copula中抽取多元随机样本?

python random statistics
1个回答
0
投票

以下代码实现了Clayton和AMH copulas。 this paper的第4页显示了如何实现其他种类的copula。

import random
import math
import scipy.stats as st
def clayton(theta):
    v=random.gammavariate(1/theta,1)
    uf=[random.expovariate(1)/v for _ in range(2)]
    return [(k+1)**(-1.0/theta) for k in uf]

def amh(theta):
    # NOTE: Use SciPy RNG for convenience here
    v=st.geom(1-theta).rvs()
    uf=[random.expovariate(1)/v for _ in range(2)]
    return [(1-theta)/(math.exp(k)-theta) for k in uf]
© www.soinside.com 2019 - 2024. All rights reserved.