每个矩阵项的时间序列的 p 值(3 维)

p-value for time series per item of matrix (3-dim)

我想关联时间序列(540 个月长)per/for 每个单独的网格框,循环遍历 2 个纬度 x 6 个经度 = 总共 12 个网格框。我设法得到相关系数,但 p 值结果是 "nan",尽管它们不应该。

我的数据信息:

我试过了:

  1. np.corrcoef(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])[0,1] 可以很好地获得相关系数,但不适用于 p 值。
  2. slope,intercept,r_value,p_value,std_err=scipy.stats.linregress(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln]) 给出 pvalue=nan.
  3. scipy.stats.pearsonr(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln]) 给出错误

"ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()"

TheMDI代表-1e30,缺失数据。

代码:

for lt in range(NLats): # range nlats goes through 0...36
    for ln in range(NLons): # range nlons goes through 0...72

# Short way
        # create a map pointing to the elements of the array that are non-missing
        gotdata = np.where((TheData1[:,lt,ln] > TheMDI) & (TheData2[:,lt,ln] > TheMDI))

        OutputData[lt,ln] = np.corrcoef(TheData1[gotdata,lt,ln]/np.std(TheData1[gotdata,lt,ln]),TheData2[gotdata,lt,ln]/np.std(TheData2[gotdata,lt,ln]))[0,1]
    OutputDataSig[lt,ln]=scipy.stats.linregress(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])[3]

通过仅选择 gotdata 的第一个条目 ([0]) 解决:

gotdata = np.where((TheData1[:,lt,ln] > TheMDI) & (TheData2[:,lt,ln] > TheMDI))[0]

这使得 scipy.stats.pearsonr 给出一个 p 值。