10 return floor(R_unif_index(
n));
14 int n,
int from,
int to) {
19 if (!ISNA(color[i]) && nearbyint(color[i]) == from)
n--;
23 assert(nearbyint(color[i]) == from);
27#define Beta (__p[__parindex[0]])
28#define sigma (__p[__parindex[1]])
29#define gamma (__p[__parindex[2]])
30#define psi (__p[__parindex[3]])
31#define omega (__p[__parindex[4]])
32#define S0 (__p[__parindex[5]])
33#define E0 (__p[__parindex[6]])
34#define I0 (__p[__parindex[7]])
35#define R0 (__p[__parindex[8]])
36#define POP (__p[__parindex[9]])
37#define S (__x[__stateindex[0]])
38#define E (__x[__stateindex[1]])
39#define I (__x[__stateindex[2]])
40#define R (__x[__stateindex[3]])
41#define ll (__x[__stateindex[4]])
42#define node (__x[__stateindex[5]])
43#define ellE (__x[__stateindex[6]])
44#define ellI (__x[__stateindex[7]])
45#define COLOR (__x[__stateindex[8]])
48 event_rates(__x,__p,t, \
49 __stateindex,__parindex,__covindex, \
50 __covars,rate,logpi,&penalty) \
57 const int *__stateindex,
58 const int *__parindex,
59 const int *__covindex,
60 const double *__covars,
65 double event_rate = 0;
71 pi = (
I > 0) ? 1-
ellI/
I : 0;
73 event_rate += (*rate = alpha*pi); rate++;
74 *logpi = log(pi); logpi++;
77 event_rate += (*rate = alpha*pi); rate++;
78 *logpi = log(pi)-log(
ellI); logpi++;
82 pi = (
E > 0) ? 1-
ellE/
E : 1;
84 event_rate += (*rate = alpha*pi); rate++;
85 *logpi = log(pi); logpi++;
88 event_rate += (*rate = alpha*pi); rate++;
89 *logpi = log(pi)-log(
ellE); logpi++;
94 event_rate += (*rate = alpha); rate++;
102 event_rate += (*rate =
omega*
R); rate++;
106 assert(R_FINITE(event_rate));
121 const int *__stateindex,
122 const int *__parindex,
123 const int *__covindex,
124 const double *__covars
127 S = nearbyint(
S0*adj);
128 E = nearbyint(
E0*adj);
129 I = nearbyint(
I0*adj);
130 R = nearbyint(
R0*adj);
145 const int *__stateindex,
146 const int *__parindex,
147 const int *__covindex,
148 const double *__covars,
152 double tstep = 0.0, tmax = t + dt;
153 double *color = &
COLOR;
162 int parent = (int) nearbyint(
node);
167 assert(parent<=nnode);
170 int parlin = lineage[parent];
171 int parcol = color[parlin];
172 int deme = nodedeme[parent];
173 assert(parlin >= 0 && parlin <
nsample);
178 switch (nodetype[parent]) {
183 assert(sat[parent]==1);
184 int c = child[index[parent]];
185 assert(lineage[parent]==lineage[c]);
188 if (unif_rand() < x) {
200 if (unif_rand() < 0.5) {
214 if (parcol !=
deme) {
221 if (sat[parent] == 1) {
222 int c = child[index[parent]];
225 }
else if (sat[parent] == 0) {
232 color[parlin] = R_NaReal;
243 assert(sat[parent]==2);
248 int c1 = child[index[parent]];
249 int c2 = child[index[parent]+1];
251 assert(lineage[c1] != lineage[c2]);
252 assert(lineage[c1] != parlin || lineage[c2] != parlin);
253 assert(lineage[c1] == parlin || lineage[c2] == parlin);
254 if (unif_rand() < 0.5) {
271 double event_rate = 0;
275 tstep = exp_rand()/event_rate;
277 while (t + tstep < tmax) {
279 assert(event>=0 && event<
nrate);
280 ll -= penalty*tstep + logpi[event];
331 tstep = exp_rand()/event_rate;
340# define lik (__lik[0])
350 const int *__obsindex,
351 const int *__stateindex,
352 const int *__parindex,
353 const int *__covindex,
354 const double *__covars,
358 lik = (give_log) ?
ll : exp(
ll);
get_userdata_int_t * get_userdata_int
static int rcateg(double erate, double *rate, int nrate)
static void change_color(double *color, int nsample, int n, int from, int to)
static double event_rates(double *__x, const double *__p, double t, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double *rate, double *logpi, double *penalty)
static int random_choice(double n)
void seirs_gill(double *__x, const double *__p, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double t, double dt)
void seirs_dmeas(double *__lik, const double *__y, const double *__x, const double *__p, int give_log, const int *__obsindex, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars, double t)
Measurement model likelihood (dmeasure).
void seirs_rinit(double *__x, const double *__p, double t0, const int *__stateindex, const int *__parindex, const int *__covindex, const double *__covars)