编辑:我认为基本上解决了。

我正在使用scipy.stats中的spearmanr查找跨多个不同样本的变量之间的相关性。我大约有2500个变量和36个样本(或“观测值”)

如果我使用全部36个样本计算相关性,则spearmanr可以正常工作。如果仅使用前18个样本,它也可以正常工作。但是,如果我使用后18个样本,则会出错并返回nans。

这是错误:

/Home/s1215235/.local/lib/python2.7/site-packages/numpy/lib/function_base.py:1945: RuntimeWarning: invalid value encountered in true_divide
return c / sqrt(multiply.outer(d, d))
/Home/s1215235/.local/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py:1718: RuntimeWarning: invalid value encountered in greater
cond1 = (scale > 0) & (x > self.a) & (x < self.b)
/Home/s1215235/.local/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py:1718: RuntimeWarning: invalid value encountered in less
cond1 = (scale > 0) & (x > self.a) & (x < self.b)
/Home/s1215235/.local/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py:1719: RuntimeWarning: invalid value encountered in less_equal
cond2 = cond0 & (x <= self.a)

这是代码:
populationdata = np.vstack(thing).astype(np.float)
rho, pval = stats.spearmanr(populationdata[:,sampleindexes], axis = 1)

(populationdata是一个由浮点数组成的numpy数组; [:, sampleindexes]仅允许使用少数列。

这就是rho返回的形式:
[[ 1.                 nan         nan ...,  1.         -0.05882353
  -0.08574929]
 [        nan         nan         nan ...,         nan         nan
          nan]
 [        nan         nan         nan ...,         nan         nan
          nan]
 ...,
 [ 1.                 nan         nan ...,  1.         -0.05882353
  -0.08574929]
 [-0.05882353         nan         nan ..., -0.05882353  1.          0.68599434]
 [-0.08574929         nan         nan ..., -0.08574929  0.68599434  1.        ]]

最佳答案

在评论中指出“尽管有很多0。”因此populationdata[:,sampleindexes]可能具有全为0的行。这将导致spearmanr生成nan。例如,

In [3]: spearmanr([[0, 0, 0], [1, 2, 3]], axis=1)
/Users/warren/anaconda/lib/python2.7/site-packages/numpy/lib/function_base.py:1957: RuntimeWarning: invalid value encountered in true_divide
  return c / sqrt(multiply.outer(d, d))
/Users/warren/anaconda/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py:1728: RuntimeWarning: invalid value encountered in greater
  cond1 = (scale > 0) & (x > self.a) & (x < self.b)
/Users/warren/anaconda/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py:1728: RuntimeWarning: invalid value encountered in less
  cond1 = (scale > 0) & (x > self.a) & (x < self.b)
/Users/warren/anaconda/lib/python2.7/site-packages/scipy/stats/_distn_infrastructure.py:1729: RuntimeWarning: invalid value encountered in less_equal
  cond2 = cond0 & (x <= self.a)
Out[3]: (nan, nan)

10-06 15:22