0% found this document useful (0 votes)
4 views5 pages

Python Code For Cross Stat

Python-Code for programming for determination of cross statistics

Uploaded by

kc.rajan0506
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views5 pages

Python Code For Cross Stat

Python-Code for programming for determination of cross statistics

Uploaded by

kc.rajan0506
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

import numpy as np

import matplotlib.pyplot as plt

# Load data from CSV file

data = np.genfromtxt('berea_subset.csv', delimiter=',', skip_header=1)

# Extract coordinates and variables

X = data[:,0]

Y = data[:,1]

Resistivity = data[:,2]

Permeability = data[:,3]

# Define lag distances

lags = [3, 6, 9, 12, 15, 18]

# User-defined function to calculate correlation

def correlation(x,y):

n = len(x)

mean_x = sum(x)/n

mean_y = sum(y)/n

std_x = (sum((x[i]-mean_x)**2 for i in range(n))/n)**0.5

std_y = (sum((y[i]-mean_y)**2 for i in range(n))/n)**0.5

return covariance(x,y)/(std_x*std_y)

# User-defined function to calculate covariance

def covariance(x, y):

n = len(x)

mean_x = sum(x) / n

mean_y = sum(y) / n

return sum((x[i] - mean_x) * (y[i] - mean_y) for i in range(n)) / n


# User-defined function to calculate cross-semivariance

def cross_semivariance(pairs):

n = len(pairs)

gamma = sum((pair[2] - pair[3]) * (pair[0] - pair[1]) for pair in pairs) / (2 * n)

return gamma

# User-defined function to create pairs

def create_pairs(x, y, resis, perm, lag, direction):

pairs = []

if direction == 'horizontal':

for i in range(len(resis)):

for j in range(i + 1, len(resis)):

if y[i] == y[j] and abs(x[i] - x[j]) == lag:

pairs.append((resis[i], resis[j], perm[i], perm[j]))

#print(f"{perm[i]}, {resis[j]}")

elif direction == 'vertical':

for i in range(len(resis)):

for j in range(i + 1, len(resis)):

if x[i] == x[j] and abs(y[i] - y[j]) == lag:

pairs.append((resis[i], resis[j], perm[i], perm[j]))

return pairs

# Function to calculate cross-statistics and print pairs

def calculate_cross_statistics(X, Y, Resistivity, Permeability, lags):

results = {'horizontal': {'Lag': [], 'Number of Pairs': [], 'Cross-Covariance': [], 'Cross-Correlation': [],
'Cross-Semivariance': []},

'vertical': {'Lag': [], 'Number of Pairs': [], 'Cross-Covariance': [], 'Cross-Correlation': [], 'Cross-
Semivariance': []}}

for direction in ['horizontal', 'vertical']:

for lag in lags:

pairs = create_pairs(X, Y, Resistivity, Permeability, lag, direction)


#print(f"\nPairs for lag {lag} in {direction} direction: {pairs}")

if not pairs:

continue

p_var = [pair[2] for pair in pairs]

s_var = [pair[1] for pair in pairs]

cov = covariance(p_var, s_var)

corr = correlation(p_var, s_var)

semi = cross_semivariance(pairs)

results[direction]['Lag'].append(lag)

results[direction]['Number of Pairs'].append(len(pairs))

results[direction]['Cross-Covariance'].append(cov)

results[direction]['Cross-Correlation'].append(corr)

results[direction]['Cross-Semivariance'].append(semi)

return results

# Calculate cross-statistics

cross_statistics = calculate_cross_statistics(X, Y, Resistivity, Permeability, lags)

# Print results

for direction in ['horizontal', 'vertical']:

print(f"\n{direction.capitalize()} Direction:")

print(f"{'Lag':<10}{'Number of Pairs':<20}{'Cross-Covariance':<20}{'Cross-Correlation':<20}{'Cross-
Semivariance':<20}")

for i in range(len(cross_statistics[direction]['Lag'])):

print(f"{cross_statistics[direction]['Lag'][i]:<10}{cross_statistics[direction]['Number of
Pairs'][i]:<20}{cross_statistics[direction]['Cross-
Covariance'][i]:<20.4f}{cross_statistics[direction]['Cross-
Correlation'][i]:<20.4f}{cross_statistics[direction]['Cross-Semivariance'][i]:<20.4f}")

# Plotting the scatter of pairs

def plot_pairs_scatter(cross_statistics):

directions = ['horizontal', 'vertical']

for direction in directions:

plt.figure(figsize=(15, 10))

for i, lag in enumerate(lags):

pairs = create_pairs(X, Y, Resistivity, Permeability, lag, direction)

if not pairs:

continue

p_var = [pair[2] for pair in pairs] # Primary variable Permeability

s_var = [pair[1] for pair in pairs] # Secondary variable Resistivity

plt.subplot(2, 3, i + 1)

plt.scatter(s_var, p_var, alpha=0.7)

plt.title(f'For Lag: {lag} ({direction.capitalize()})')

plt.xlabel('Resistivity')

plt.ylabel('Permeability')

plt.xlim(240)

#plt.grid()

plt.tight_layout()

plt.show()

# Call the plot function

plot_pairs_scatter(cross_statistics)

# Plotting the results for horizontal and vertical directions separately


def plot_cross_statistics(cross_statistics):

directions = ['horizontal', 'vertical']

metrics = ['Cross-Covariance', 'Cross-Correlation', 'Cross-Semivariance']

for direction in directions:

plt.figure(figsize=(16, 5)) # Adjusted figure size for one row

for i, metric in enumerate(metrics):

plt.subplot(1, 3, i + 1) # 1 row and 3 columns

lags = cross_statistics[direction]['Lag']

values = cross_statistics[direction][metric]

plt.plot(lags, values, marker='o', label=direction.capitalize())

plt.title(f'{metric} vs Lag ({direction.capitalize()})')

plt.xlabel('Lag')

plt.ylabel(metric)

plt.grid()

plt.legend()

plt.tight_layout()

plt.show()

# Call the plot function

plot_cross_statistics(cross_statistics)

You might also like