在Python中生成具有指定边距的copular样本

2024-05-15 03:31:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有N个随机变量(X1,…,XN),每个都分布在一个特定的边缘(正态分布,对数正态分布,泊松分布…),我想用python3生成这些变量Xi的p个联合实现的样本,假设这些变量与给定的Copula相关。我知道R是一个更好的选择,但是我想用Python来实现它。你知道吗

遵循this方法,我设法用高斯Copula实现了这一点。现在我想修改这个方法来使用阿基米德Copula(Gumbel,Frank…)或Student Copula。在高斯copula方法的开始,您将从多元正态分布中提取p实现的样本。为了适应另一个copula,例如一个双变量Gumbel,我的想法是从joint distribution of a bivariate Gumbel中抽取一个样本,但是我不确定如何实现这个。你知道吗

我尝试过使用几个python3包:copulaecopulacopulas都提供了将特定copula适配到数据集的选项,但不允许从给定copula中随机抽取样本。你知道吗

你能提供一些关于如何从一个给定的具有统一边缘的Copula中抽取多元随机样本的算法见解吗?你知道吗


Tags: 方法对数thispython3边缘样本x1copula
1条回答
网友
1楼 · 发布于 2024-05-15 03:31:08

下面的代码实现了Clayton和AMH copulas。第4页的this paper展示了如何实现其他类型的copula。你知道吗

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]

相关问题 更多 >

    热门问题