Limiting time on Survival Analysis

I am attempting to follow the tutorial here to do parametric survival analysis. This works to some extent but the predictive posterior on the y (time to failure) gives large numbers with the median time going well into 10’s years whereas I expect a machine to last at most 5 years.

I attempted to circumvent this by introducing an intermediary variable called mean (see model below) to restrict how far out this model can predict the mode time for a gumbel distribution.

def gumbel_sf(y, μ, σ):
    """
    Survival function of Gumbel distribution. (1 - cdf)
    """
    return 1. - tt.exp(-tt.exp(-(y - μ) / σ))

with pm.Model() as weibull_model:
    β = pm.Normal('β', 0., 1, shape=D)
    μ = X_.dot(β)
    s = pm.Bound(pm.Normal, lower=0, upper=0.1)('s', 5.)
    mean = pm.Bound(pm.Normal, lower=ymin, upper=ymax)('μ', μ, 0.05, shape=N)

    # Likelihood
    y_obs = pm.Gumbel('y_obs', mean[death_], s, observed=Y_[death_])
    y_cens = pm.Potential('y_cens', gumbel_sf(Y_[~death_], mean[~death_], s))

    # sample from posterior
    trace = pm.sample(tune=1000)

So I have a few questions about this,

  1. After sampling for ~300 steps I get the error below. How do I fix this?
    ValueError: Mass matrix contains zeros on the diagonal.
    The derivative of RV μ_interval__.ravel()[0] is zero.
  2. If I don’t include shape=N in the line for mean I get the error: IndexError: too many indices for array. I’m a bit surprised that I needed to include that, comments?
  3. Is there a better/correct way of bounding the estimated time left? I tried bounding the gumbel distribution but then I get the error that I cannot bound observed variables.
  4. I get the warning FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use arr[tuple(seq)]. What does this mean. It is referring to my y_obs... line.

Questions 1 and 2 are the more important questions to me. Any thoughts comments would be highly appreciated.