2

伝達関数を見つけるために、観測データのガンマ関数の逆CDFを見つけようとしています。全体の目的は、 CDFobs(y)= CDFsim(x)と一致するCDFによって、シミュレートされたデータのバイアスを修正することです。スローしてエラーになる以下のアプローチでやってみました。

以下の画像は、CDFとplot(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行目、transfer_func = invcdf(simcdf)

ファイル"/usr/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py"、357行目、_ call _ out_of_bounds = self._check_bounds(x_new)

_check_boundsのファイル"/usr/lib/python2.7/dist-packages/scipy/interpolate/interpolate.py"、行415、raise ValueError("x_newの値は補間を上回っています"ValueError:x_newの値は上にあります補間範囲。

4

1 に答える 1

2

interp1d の引数が逆になっていると思います。そのはず

invcdf = interp1d(x, obscdf)
于 2013-01-02T14:54:10.790 に答える