Numpy 来自两个概率分布组合的样本数据

Numpy 来自两个概率分布组合的样本数据,numpy,statistics,scipy,probability-theory,Numpy,Statistics,Scipy,Probability Theory,我想做一份模拟目录。我可以访问两组真实数据,我想使用它们的属性生成模拟目录: 第一个包含来自震级和红移(z)的信息。 second集合包含有关星系的星等和加权椭圆度的信息 在我的最终模拟目录中,我想生成红移和加权椭圆度。我想使用量级与红移和量级与加权椭圆度的基本属性。但是,我还有一个定义良好的公式,描述了红移的分布,功能如下(GeneralRandom是一个能够按照给定分布生成随机样本的类p(z)): 我使用定义的红移分布函数对上述过程中的红移进行采样。 现在,我很困惑如何将从两个分布计算出的k

我想做一份模拟目录。我可以访问两组真实数据,我想使用它们的属性生成模拟目录: 第一个包含来自震级红移
z
)的信息。 second集合包含有关星系的星等和加权椭圆度的信息

在我的最终模拟目录中,我想生成红移加权椭圆度。我想使用量级红移量级加权椭圆度的基本属性。但是,我还有一个定义良好的公式,描述了红移的分布,功能如下(
GeneralRandom
是一个能够按照给定分布生成随机样本的类
p(z)
):

我使用定义的红移分布函数对上述过程中的红移进行采样。 现在,我很困惑如何将从两个分布计算出的
kde
组合起来,并估计我感兴趣的参数,例如,从采样的
红移
中计算模拟目录的
加权椭圆度
? 该图显示了从两个已知真实数据集估计的高斯KDE。我不知道如何独立使用
stats.gaussian_kde
的输出,只需插入计算的
红移
,并在
2D kde
之后获得相应的
幅值
,然后在上一步中从估计的
幅值
,和
量级
权重的估计KDE
估计输入
红移
加权椭圆率
? 从统计学上讲,问题是这样的,对吗

我也不知道计算,应该怎么做

如果有人能介绍我如何解决我的问题,以及一些python编程技巧或介绍一些有用的库,我将不胜感激。
设R=红移,M=幅度,W=重量。如果我理解正确的话,你是在尝试从P(W,R)取样

考虑到手头的数据,您没有足够的信息来提供完整的解决方案:注意p(W,R)=p(W | R)p(R),其中p(W | R)=\int p(W,M | R)dM=\int p(W | M,R)p(M | R)dM。你可以从有数据的P(M,R)中推导出P(M,R),但是你没有数据来推导P(W,M,R)——你只有P(W,M),所以你可以推导出P(W,M),但不能推导出P(W,M,R)——为了取得进展,如果你已经有了M,你必须假设R不会给你更多关于W的信息。我对你的问题域一无所知——你必须研究这个假设,看看它是否合理


假设p(W | M,R)=p(W | M)是一个合理的假设,您可以从p(R),然后从p(M | R),然后从p(W | M)进行采样以获得一对(R,W)。对于采样P(M | R)和P(W | M),您需要从从内核密度导出的条件分布中进行采样。我目前没有一个公式,但我认为它相对简单。也许我明天会做,今晚我没有时间。

我想假设
R
不会给我更多关于
w
的信息,所以这是一个相对公平的假设。但我如何计算条件分布呢?如果你能给我一些提示,告诉我高斯分布是否能产生条件概率,我怎样才能把它们混合起来,得到一个给定概率为R的W的样本?我找到了P(R | M)的另一个分析公式和另一个包含
量级信息的数据集,
红移
加权椭圆度
所以现在的问题是这样的P(W | R)=\int P(R | M)P(W | R,M)P(M)/P(R)dM,看起来比以前更复杂,对吗?现在我不知道如何将所有信息组合起来,对
红移
加权椭圆率
进行采样?Dalek你说你有一个包含所有三个变量的数据集。太棒了,如果你想为P(W | R)构建一个模型,只需从新数据集中使用R和W,忽略M。但另一方面,我知道
幅值
红移
幅值
加权椭圆度
之间存在关系,但这并不一定意味着
redshift
weight
之间存在直接关系。因为例如在更高的星等中,星系的类型会发生变化,所以
P(R | M)另一方面,
幅度
加权椭圆度
是相关的,因为在较高的
幅度
中,数据会变得更嘈杂,因此
摆动椭圆度
会降低。即使我做了这个假设,我也需要拟合一个条件核密度估计,并从上面
p(z)
的分析公式绘制一个
红移的样本,然后使用这个条件概率(我不知道如何)对
加权幅度进行采样,这是正确的方法吗?
ng=24000
def p(z):
    z0=1./3.;eta=1.0
    value=eta*(z**2)*np.exp(-1*(z/z0)**eta)/scipy.special.gamma(3./eta)/z0**3 
    return value

catalogue_generate=GeneralRandom(x=np.arange(0.0, 1.5, .001), p_func=p, Nrl=10000)

catalogue_generate.set_pdf(np.arange(0.0, 1.5, .001), catalogue_generate.p_val, 10000)
redshift=catalogue_generate.random( ng)[0]
redshift=random.sample(redshift, ng)