This work has been published by Mehdi Rezvandehy and Clayton V. Deutsch at Springer, Journal of Natural Resource Research https://doi.org/10.1007/s11053-016-9322-3. Python implementation is presented here for calculating correct histogram uncertainty.
Summary
There is unavoidable uncertainty in the representative histogram required as an input for geostatistical modeling. This uncertainty should be quantified correctly and incorporated into final modeling because it affects resource/reserve estimation, investment and development decisions. This works confirms a correct approach of quantifying histogram uncertainty by comparing to reference uncertainty found by an automated scan-based approach. Similar patterns of a data configuration are found within a large image and the mean of the specified domain is directly calculated. The correct quantification of histogram uncertainty is defined. The spatial bootstrap provides prior uncertainty that does not consider the domain limits and is not conditioned to the data. This uncertainty is updated in geostatistical modeling to consider the limits and data. The resulting uncertainty closely matches the scan based approach.
Python functions and data files to run this notebook are in my Github page.
import pandas as pd
import numpy as np
import matplotlib
import pylab as plt
from matplotlib import gridspec
from matplotlib.offsetbox import AnchoredText
from IPython.display import clear_output
import geostatspy.GSLIB as GSLIB
import geostatspy.geostats as geostats
from matplotlib.path import Path
from Codes import*
from scipy.stats import norm
from sklearn import preprocessing
import os
os.environ['path']+=";.\\Codes" # All required codes are in this folder
import sys
sys.path.append
sys.path.append('./Codes')
import warnings
warnings.filterwarnings('ignore')
Table of Contents
- 1 Realistic Example (The Jura Data Set)
- 2 Data set
- 3 Variogram
- 4 Histogram Uncertainty with Spatial Bootstrap (Prior Uncertainty)
- 5 Histogram Uncertainty with Conditional Simulation
- 6 Histogram Uncertainty by Spatial bootstrap and Conditional Simulation (Posterior Uncertainty)
- 7 Prior, Conditional Simulation and Posterior Uncertainty in one Plot
- 8 Appendix (Required Python Functions)
Realistic Example (The Jura Data Set)¶
Data set¶
A realistic example is considered for calculating uncertainty in the histogram. The Jura data set was collected by Swiss Federal Institute of Technology at Lausanne. There are 359 data locations for concentration of seven heavy metal in the topsoil (Goovaerts 1997). We decluster the variable nickel (Ni) for this study. First experimental variogram is calculated for major and minor direction of continuity. Then, uncertainty in the histogram of data (mean and variance) is calculated with the spatial bootstrap as prior uncertainty. Finally the prior uncertainty will go through geostatistical simulation for conditioning and clipping to achieve posterior uncertainty that should be correct uncertainty in the histogram of data.
# Looking at the data
Data=GSLIB_View('juraset.dat')
display(Data[0:10])
X | Y | Rock | Land | Cd | Cu | Pb | Co | Cr | Ni | Zn | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2.386 | 3.077 | 3.0 | 3.0 | 1.740 | 25.72 | 77.36 | 9.32 | 38.32 | 21.32 | 92.56 |
1 | 2.544 | 1.972 | 2.0 | 2.0 | 1.335 | 24.76 | 77.88 | 10.00 | 40.20 | 29.72 | 73.56 |
2 | 2.807 | 3.347 | 3.0 | 2.0 | 1.610 | 8.88 | 30.80 | 10.60 | 47.00 | 21.40 | 64.80 |
3 | 4.308 | 1.933 | 2.0 | 3.0 | 2.150 | 22.70 | 56.40 | 11.92 | 43.52 | 29.72 | 90.00 |
4 | 4.383 | 1.081 | 5.0 | 3.0 | 1.565 | 34.32 | 66.40 | 16.32 | 38.52 | 26.20 | 88.40 |
5 | 3.244 | 4.519 | 5.0 | 3.0 | 1.145 | 31.28 | 72.40 | 3.50 | 40.40 | 22.04 | 75.20 |
6 | 3.925 | 3.785 | 5.0 | 3.0 | 0.894 | 27.44 | 60.00 | 15.08 | 30.52 | 21.76 | 72.40 |
7 | 2.116 | 3.498 | 1.0 | 3.0 | 0.525 | 66.12 | 141.00 | 4.20 | 25.40 | 9.92 | 72.08 |
8 | 1.842 | 0.989 | 1.0 | 3.0 | 0.240 | 22.32 | 52.40 | 4.52 | 27.96 | 11.32 | 56.40 |
9 | 1.709 | 1.843 | 3.0 | 3.0 | 0.625 | 18.72 | 41.60 | 12.08 | 33.32 | 16.88 | 75.60 |
Data.describe()
X | Y | Rock | Land | Cd | Cu | Pb | Co | Cr | Ni | Zn | |
---|---|---|---|---|---|---|---|---|---|---|---|
count | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 | 359.000000 |
mean | 2.962206 | 2.631279 | 2.604457 | 2.509749 | 1.287401 | 23.585432 | 54.630975 | 9.437855 | 35.018162 | 20.018774 | 75.881894 |
std | 0.979016 | 1.268629 | 1.330595 | 0.761716 | 0.858027 | 22.267976 | 33.097935 | 3.569146 | 10.662381 | 8.093437 | 30.818669 |
min | 0.491000 | 0.524000 | 1.000000 | 1.000000 | 0.135000 | 3.550000 | 18.680000 | 1.550000 | 3.320000 | 1.980000 | 25.000000 |
25% | 2.260500 | 1.510500 | 2.000000 | 2.000000 | 0.652500 | 10.470000 | 36.320000 | 6.660000 | 27.640000 | 14.600000 | 54.600000 |
50% | 3.040000 | 2.489000 | 2.000000 | 3.000000 | 1.100000 | 17.200000 | 46.800000 | 9.840000 | 34.800000 | 20.680000 | 73.560000 |
75% | 3.674000 | 3.652000 | 3.000000 | 3.000000 | 1.680000 | 26.920000 | 60.200000 | 12.100000 | 41.460000 | 25.380000 | 90.000000 |
max | 4.920000 | 5.690000 | 5.000000 | 4.000000 | 5.129000 | 166.400000 | 300.000000 | 20.600000 | 70.000000 | 53.200000 | 259.840000 |
Figure below shows location map of porosity data with 359 NI samples (left) and histogram of data (right).
font = {'size' : 9}
matplotlib.rc('font', **font)
fig, axs = plt.subplots(figsize=(10, 5), dpi= 200, facecolor='w', edgecolor='k')
gs = gridspec.GridSpec(1, 2, width_ratios=[1.5, 1], wspace=0.12)
ax1=plt.subplot(gs[0])
plt.scatter(Data['X'], Data['Y'],c=Data['Ni'],s=65,linewidths=1,edgecolors='k',
cmap='jet',vmin=0, vmax=35)
plt.colorbar(shrink=0.8)
plt.xlabel('Easting (km)',fontsize='12')
plt.ylabel('Northing (km)',fontsize='12')
plt.title('Location Map of Nickel',fontsize=12)
plt.xlim(0,5.2)
plt.ylim(0,6)
ax1=plt.subplot(gs[1])
plt.xlabel('Ni',fontsize='10')
plt.ylabel('Frequency',fontsize='10')
plt.hist(Data['Ni'], bins=15,ec='black')
n=len(Data['Ni'])
Mean=np.mean(Data['Ni'])
SD=np.sqrt(np.var(Data['Ni']))
Max=np.amax(Data['Ni'])
Min=np.amin(Data['Ni'])
plt.title('Histogram of Nickel',fontsize=12)
plt.gca().set_aspect('0.7')
txt='n=%.0f \n $\mu$=%.1f \n $\sigma$=%.1f \n Max=%.1f \n Min=%.1f'
anchored_text = AnchoredText(txt %(n,Mean,SD,Max,Min), loc=1)
ax1.add_artist(anchored_text)
plt.show()
Variogram¶
#Calculate Experimental Variogram and fitted a Model
#Normal Score Transformation
ns, vr, wt_ns=geostats.nscore(Data, vcol='Ni', wcol=None, ismooth=False, dfsmooth=None, smcol=0, smwcol=0)
#Experimental Variogram with Nromal Score and then fit a theoretical model #############
Data['NS_Ni']=ns
#Azimith 0: Experimental Variogram
tmin=-100;tmax=10000;xlag=0.15;xltol=0.07;nlag=10;azm=0;atol=20;bandwh=20;isill=1
Lag1, Var1, npp_az0=geostats.gamv(Data,'X', 'Y','NS_Ni',tmin,tmax,xlag,xltol,nlag,azm,atol,bandwh,isill)
#Azimith 0: Fitted variogram Model Parameters
nlag=200; xlag=0.01
vario={'nst':2,'nug':0.1, 'cc1':0.45,'it1':1,'azi1':0,'hmaj1':0.35,'hmin1':.35,
'cc2':0.44,'it2':1,'azi2':0,'hmaj2':1,'hmin2':1}
index_az0,Lag1_fit,Var1_fit,cov_az0,ro_az0=geostats.vmodel(nlag, xlag, azm, vario)
#Azimith 90: Experimental Variogram
tmin=-100;tmax=100;xlag=0.15;xltol=0.07;nlag=10;azm=90;atol=20;bandwh=50;isill=1
Lag2, Var2, npp_az90=geostats.gamv(Data,'X', 'Y','NS_Ni',tmin,tmax,xlag,xltol,nlag,azm,atol,bandwh,isill)
#Fitted Model: Fitted variogram Model Parameters
nlag=200; xlag=0.01
vario={'nst':2,'nug':0.1, 'cc1':0.45,'it1':1,'azi1':0,'hmaj1':0.8,'hmin1':.8,
'cc2':0.44,'it2':1,'azi2':0,'hmaj2':1.5,'hmin2':1.5}
index_az90,Lag2_fit,Var2_fit,cov_az90,ro_az90=geostats.vmodel(nlag, xlag, azm, vario)
clear_output()
font = {'size' : 12}
matplotlib.rc('font', **font)
fig, axs = plt.subplots(figsize=(12,12), dpi= 200, facecolor='w', edgecolor='k')
fig.subplots_adjust(hspace = .05, wspace=0.25)
#
#Label and Title of Variogram Plot
label1='Azimuth 0 ' ;symbol1='--or';label1_fit='Fitted Model ';symbol1_fit='-r'
label2='Azimuth 90 ';symbol2='--sb';label2_fit='Fitted Model ';symbol2_fit='-b'
xlabl='Distance (km)'; xlim=[0,1.5]; vlim=[0,1.38]; sill=1;loc=4
ax1=plt.subplot(1,2,1)
#Plot Variograms for Azimith 0
Lag1=np.delete(Lag1, np.where(Var1==0))
Var1=np.delete(Var1, np.where(Var1==0))
plt.plot(Lag1, Var1,symbol1,linewidth=2,markersize=7,label=label1)
plt.plot(Lag1_fit, Var1_fit,symbol1_fit,linewidth=2.5,label=label1_fit)
plt.legend(fontsize=13,loc=loc,frameon=False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.gca().set_aspect('0.8')
plt.axhline(y=sill,linewidth=2,color='k',linestyle='--')
title='Variogram and Fitted Model_Azimuth 0'
plt.title(title,fontsize=15)
plt.xlabel(xlabl,fontsize=15)
ylabl='$\gamma (\mathbf{h}) $'
plt.ylabel(ylabl,rotation=0,fontsize=17,labelpad=15)
plt.xlim(float(xlim[0]),float(xlim[1]))
plt.ylim(float(vlim[0]),float(vlim[1]))
ax1=plt.subplot(1,2,2)
#Plot Variogramz for Azimith 90
Lag2=np.delete(Lag2, np.where(Var2==0))
Var2=np.delete(Var2, np.where(Var2==0))
plt.plot(Lag2, Var2,symbol2,linewidth=2,markersize=7,label=label2)
plt.plot(Lag2_fit, Var2_fit,symbol2_fit,linewidth=2.5,label=label2_fit)
plt.legend(fontsize=13,loc=loc,frameon=False)
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False)
plt.gca().set_aspect('0.8')
plt.axhline(y=sill,linewidth=2,color='k',linestyle='--')
title='Variogram and Fitted Model_Azimuth 90'
plt.title(title,fontsize=15)
plt.xlabel(xlabl,fontsize=15)
ylabl='$\gamma (\mathbf{h}) $'
plt.ylabel(ylabl,rotation=0,fontsize=17,labelpad=15)
plt.xlim(float(xlim[0]),float(xlim[1]))
plt.ylim(float(vlim[0]),float(vlim[1]))
clear_output()
plt.show()
Histogram Uncertainty with Spatial Bootstrap (Prior Uncertainty)¶
x=Data['X']; y=Data['Y']; var=Data['Ni']; seed=256; nsim=100
variog={'nst':2,'nug':0.1, 'cc1':0.45,'it1':1,'azi1':90,'hmaj1':0.8,'hmin1':.35,
'cc2':0.44,'it2':1,'azi2':90,'hmaj2':1.5,'hmin2':1.0}
outfl="./Spatial Bootstrap/SB"
#
yvec_r, mean=Spatial_Bootstrap(x, y, var, variog, seed, nsim,outfl)
Effective number of data= 29.75614622752408 Mean of mean= 19.8114 , Variance of the mean = 2.1952
var1=yvec_r;bins=100;label2='Data Distribution';label1='Spatial Bootstrap (SB)';linewidth='0.8'
title=' 100 Histograms of Spatial Bootstrap (SB)';xlabl='Nickel';ylabl='Cumulative Distribution Function';loc=4
font = {'size' :7.7 }
#
matplotlib.rc('font', **font)
fig=plt.figure(figsize=(8, 3), dpi= 200, facecolor='w', edgecolor='k')
ax1 = plt.subplot(1,2,1)
cdf_real(var,var1,nsim,bins,label1,label2,linewidth,title,xlabl,ylabl,xlimt=(3,45),ylimt=(0,1),loc=loc,axt=ax1)
ax2 = plt.subplot(1,2,2)
histplt (mean,15,title='Prior Uncertainty in the Mean',xlabl='Mean of Nickel',xlimt=(16.5,23),ylimt=None,axt=ax2)
Histogram Uncertainty with Conditional Simulation¶
#Call SGSIM GSLIB code in Python
# Parameter file of SGS
for isim in range(nsim):
txt=" Parameters for SGSIM \n"\
+" ********************** \n"\
+"START OF PARAMETERS:\n"\
+"juraset.dat -file with data\n"\
+"1 2 0 10 0 0 - columns for X,Y,Z,vr,wt,sec.var.\n"\
+"-998.0 1.0e21 - trimming limits\n"\
+"1 -transform the data (0=no, 1=yes)\n"\
+"./Simulation/sgsim.trn - file for output trans table\n"\
+"0 - consider ref. dist (0=no, 1=yes)\n"\
+"./Spatial Bootstrap/SB_"+str(isim+1)+" - file with ref. dist distribution\n"\
+"1 0 - columns for vr and wt\n"\
+str(min(var))+" "+str(max(var))+" - zmin,zmax (for tail extrapolation)\n"\
+"1 4.0 - lower tail option (1=linear), parameter\n"\
+"1 11.5 - upper tail option (1=linear), parameter\n"\
+"1 -debugging level: 0,1,2,3\n"\
+"./Simulation/sgsim.dbg -file for debugging output\n"\
+"./Simulation/sgsim_"+str(isim+1)+" -file for simulation output\n"\
+"1 -number of realizations to generate\n"\
+"50 0.05 0.1 -nx,xmn,xsiz\n"\
+"60 0.05 0.1 -ny,ymn,ysiz\n"\
+"1 1 1 -nz,zmn,zsiz\n"\
+str(10523+isim)+" -random number seed\n"\
+"0 24 -min and max original data for sim\n"\
+"24 -number of simulated nodes to use\n"\
+"1 -assign data to nodes (0=no, 1=yes)\n"\
+"1 3 -multiple grid search (0=no, 1=yes),num\n"\
+"0 -maximum data per octant (0=not used)\n"\
+"1.2 0.9 1.0 -maximum search radii\n"\
+"90 0.0 0.0 -angles for search ellipsoid\n"\
+"0 0.60 1.0 -ktype: 0=SK,1=OK,2=LVM,3=EXDR,4=COLC, corr and VRF\n"\
+"lvmfl.dat - file with LVM, EXDR, or COLC variable\n"\
+"1 - column for secondary variable\n"\
+"2 0.11 -nst, nugget effect\n"\
+"1 0.45 90.0 0.0 0.0 -it,cc,ang1,ang2,ang3\n"\
+" 0.8 0.35 1.0 -a_hmax, a_hmin, a_vert\n"\
+"1 0.44 90.0 1.0 0.0 -it,cc,ang1,ang2,ang3\n"\
+" 1.5 1.0 5.0 -a_hmax, a_hmin, a_vert \n"
#
f1 = open('temp', "w");
f1.write(txt)
f1.close()
! echo temp | sgsim
! rm temp
clear_output()
font = {'size' :11 }
#
matplotlib.rc('font', **font)
fig=plt.figure(figsize=(12, 8), dpi= 200, facecolor='w', edgecolor='k')
# Clip
path=(1,0.1),(0.2,0.1),(0.2,2.7),(0.75,2.7),\
(0.75,3.5),(1,3.5),(1,4),(1.5,4),(1.5,4.5),(2,4.5),(2,5),(2.5,5),(2.5,6),\
(4.5,6),(4.5,5.5),(4.8,5.5),(4.8,5),(5,5),(5,4.2),(5.3,4.2),(5.3,0.75),\
(5,0.75),(5,0),(4.5,0.2),(3.5,0.2),(3.5,0.1),(1.2,0.1),(1.2,0.3),(1,0.1)
path1 = np.asarray(path)
path2 = Path(path1)
patch = PathPatch(path2, facecolor='none',linewidth=1.5)
#
sim=[]; mean_CS=[]
for i in range(nsim):
df_sim=GSLIB.GSLIB2Dataframe('./Simulation/sgsim_'+str(i+1))
sim.append(df_sim.to_numpy())
mean_CS.append(np.mean(df_sim.to_numpy()))
#
nsim_=6;nx=50; xmn=0.05;xsiz=0.1;ny=60; ymn=0.05;ysiz=0.1
for isim in range(nsim_):
if(isim<6):
ax1=plt.subplot(2,3,isim+1)
plt.scatter(Data['X'], Data['Y'],c=Data['Ni'],s=25,linewidths=1,edgecolors='k',
cmap='jet',vmin=0, vmax=35)
plt.xlabel('Easting (km)',fontsize='11')
plt.ylabel('Northing (km)',fontsize='11')
plt.title('Realization# '+str(isim+1),fontsize=12)
sim_clip=np.zeros((ny,nx))
for j in range(ny):
for i in range(nx):
xa=xmn+(i)*xsiz; ya=ymn+(j)*ysiz
inside=path2.contains_points([(xa,ya)])
index=i+1 + (j-1+1)*nx
if(inside[0]):
sim_clip[j,i]=sim[isim][index-1]
else:
sim_clip[j,i]=np.NAN
im = plt.imshow(sim_clip, extent=(xmn+xsiz/2, xsiz*nx+xmn, ymn+ysiz/2, ysiz*ny+ymn), cmap='jet',
origin='lower',interpolation='nearest',vmin=0, vmax=35)
plt.xlim(0,5.2)
plt.ylim(0,6)
plt.colorbar(shrink=0.8)
plt.show()
var1=sim;bins=100;label2='Data Distribution';label1='Conditional Simulation (CS)';linewidth='0.8'
title=' 100 Histograms of Conditional Simulation (CS)';xlabl='Nickel';ylabl='Cumulative Distribution Function';loc=4
font = {'size' :7.7 }
#
matplotlib.rc('font', **font)
fig=plt.figure(figsize=(8, 3), dpi= 200, facecolor='w', edgecolor='k')
ax1 = plt.subplot(1,2,1)
cdf_real(var,var1,nsim,bins,label1,label2,linewidth,title,xlabl,ylabl,xlimt=(3,45),ylimt=(0,1),loc=loc,axt=ax1)
ax2 = plt.subplot(1,2,2)
histplt (mean_CS,10,title='Histogram of Mean (CS)',xlabl='Mean of Nickel',xlimt=(16.5,23),ylimt=None,axt=ax2)
Histogram Uncertainty by Spatial bootstrap and Conditional Simulation (Posterior Uncertainty)¶
#Call SGSIM GSLIB code in Python for variogram declustering
# Parameter file of SGS
for isim in range(nsim):
txt=" Parameters for SGSIM \n"\
+" ********************** \n"\
+"START OF PARAMETERS:\n"\
+"juraset.dat -file with data\n"\
+"1 2 0 10 0 0 - columns for X,Y,Z,vr,wt,sec.var.\n"\
+"-998.0 1.0e21 - trimming limits\n"\
+"1 -transform the data (0=no, 1=yes)\n"\
+"./Simulation/sgsim.trn - file for output trans table\n"\
+"1 - consider ref. dist (0=no, 1=yes)\n"\
+"./Spatial Bootstrap/SB_"+str(isim+1)+" - file with ref. dist distribution\n"\
+"1 0 - columns for vr and wt\n"\
+str(min(var))+" "+str(max(var))+" - zmin,zmax (for tail extrapolation)\n"\
+"1 4.0 - lower tail option (1=linear), parameter\n"\
+"1 11.5 - upper tail option (1=linear), parameter\n"\
+"1 -debugging level: 0,1,2,3\n"\
+"./Simulation/sgsim.dbg -file for debugging output\n"\
+"./Simulation/sgsim_"+str(isim+1)+" -file for simulation output\n"\
+"1 -number of realizations to generate\n"\
+"50 0.05 0.1 -nx,xmn,xsiz\n"\
+"60 0.05 0.1 -ny,ymn,ysiz\n"\
+"1 1 1 -nz,zmn,zsiz\n"\
+str(10520+isim)+" -random number seed\n"\
+"0 24 -min and max original data for sim\n"\
+"24 -number of simulated nodes to use\n"\
+"1 -assign data to nodes (0=no, 1=yes)\n"\
+"1 3 -multiple grid search (0=no, 1=yes),num\n"\
+"0 -maximum data per octant (0=not used)\n"\
+"1.2 0.9 1.0 -maximum search radii\n"\
+"90 0.0 0.0 -angles for search ellipsoid\n"\
+"0 0.60 1.0 -ktype: 0=SK,1=OK,2=LVM,3=EXDR,4=COLC, corr and VRF\n"\
+"lvmfl.dat - file with LVM, EXDR, or COLC variable\n"\
+"1 - column for secondary variable\n"\
+"2 0.11 -nst, nugget effect\n"\
+"1 0.45 90.0 0.0 0.0 -it,cc,ang1,ang2,ang3\n"\
+" 0.8 0.35 1.0 -a_hmax, a_hmin, a_vert\n"\
+"1 0.44 90.0 1.0 0.0 -it,cc,ang1,ang2,ang3\n"\
+" 1.5 1.0 5.0 -a_hmax, a_hmin, a_vert \n"
#
f1 = open('temp', "w");
f1.write(txt)
f1.close()
! echo temp | sgsim
! rm temp
clear_output()
font = {'size' :11 }
#
matplotlib.rc('font', **font)
fig=plt.figure(figsize=(12, 8), dpi= 200, facecolor='w', edgecolor='k')
# Clip simulation
path=(1,0.1),(0.2,0.1),(0.2,2.7),(0.75,2.7),\
(0.75,3.5),(1,3.5),(1,4),(1.5,4),(1.5,4.5),(2,4.5),(2,5),(2.5,5),(2.5,6),\
(4.5,6),(4.5,5.5),(4.8,5.5),(4.8,5),(5,5),(5,4.2),(5.3,4.2),(5.3,0.75),\
(5,0.75),(5,0),(4.5,0.2),(3.5,0.2),(3.5,0.1),(1.2,0.1),(1.2,0.3),(1,0.1)
path1 = np.asarray(path)
path2 = Path(path1)
patch = PathPatch(path2, facecolor='none',linewidth=1.5)
#
sim=[]; mean_pos=[]
for i in range(nsim):
df_sim=GSLIB.GSLIB2Dataframe('./Simulation/sgsim_'+str(i+1))
sim.append(df_sim.to_numpy())
mean_pos.append(np.mean(df_sim.to_numpy()))
#
nsim_=6;nx=50; xmn=0.05;xsiz=0.1;ny=60; ymn=0.05;ysiz=0.1
for isim in range(nsim_):
if(isim<6):
ax1=plt.subplot(2,3,isim+1)
plt.scatter(Data['X'], Data['Y'],c=Data['Ni'],s=25,linewidths=1,edgecolors='k',
cmap='jet',vmin=0, vmax=35)
plt.xlabel('Easting (km)',fontsize='11')
plt.ylabel('Northing (km)',fontsize='11')
plt.title('Realization# '+str(isim+1),fontsize=12)
sim_clip=np.zeros((ny,nx))
for j in range(ny):
for i in range(nx):
xa=xmn+(i)*xsiz; ya=ymn+(j)*ysiz
inside=path2.contains_points([(xa,ya)])
index=i+1 + (j-1+1)*nx
if(inside[0]):
sim_clip[j,i]=sim[isim][index-1]
else:
sim_clip[j,i]=np.NAN
im = plt.imshow(sim_clip, extent=(xmn+xsiz/2, xsiz*nx+xmn, ymn+ysiz/2, ysiz*ny+ymn), cmap='jet',
origin='lower',interpolation='nearest',vmin=0, vmax=35)
plt.xlim(0,5.2)
plt.ylim(0,6)
plt.colorbar(shrink=0.8)
plt.show()
var1=sim;bins=100;label2='Data Distribution';label1='Posterior Uncertainy';linewidth='0.8'
title=' 100 Histograms of Posterior Uncertainy';xlabl='Nickel';ylabl='Cumulative Distribution Function';loc=4
font = {'size' :7.7 }
#
matplotlib.rc('font', **font)
fig=plt.figure(figsize=(8, 3), dpi= 200, facecolor='w', edgecolor='k')
ax1 = plt.subplot(1,2,1)
cdf_real(var,var1,nsim,bins,label1,label2,linewidth,title,xlabl,ylabl,xlimt=(3,45),ylimt=(0,1),loc=loc,axt=ax1)
ax2 = plt.subplot(1,2,2)
histplt (mean_pos,10,title='Posterior Uncertainty in the Mean',xlabl='Mean of Nickel',xlimt=(16.5,23),ylimt=None,axt=ax2)
Prior, Conditional Simulation and Posterior Uncertainty in one Plot¶
font = {'size' :7.7 }
matplotlib.rc('font', **font)
fig=plt.figure(figsize=(7, 4), dpi= 200, facecolor='w', edgecolor='k')
# Uncertainty in the Mean with Spatial Bootstrap (Prior Uncertainty)
data = mean
mu, std = norm.fit(data)
# Plot the PDF.
xmin, xmax = min(data),max(data)
x = np.linspace(xmin-2, xmax+5, 1000)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'r', linewidth=2,label='Prior Uncertainty, '+ 'Variance='+str(np.round(std**2,2)))
# Uncertainty in the Mean with Conditional Simulation
data = mean_CS
mu, std = norm.fit(data)
# Plot the PDF.
xmin, xmax = min(data),max(data)
x = np.linspace(xmin-2, xmax+5, 1000)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'b', linewidth=2,label='Conditional Simulation, '+ 'Variance='+str(np.round(std**2,2)))
# Uncertainty in the Mean by Conditional Simulation and Bootstrap (Posterior Uncertainty)
data = mean_pos
mu, std = norm.fit(data)
# Plot the PDF.
xmin, xmax = min(data),max(data)
x = np.linspace(xmin-2, xmax+5, 1000)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'g', linewidth=4,label='Posterior, '+ 'Variance='+str(np.round(std**2,2)))
plt.xlim((15.5,25))
plt.ylim(0, 0.8)
plt.xlabel('Means',fontsize='12')
plt.title('Uncertainty in the Mean with Different Approaches',fontsize='11')
#plt.legend(fontsize='9',framealpha =1, loc=1,bbox_to_anchor=(0.75, -0.1))
plt.legend(fontsize='8',framealpha =1, loc=2)
plt.show()
- Home
-
- Prediction of Movie Genre by Fine-tunning GPT
- Fine-tunning BERT for Fake News Detection
- Covid Tweet Classification by Fine-tunning BART
- Semantic Search Using BERT
- Abstractive Semantic Search by OpenAI Embedding
- Fine-tunning GPT for Style Completion
- Extractive Question-Answering by BERT
- Fine-tunning T5 Model for Abstract Title Prediction
- Image Captioning by Fine-tunning ViT
- Build Serverless ChatGPT API
- Statistical Analysis in Python
- Clustering Algorithms
- Customer Segmentation
- Time Series Forecasting
- PySpark Fundamentals for Big Data
- Predict Customer Churn
- Classification with Imbalanced Classes
- Feature Importance
- Feature Selection
- Text Similarity Measurement
- Dimensionality Reduction
- Prediction of Methane Leakage
- Imputation by LU Simulation
- Histogram Uncertainty
- Delustering to Improve Preferential Sampling
- Uncertainty in Spatial Correlation
-
- Machine Learning Overview
- Python and Pandas
- Main Steps of Machine Learning
- Classification
- Model Training
- Support Vector Machines
- Decision Trees
- Ensemble Learning & Random Forests
- Artificial Neural Network
- Deep Neural Network (DNN)
- Unsupervised Learning
- Multicollinearity
- Introduction to Git
- Introduction to R
- SQL Basic to Advanced Level
- Develop Python Package
- Introduction to BERT LLM
- Exploratory Data Analysis
- Object Oriented Programming in Python
- Natural Language Processing
- Convolutional Neural Network
- Publications