-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbLDA.stan
41 lines (35 loc) · 803 Bytes
/
bLDA.stan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
data {
int<lower=1> E;
int<lower=1> N;
int<lower=1> I;
int<lower=1> K;
int<lower=1, upper=N> DocumentID[E];
int<lower=1, upper=I> WordID[E];
vector<lower=0>[K] Alpha;
vector<lower=0>[I] Beta;
real balance[E];
}
parameters {
simplex[I] phi[K];
simplex[K] theta[N];
vector<lower=0>[2] ab[K];
vector[2] ab0;
vector[2] ab1;
}
model {
for (k in 1:K)
phi[k] ~ dirichlet(Beta);
for (n in 1:N)
theta[n] ~ dirichlet(Alpha);
// likelihood
for (e in 1:E) {
real eta[K];
real gamma[K];
for (k in 1:K){
gamma[k] = log(theta[DocumentID[e],k]) + lognormal_lpdf(balance[e] | ab[k,1],ab[k,2]);
eta[k] = log(theta[DocumentID[e],k]) + log(phi[k,WordID[e]]);
}
target += log_sum_exp(gamma);
target += log_sum_exp(eta);
}
}