每个矩阵项的时间序列的 p 值(3 维)
p-value for time series per item of matrix (3-dim)
我想关联时间序列(540 个月长)per/for 每个单独的网格框,循环遍历 2 个纬度 x 6 个经度 = 总共 12 个网格框。我设法得到相关系数,但 p 值结果是 "nan",尽管它们不应该。
我的数据信息:
- TheData1 - 形状:(540, 2, 6) 维度:3
- TheData2 - 形状:(540, 2, 6) 维度:3
我试过了:
np.corrcoef(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])[0,1]
可以很好地获得相关系数,但不适用于
p 值。
slope,intercept,r_value,p_value,std_err=scipy.stats.linregress(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])
给出 pvalue=nan.
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 值。
我想关联时间序列(540 个月长)per/for 每个单独的网格框,循环遍历 2 个纬度 x 6 个经度 = 总共 12 个网格框。我设法得到相关系数,但 p 值结果是 "nan",尽管它们不应该。
我的数据信息:
- TheData1 - 形状:(540, 2, 6) 维度:3
- TheData2 - 形状:(540, 2, 6) 维度:3
我试过了:
np.corrcoef(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])[0,1]
可以很好地获得相关系数,但不适用于 p 值。slope,intercept,r_value,p_value,std_err=scipy.stats.linregress(TheData1[gotdata,lt,ln],TheData2[gotdata,lt,ln])
给出 pvalue=nan.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 值。