Skip to content
\n

C represents the weekly incidence in my model & it's a state. At each time step (week 1, week 2, week 3), I compute from the 500,000 particles the mean & 2.5 % & 97.5% quantiles of that state, which I assume will be the confidence (credible?) intervals of the fit. If I plot those results against the data, it's almost perfect. Too good to be true.

\n

However, that mean is different from the \"pred.mean\". I think I've got a misunderstanding in my concepts.

\n

In short, what would be the appropriate way to estimate the mean & uncertainty intervals of a particle filter fit?

\n

Thanks.

","upvoteCount":2,"answerCount":3,"acceptedAnswer":{"@type":"Answer","text":"

Dear Professor King (@kingaa),

\n

I appreciate your thorough response & the time you devoted to this. It has answered some of my doubts but also raised new ones. Here are the model equations to clarify the context of this work.

\n
Csnippet(\"\n    y = rpois(C);  \n \") -> rmeas\n\nCsnippet(\"\n  lik = dpois(y,C,give_log);\n\") -> dmeas\n\nCsnippet(\"\n    S = 5e6 - I_0;\n    E = 0;\n    I = I_0;\n    R = 0;\n    B = B_0;\n    C = 0;\n  \") -> rinit\n\n Csnippet(\"\n    double dW     = rnorm(0, sqrt(dt));\n    double lambda = B * I / N;\n    S-= (S * lambda)*dt;\n    E+= (S * lambda - sigma*E)*dt;\n    I+= (sigma * E - gamma*I)*dt;\n    R+= (gamma*I)*dt;\n    B+= alpha*B*dW;\n    C+= (rho*sigma*E)*dt;\n  \") -> SEIR_GBM_step\n
\n

The calibration of this model is in the context of a COVID-19 outbreak. As such, the assumption that the effective contact rate (B) is constant no longer holds, even for a short period given the quick measures imposed since first cases reported. For this reason, my purpose is to approximate the trend of a time-varying B, which translates into a time-varying basic reproduction number. I propose Geometric Brownian Motion as a vehicle to unravel such a trend. By no means, I conceive B as a random walk. For this reason, I don't think that this model is able to answer \"How well does the model explain the data?\". Considering that a random walk can produce a broad arrange of trajectories & incidences, the observed data has a tiny probability of being drawn. To complement this point, I think this also the reason the ESS goes relatively low. To 10% of the ensemble size.

\n

Consequently, the focus of this research is on the question \"Given the model, what was the path of the latent process actually taken in the single realization that was observed?\". My approach is that the particle filter can answer that question. However, to run a particle filter, I need a complete set of initial values. In this case, I'm assuming I don't know I(0), B(0), alpha & rho. I followed your tutorial to estimate such values via Iterated Filtering. Fortunately, there's concentration of measure around a single region & I can compute confidence intervals using the profile likelihood approach. Subsequently, I plug the MLE into the particle filter to obtain an estimate of the time-varying B. With this, I can compute the time-varying basic & effective reproduction number.

\n

Based on the above, I've got the following questions:

\n

- Is this approach enough to answer the research question? When I said \"too good to be true\", it was because the filtering distribution (mean) fitted very well the data with narrow uncertainty intervals. I estimated the mean from the 500.000 particles returned by saved.states & calculated intervals via the quantile function in R.

\n\n

Thanks.

","upvoteCount":1,"url":"https://github.com/kingaa/pomp/discussions/135#discussioncomment-484239"}}}

Estimate particle filter fit #135

Answered by jandraor
jandraor asked this question in Q&A
Mar 12, 2021 · 3 comments · 5 replies
Discussion options

You must be logged in to vote

Dear Professor King (@kingaa),

I appreciate your thorough response & the time you devoted to this. It has answered some of my doubts but also raised new ones. Here are the model equations to clarify the context of this work.

Csnippet("
    y = rpois(C);  
 ") -> rmeas

Csnippet("
  lik = dpois(y,C,give_log);
") -> dmeas

Csnippet("
    S = 5e6 - I_0;
    E = 0;
    I = I_0;
    R = 0;
    B = B_0;
    C = 0;
  ") -> rinit

 Csnippet("
    double dW     = rnorm(0, sqrt(dt));
    double lambda = B * I / N;
    S-= (S * lambda)*dt;
    E+= (S * lambda - sigma*E)*dt;
    I+= (sigma * E - gamma*I)*dt;
    R+= (gamma*I)*dt;
    B+= alpha*B*dW;
    C+= (rho*sigma*E)*dt;
  ") -> SEIR_GBM_step

Th…

Replies: 3 comments 5 replies

Comment options

You must be logged in to vote
0 replies
Comment options

You must be logged in to vote
5 replies
@kingaa
Comment options

@jandraor
Comment options

@kingaa
Comment options

@jandraor
Comment options

@kingaa
Comment options

Answer selected by kingaa
Comment options

You must be logged in to vote
0 replies
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
2 participants