Hello Community
I have a two layer hierarchical model of a regression (x * beta). With a second layer I am trying to put a prior on the proportions (beta [0,1]) calculated for many “replicates”
for(s in 1:S) beta[s] ~ dirichlet( to_vector( beta_hat[s] ) );
Now since I have a covariate (X) for each replicate, I am trying to regress the predicted probabilities:
beta_hat = exp(X * alpha);
for(s in 1:S) beta[s] ~ dirichlet( to_vector(beta_hat[s]) );
My questions are:
- is this a sensible this to do?
- Should I use log-link regression since hyperparameter of a Dirichlet must be >0?
Thanks a lot
Below the full model.
data{
	int G;                                                           // Number of marker genes
	int P;                                                           // Number of cell types
	int S;                                                           // Number of mix samples
	int<lower=1> R;                                                           // Number of covariates (e.g., treatments)
	vector<lower=0>[G] y[S];                                                  // Mix samples matrix
	matrix<lower=0>[G,P] x;                                // Array of covariates
  matrix[S,R] X;                                                    // Array of covariates hierarchical
}
transformed data{
	vector[G] y_log[S];                                                  // Mix samples matrix
	for(s in 1:S) y_log[s] = log(y[s] + 1);
}
parameters {
	simplex[P] beta[S]; // coefficients for predictors
	real<lower=0> sigma; // error scale
	matrix[R,P] alpha;    // Prior to a
}
transformed parameters{
	vector[G] y_hat[S];
	for(s in 1:S) y_hat[s] = x* beta[s];
}
model {
	matrix[S,P] beta_hat;
	// Regression
	sigma ~ normal(0, 0.01);
	// Dirichlet prior on proportions
	alpha[1] ~ normal(0, 0.2);
	if(R > 1) to_vector(alpha[2:R]) ~ normal(0, 0.2);
	// Regression
       for(s in 1:S) y_log[s] ~ student_t(8, log(y_hat[s]), sigma);
	// Hypothesis testing
	beta_hat = exp(X * alpha);
	
  for(s in 1:S) beta[s] ~ dirichlet( to_vector(beta_hat[s]) );
}
P.S. I had to simplify the model I hope to not have left any incongruence
Thanks







