Please see my model definition:

```
import pandas as pd #To work with dataset
import numpy as np #Math library
import seaborn as sns #Graph library that use matplot in background
import matplotlib.pyplot as plt #to plot some parameters
import pymc3 as pm
import theano.tensor as tt
#load data
X = pd.read_csv('/my/data/file/path')
X_values = X.to_numpy()
def my_density(theta,W):
def logp(X):
#X is the data containing the first 23 features
def log_expo(lam,x):
return( tt.sum(tt.log(lam) - lam * x) )
def log_bernoulli(p,x):
return( tt.sum(1.* ( tt.switch( x, tt.log(p), tt.log(1 - p) ))) )
LL = np.array([
log_expo(tetha[0],X[:,0]),
log_bernoulli(tetha[1],X[:,1]),
])
return( np.dot(W,LL) )
return(logp)
#hyperparameters for exponential distribution
hyper_expo_lower = 0.000001
hyper_expo_upper = 10
#hyperparameters for prior of bernoulli distribution : X3 - X23
hyper_bern_lower = 0
hyper_bern_upper = 1
with pm.Model() as model:
##set prior for parameters
#for X0
r_0 = pm.Uniform('r_0',lower = hyper_expo_lower, upper = hyper_expo_upper)
#for X1
p_1 = pm.Uniform('p_1',lower = hyper_bern_lower, upper = hyper_bern_upper)
tetha = np.array([
r_0, #for X0
p_1, #for X1
])
##set likelihood
joint_obs = pm.DensityDist('joint_obs',
my_density(tetha,#paramters
W,#weight
),
observed={'X' : X, #samples for X0 - X1
}
)
```

In the above model, This model contains 2 random variables (X has 2 dimensions). X is the data matrix: each column is a random variable, and each row is a sample.

my_density() is the costum likelihood. It accepts 2 arguments. The first argument tetha contains parameters for the two dimensions.

The second argument W is a weight vector used in likelihood definition, whose values are known.

The data is input as: ‘X’ : X

Let me know if you find any problem.