def test_variogram_cloud_3(): n = 100 x = np.zeros(n) y = np.zeros(n) v = np.zeros(n) (hc, gc) = variogram.cloud(x, y, v) assert (hc.shape[0] == n * (n - 1) / 2 and gc.shape[0] == n * (n - 1) / 2)
def main(): """ Plots variogram cloud of cobalt concentration measurments. """ jura_data = np.genfromtxt('data.txt', names=True) hc, gc = variogram.cloud(jura_data['X'], jura_data['Y'], jura_data['Co']) plt.scatter(hc, gc, s=10) plt.xlabel('distance') plt.ylabel('Squared differences of concentrations') plt.xlim(xmin=0) plt.ylim(ymin=0) plt.title('Variogram cloud of measured cobalt concentrations (mg/kg)') plt.show()
def main(): """ Plots experimental variogram of cobalt concentration data. """ lag = 0.1 # width of bin nlag = 40 # number of bins jura_data = np.genfromtxt('data.txt', names=True) hc, gc = variogram.cloud(jura_data['X'], jura_data['Y'], jura_data['Co']) he, ge = variogram.experimental(hc, gc, lag, nlag) plt.scatter(he, ge, s=30) # marker size 's' set to 30 variance = np.var(jura_data['Co']) # variance presented as dashed line plt.axhline(variance, linestyle='--') plt.scatter(he, ge) # axes labels plt.xlabel('distance') plt.ylabel('gamma') # axes limits plt.xlim(xmin=0, xmax=lag * nlag) plt.ylim(ymin=0) plt.title('Experimental variogram of cobalt concentration (mg/kg)') plt.show()
def main(): """ Plots different variogram models and compares them to experimental data. """ lag = 0.1 nlag = 40 jura_data = np.genfromtxt('data.txt', names=True) hc, gc = variogram.cloud(jura_data['X'], jura_data['Y'], jura_data['Co']) he, ge = variogram.experimental(hc, gc, lag, nlag) # Print one figure with 4 subplots, subplot syntax: (rows, columns, number) # Each figure represents a different variogram model for the same data plt.figure(1) # Gaussian plt.subplot(221) x = np.linspace(0, nlag * lag, 1000) y = model.gaussian(x, 10, 0.9) + 3.0 plt.scatter(he, ge, s=30) variance = np.var(jura_data['Co']) plt.axhline(variance, linestyle='--') plt.xlim(xmin=0, xmax=lag * nlag) plt.ylim(ymin=0) plt.title('Gaussian') plt.plot(x, y) # Exponential plt.subplot(222) x = np.linspace(0, nlag * lag, 1000) y = model.exponential(x, 12.5, 1.5) plt.scatter(he, ge, s=30) variance = np.var(jura_data['Co']) plt.axhline(variance, linestyle='--') plt.xlim(xmin=0, xmax=lag * nlag) plt.ylim(ymin=0) plt.title('Exponential') plt.plot(x, y) # Spherical plt.subplot(223) x = np.linspace(0, nlag * lag, 1000) y = model.spherical(x, 13, 1.5) plt.scatter(he, ge, s=30) variance = np.var(jura_data['Co']) plt.axhline(variance, linestyle='--') plt.xlim(xmin=0, xmax=lag * nlag) plt.ylim(ymin=0) plt.xlabel('distance') plt.ylabel('gamma') plt.title('Spherical') plt.plot(x, y) # Pure nugget plt.subplot(224) x = np.linspace(0, nlag * lag, 1000) y = model.nugget(x, 13) plt.scatter(he, ge, s=30) # marker size 's' set to 30 variance = np.var(jura_data['Co']) plt.axhline(variance, linestyle='--') plt.xlim(xmin=0, xmax=lag * nlag) plt.ylim(ymin=0) plt.title('Nugget') plt.plot(x, y) plt.show()
def main(): """ Performs cross validation for different model variograms. """ jura_data = np.genfromtxt('data.txt', names=True) x, y, v = jura_data['X'], jura_data['Y'], jura_data['Co'] success, Q1, Q2, MSE, cR = cross_validation.orthonormal_residuals( x, y, v, model_function1) print('function type, success, Q1, Q2, MSE, cR') print('1', success, Q1, Q2, MSE, cR) success, Q1, Q2, MSE, cR = cross_validation.orthonormal_residuals( x, y, v, model_function2) print('2', success, Q1, Q2, MSE, cR) success, Q1, Q2, MSE, cR = cross_validation.orthonormal_residuals( x, y, v, model_function3) print('3', success, Q1, Q2, MSE, cR) success, Q1, Q2, MSE, cR = cross_validation.orthonormal_residuals( x, y, v, model_function4) print('4', success, Q1, Q2, MSE, cR) success, Q1, Q2, MSE, cR, v_est, v_var, v, normalized_error = cross_validation.orthonormal_residuals( x, y, v, model_function5, return_values=True) print('5', success, Q1, Q2, MSE, cR) plt.figure(1) plt.subplot(221) plt.scatter(v_est, v[1:], marker='o') plt.plot(v_est, v_est) plt.xlabel('Estimation') plt.ylabel('True value') plt.axis('scaled') plt.xlim(xmin=0) plt.ylim(ymin=0) plt.subplot(222) plt.hist(normalized_error, normed=1) x_draw = np.linspace(-5, 5, 100) plt.plot(x_draw, norm.pdf(x_draw, 0, 1)) plt.xlabel('Normalised error') plt.ylabel('pdf') plt.title('Histogram of normalised error') plt.subplot(223) plt.scatter(x[1:], y[1:], s=10 * np.abs(normalized_error), c=np.abs(normalized_error)) plt.xlabel('X') plt.ylabel('Y') plt.title('Normalised error') hc, gc = variogram.cloud(x[1:], y[1:, ], normalized_error) nlag = 8 lag = (np.max((np.max(x), np.max(y))) - np.min( (np.min(x), np.min(y)))) * 2 / 3 / nlag he, ge = variogram.experimental(hc, gc, lag, nlag) plt.subplot(224) plt.scatter(he, ge) plt.axhline(1, linestyle='--') plt.ylim([0.0, 1.1 * np.max(ge)]) plt.xlabel('Estimation') plt.ylabel('True value') plt.title('Variogram of normalised error') plt.show()
def main(): """ Application of conditional simulations to Pb data """ jura_data = np.genfromtxt('data.txt', names=True) ns = nscore.transform(jura_data['Pb']) y = ns.direct(jura_data['Pb']) hc, gc = variogram.cloud(jura_data['X'], jura_data['Y'], y) nlag = 50 hmax = 2 * np.max(hc) / 3 lag = hmax / nlag he, ge = variogram.experimental(hc, gc, lag, nlag) hm = np.linspace(0, hmax, 300) vm = model_function(hm) cm = covmodel(hm) plt.figure(1) plt.scatter(he, ge) plt.plot(hm, vm) plt.plot(hm, cm) plt.xlabel('h') plt.ylabel('gamma(h)') nx = 60 ny = 60 xmin = 1.6 xmax = 4.2 ymin = 0.8 ymax = 3.4 xi, yi = np.meshgrid(np.linspace(xmin, xmax, nx), np.linspace(ymin, ymax, ny)) v_est, v_var = kriging.ordinary_mesh(jura_data['X'], jura_data['Y'], y, xi.flatten(), yi.flatten(), model_function) v_sim1 = sgs.conditional(jura_data['X'], jura_data['Y'], y, xi.flatten(), yi.flatten(), covmodel, 15) v_sim2 = sgs.conditional(jura_data['X'], jura_data['Y'], y, xi.flatten(), yi.flatten(), covmodel, 15) v_sim3 = sgs.conditional(jura_data['X'], jura_data['Y'], y, xi.flatten(), yi.flatten(), covmodel, 15) plt.figure(2) plt.subplot(221) grid = v_est.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Kriging') plt.colorbar() plt.subplot(222) grid = v_sim1.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Simulation 1') plt.colorbar() plt.subplot(223) grid = v_sim2.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Simulation 2') plt.colorbar() plt.subplot(224) grid = v_sim3.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Simulation 3') plt.colorbar() real_est = ns.back(v_est) real_sim1 = ns.back(v_sim1) real_sim2 = ns.back(v_sim2) real_sim3 = ns.back(v_sim3) plt.figure(3) plt.subplot(221) grid = real_est.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Kriging') plt.colorbar() plt.subplot(222) grid = real_sim1.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Simulation 1') plt.colorbar() plt.subplot(223) grid = real_sim2.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Simulation 2') plt.colorbar() plt.subplot(224) grid = real_sim3.reshape((nx, ny)) plt.imshow(grid, extent=(xi.min(), xi.max(), yi.min(), yi.max()), interpolation='nearest') plt.title('Simulation 3') plt.colorbar() # histograms plt.figure(4) plt.subplot(221) plt.hist(jura_data['Pb']) plt.title('Pb measurements') plt.subplot(222) plt.hist(real_est) plt.title('Kriged values') plt.subplot(223) plt.hist(real_sim1) plt.title('Simulated 1 values') plt.subplot(224) plt.hist(real_sim2) plt.title('Simulated 2 values') plt.show()
def test_variogram_cloud(): x = np.array([3.0]) y = np.array([2.0]) v = np.array([1.0]) (hc, gc) = variogram.cloud(x, y, v) assert (hc.size == 0 and gc.size == 0)
def test_variogram_cloud_2(): x = np.array([2.0, 3.0]) y = np.array([2.0, 3.0]) v = np.array([1.0, 2.0]) (hc, gc) = variogram.cloud(x, y, v) assert (hc[0] == np.sqrt(2.0) and gc[0] == 0.5)