我正在为因果网络运行 pc 算法。在这个算法中,我需要验证两个数组 X 和 Y 是否独立给定一组数组 Z1,...,Zn。在论文中,通常假设高斯独立性测试,我试图不使用它来支持更通用的方法。我尝试使用互信息,但从我昨天的讨论中可以看出(具有多个变量的条件互信息),互信息似乎不是一个好方法。我尝试使用fcit
包。
import numpy as np
from fcit import fcit
X = np.random.random_integers(0,10,10000)
Y = np.random.random_integers(0,10,10000)
Z = X+Y
Z1 = X-Y
Z = [Z,Z1]
Z = np.array(Z).T
X = X.reshape((10000,1))
Y = Y.reshape((10000,1))
pval_d = fcit.test(X, Y)
pval_i = fcit.test(X, Y, Z)
但是对于pval_i
我得到nan
的和以下警告:
C:\Users\Usuario\anaconda3\Lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in greater
return (a < x) & (x < b)
C:\Users\Usuario\anaconda3\Lib\site-packages\scipy\stats\_distn_infrastructure.py:903: RuntimeWarning: invalid value encountered in less
return (a < x) & (x < b)
C:\Users\Usuario\anaconda3\Lib\site-packages\scipy\stats\_distn_infrastructure.py:1912: RuntimeWarning: invalid value encountered in less_equal
cond2 = cond0 & (x <= _a)
我认为它出现是由于 Z 和 X 和 Y 的尺寸不同,因为在这种情况下都具有相同的尺寸 (10000,1),它可以正确计算独立性测试。所以我的问题是:如果给定 Z1,...,Zn,我如何计算 X 和 Y 是否独立?