当 x 中存在缺失值时,Python中是否有高效的实现来计算多元正态分布的PDF?我想,对于要计算概率的特定向量,您可以有效地将维数减少到任意数量的可用数据点。但我不能“我不知道scipy实现是否有办法忽略掩码值。
例如,可以是,
from scipy.stats import multivariate_normal as mvnorm
import numpy as np
means = [0.0,0.0,0.0]
cov = np.array([[1.0,0.2,0.2],[0.2,1.0,0.2],[0.2,0.2,1.0]])
d = mvnorm(means,cov)
x = [0.5,-0.2,np.nan]
d.pdf(x)
产生输出:
nan
(as)
是否有一种方法可以使用此实现仅对存在的值有效地评估PDF(在本例中,将3D案例有效地转换为二元案例?)?
1条答案
按热度按时间5kgi1eie1#
这个问题在数学和代码方面有点棘手。让我来详细说明一下。
首先,代码.
scipy.stats
没有提供您所希望的非处理功能。快速的代码可能需要手动实现多元正态分布PDF,并将其直接应用于NumPy数组。利用矢量化是为大规模数据集有效提供此功能的唯一方法。另一方面,下面的nan-tolerant函数nanTol_pdf()
提供了所需的功能,同时保持了SciPy中实现的多元正态分布。您可能会发现它足以满足您的用例。无论如何,我们能做到这一点的事实不应该阻止我们思考,如果我们应该。
第二个问题是数学。从数学上讲,我们不清楚要达到什么目的。在示例中,SciPy返回
nan
,因为您使用了一个定义不明确的输入向量x
进行查询。输出未定义,即不返回数字(nan
)似乎是最合适的答案。联合截断分布d
和输入向量x
避开了数值问题,但是产生了统计问题。由于概率密度函数值不能被理解为(条件)概率。此外,如果应用了截断,则输出本身会隐藏。请记住,nanTol_pdf()
将很乐意提供非只要向量中至少有一个条目是实数,就将负真实的作为输出。您的用例将决定这是否合理。最后,我建议在继续前进之前至少考虑丢失的数据imputation techniques。让我知道这是否有帮助。