code_corrected
code_corrected
def func(x):
return stats.norm.cdf((x - rho * stats.norm.ppf(u)) / np.sqrt(1 - rho **
2)) - u
return x_t
def func(v):
term1 = (-np.log(u)) ** theta
term2 = (-np.log(v)) ** theta
C_uv = np.exp(- (term1 + term2) ** (1 / theta))
print(u,v)
print('***')
return C_uv - u # Find root where this equals zero
return x_t
return X_t
# Conditional CDF using Gumbel copula for a given x (if x > 0) and rainfall value y
def O_Y_given_X_x_and_X_positive(y, x):
u, v = H_x(x), H_y(y)
c_uv_partial = gumbel_copula_partial_u(u, v, theta)
h_x = np.count_nonzero(rainfall_data[:-1] == x) / len(rainfall_data[:-1]) if
len(rainfall_data[:-1]) > 0 else 0
f_y = np.count_nonzero(rainfall_data[1:] == y) / len(rainfall_data[1:]) if
len(rainfall_data[1:]) > 0 else 0
denom = P_10 * h_x + P_11 * f_y
return (P_10 * h_x + P_11 * f_y * c_uv_partial) / denom if denom > 0 else
H_y(y)
# Inverse function: Solve for u given v and the partial derivative value
def inverse_gumbel_partial(du, v, theta):
"""Compute inverse of Gumbel copula's partial derivative."""
if du <= 0 or du >= 1 or v <= 0: # Check for invalid values
return np.nan # Return NaN so we can detect failure
# Simulation function
def simulate_markov_chain(T, p00, p01, p11,p10):
else:
xt[t] = 0
o1[t] = O
pt1[t] = 0
st = "**3**"
break # Exit while loop
print(t,"{:.3f}".format(rainfall_data[t]),"{:.3f}".format(xt[t]),"{:.3f}".format(xt
[t-1]),"{:.3f}".format(pt1[t]),"{:.3f}".format(o1[t]),st)
return xt
df1 = pd.read_csv('D:\\pythonProject1\\venv\\Rain_imd\\IMD_DataSET\\annual.csv')
rainfall_data = df1.iloc[3:19, 7].values # Example selection of data
print(rainfall_data)
n = len(rainfall_data) - 1
dry_prev = rainfall_data[:-1] == 0
wet_prev = rainfall_data[:-1] > 0
dry_curr = rainfall_data[1:] == 0
wet_curr = rainfall_data[1:] > 0
print(n,theta)
T = len(rainfall_data)
simulated_rainfall=xt_values
n = len(simulated_rainfall) - 1
dry_prev = simulated_rainfall[:-1] == 0
wet_prev = simulated_rainfall[:-1] > 0
dry_curr = simulated_rainfall[1:] == 0
wet_curr = simulated_rainfall[1:] > 0
# # print(simulated_rainfall)
# plt.figure(figsize=(10, 6))
# plt.scatter(rainfall_data, simulated_rainfall)
# print(rainfall_data,simulated_rainfall)
plt.figure(figsize=(10, 6))
plt.plot(rainfall_data, label="Observed Rainfall", marker="o", linestyle="-",
alpha=0.7)
plt.plot(simulated_rainfall, label="Simulated Rainfall", marker="x",
linestyle="--", alpha=0.7)
plt.xlabel("Time (days)")
plt.ylabel("Rainfall (mm)")
plt.title("Observed vs Simulated Rainfall")
plt.legend()
plt.grid(True)
plt.show()