Python:如何找到多个3D(lat-lon-time-value)dataArrays的回归方程?

时间:2017-08-24 14:15:04

标签: python numpy matplotlib python-xarray

我有两组dataArrays表示三个坐标轴上的值(lat,lon,time);一组dataArrays表示变量varA,一组表示变量varB(下面给出的示例)。

varA
<xarray.DataArray 'varA' (time: 32, lat: 20, lon: 18)>
array([[[... 
... ]]])
Coordinates:
 * lat      (lat) float64 4.75 4.25 3.75 3.25 2.75 2.25 1.75 1.25 0.75 0.25 ...
 * lon      (lon) float64 33.25 33.75 34.25 34.75 35.25 35.75 36.25 36.75 ...
 * time     (time) datetime64[ns] 1979-01-01 1980-01-01 1981-01-01 ...

有4种不同的varA和varB二重奏。我制作了一个散点图,显示varA对每个lat,lon和time的varB,以及每个duo的varA(varA1对varB1,varA2对varB2 ...)。 ;并在1个图形上可视化(所有dataArrays都具有完全相同的坐标)。

for t in range(varA1['time'].size) :
    for la in range(varA1['lat'].size) :
        for lo in range(varA1['lon'].size) :
            x = varA1.values[t,la,lo]
            y = varB1.values[t,la,lo]
            plt.scatter(x,y)
for t in range(varA2['time'].size) :
    for la in range(varA2['lat'].size) :
        for lo in range(varA2['lon'].size) :
            x = varA2.values[t,la,lo]
            y = varB2.values[t,la,lo]
            plt.scatter(x,y)
... 
plt.show()

完整的散点图功能工作正常,但现在我想为完整的散点图添加趋势线(并找到它的等式)。事实上,我想研究varA和varB之间的长期(随着时间的推移)和大规模(over lat和lon)关系;我知道更高的varA值伴随着更高的varB值(无论在哪个位置或在什么时间),但我想获得1个回归方程,相关系数和RMSE(即量化它们的关系 )。

这可能吗?我想我需要平均每个单元格的所有varAs [lat,lon,time],并且对于所有varBs都是相同的;所以像这样:

avrR = wfdei_rain * 0
avrY = wfdei_rain * 0
for t in range(varA1['time'].size) :
    for la in range(varA1['lat'].size) :
        for lo in range(varA1['lon'].size) :
            avrA[la,lo,t] = float(sum([varA1[la,lo,t],varA2[la,lo,t],varA3[la,lo,t],varA4[la,lo,t])) / 4    
            avrB[la,lo,t] = float(sum([varB1[la,lo,t],varB2[la,lo,t],varB3[la,lo,t],varB4[la,lo,t])) / 4                                
z = np.polyfit(avrA[:,:,:],avrB[:,:,:],1)
p = np.poly1d(z)
plt.plot(x,p(x))
print('y=%.6fx+(%.6f)'%(z[0],z[1])

这给polyfit函数提供了一个错误('x'的预期1D向量)。 我没有找到如何调整polyfit以使用DataArrays - 3D。我发现了一个相关的帖子:Applying numpy.polyfit to xarray Dataset,但它对我没有帮助。

有关(更好)方法的任何建议吗?

提前致谢!

0 个答案:

没有答案