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 N (__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++;
80 event_rate += (*rate = alpha*pi); rate++;
81 *logpi = log(pi)-log(
ellI); logpi++;
87 event_rate += (*rate = alpha*(1-pi)); rate++;
88 *logpi = log(1-pi); logpi++;
90 event_rate += (*rate = alpha*pi); rate++;
91 *logpi = log(pi)-log(
ellE); logpi++;
96 event_rate += (*rate = alpha); rate++;
104 event_rate += (*rate =
omega*
R); rate++;
108 assert(R_FINITE(event_rate));
123 const int *__stateindex,
124 const int *__parindex,
125 const int *__covindex,
126 const double *__covars
129 S = nearbyint(
S0*adj);
130 E = nearbyint(
E0*adj);
131 I = nearbyint(
I0*adj);
132 R = nearbyint(
R0*adj);
147 const int *__stateindex,
148 const int *__parindex,
149 const int *__covindex,
150 const double *__covars,
154 double tstep = 0.0, tmax = t + dt;
155 double *color = &
COLOR;
164 int parent = (int) nearbyint(
node);
169 assert(parent<=nnode);
172 int parlin = lineage[parent];
173 int parcol = color[parlin];
174 int deme = nodedeme[parent];
175 assert(parlin >= 0 && parlin <
nsample);
180 switch (nodetype[parent]) {
185 assert(sat[parent]==1);
186 int c = child[index[parent]];
187 assert(lineage[parent]==lineage[c]);
190 if (unif_rand() < x) {
202 if (unif_rand() < 0.5) {
216 if (parcol !=
deme) {
223 if (sat[parent] == 1) {
224 int c = child[index[parent]];
227 }
else if (sat[parent] == 0) {
234 color[parlin] = R_NaReal;
245 assert(sat[parent]==2);
246 ll += (
S > 0 &&
I > 0) ? log(
Beta*
S/
N/(
E+1)) : R_NegInf;
250 int c1 = child[index[parent]];
251 int c2 = child[index[parent]+1];
253 assert(lineage[c1] != lineage[c2]);
254 assert(lineage[c1] != parlin || lineage[c2] != parlin);
255 assert(lineage[c1] == parlin || lineage[c2] == parlin);
256 if (unif_rand() < 0.5) {
273 double event_rate = 0;
277 tstep = exp_rand()/event_rate;
279 while (t + tstep < tmax) {
281 assert(event>=0 && event<
nrate);
282 ll -= penalty*tstep + logpi[event];
339 tstep = exp_rand()/event_rate;
348# define lik (__lik[0])
358 const int *__obsindex,
359 const int *__stateindex,
360 const int *__parindex,
361 const int *__covindex,
362 const double *__covars,
366 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)