我试图找到观察到的数据的伽马函数的逆CDF,以便找到传递函数。整个目标是通过CDF匹配 CDFobs(y)= CDFsim(x)来纠正模拟数据中的偏差。我尝试使用以下方法进行抛出和错误。
下图显示了CDF和图(c)中的传递函数。我试图复制同样的东西。请帮助我实现情节。
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import interp1d
import scipy.stats as st
sim = st.gamma(1,loc=0,scale=0.8) # Simulated
obs = st.gamma(2,loc=0,scale=0.7) # Observed
x = np.linspace(0,4,1000)
simpdf = sim.pdf(x)
obspdf = obs.pdf(x)
plt.plot(x,simpdf,label='Simulated')
plt.plot(x,obspdf,'r--',label='Observed')
plt.title('PDF of Observed and Simulated Precipitation')
plt.legend(loc='best')
plt.show()
plt.figure(1)
simcdf = sim.cdf(x)
obscdf = obs.cdf(x)
plt.plot(x,simcdf,label='Simulated')
plt.plot(x,obscdf,'r--',label='Observed')
plt.title('CDF of Observed and Simulated Precipitation')
plt.legend(loc='best')
plt.show()
# Inverse CDF
invcdf = interp1d(obscdf,x)
transfer_func = invcdf(simcdf)
plt.figure(2)
plt.plot(transfer_func,x,'g-')
plt.show()
追踪(最近一次通话): 文件“/home/bias_correction.py”,第54行,in transfer_func = invcdf(simcdf)
文件“/usr/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py”,第357行,_ 调用 _ out_of_bounds = self._check_bounds(x_new)
文件“/usr/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py”,第415行,在_check_bounds中 提高ValueError(“x_new中的值高于插值” ValueError:x_new中的值高于插值范围。
答案 0 :(得分:2)
我认为interp1d的论点是相反的。它应该是
invcdf = interp1d(x, obscdf)