Hi everyone,
I am trying to predict the failure probability as a part of structural reliability analysis. I want to use bayesian concept to predict the failure probability thus considering the joint distribution of influence paremeters directly in the failure surface. I tried first to use a very simple example with hypothetical values to see if the concept works or not then I devlope the original concept. This is my problem:
simple there is a failure surface G = x - y[i] while x is an uncertain parameter and y is the observation. I want to estimate the probability the G<0. I used target function in stan to tranfoming the G values to an increment log sacle and then in generate quantities tried to predic the posterior of G<0. one i use hypothetic data, surpring i see that always for all cases the values are G<0 no matter what value i use!! here is my simple code:
data {
int<lower=0> N; // Number of inputs
vector[N] y; // Inputs for y
}
parameters {
real x; // Parameter a
}
model {
// Prior distribution for parameters a and b
x ~ normal(0.5, 0.1); // Specify prior distribution for b
for (i in 1:N) {
real G = x - y[i];
target += if_else(G < 0, 0, negative_infinity()); // Increment the log density when G < 0
}
}
generated quantities {
int<lower=0, upper=1> G_less_than_zero[N]; // Indicator variable for G < 0
// Compute indicator variable
for (i in 1:N) {
real G = x - y[i];
G_less_than_zero[i] = (G < 0) ? 1 : 0;
}
}
i used these values to test the code:
N <- 100
y <- rnorm(N, mean = 0.4, sd = 0.1)
# Fit the Stan model to the data
fit <- sampling(stan_model, data = list(N = N, y = y))
# Extract the posterior samples for G_less_than_zero and G
G_less_than_zero_samples <- extract(fit)$G_less_than_zero
G_samples <- extract(fit)$G
# Compute the posterior probability that G < 0
posterior_prob_G_less_than_zero <- mean(G_less_than_zero_samples)
# Plot the posterior distribution for G < 0
hist(G_less_than_zero_samples, main = "Posterior Distribution for G < 0", xlab = "G < 0")
# Plot the posterior distribution for G
hist(G_samples, main = "Posterior Distribution for G", xlab = "G")
I will be thankful if you kindly advice me if I am doing wrong in using target function and have your valubale advice to solve the issue.