# PF_get_score_n_hess

##### Approximate Negative Observation Matrix and Score Vector

Returns a list of functions to approximate the negative observation matrix and score vector.

##### Usage

`PF_get_score_n_hess(object, debug = FALSE, use_O_n_sq = FALSE)`

##### Arguments

- object
object of class

`PF_EM`

.- debug
`TRUE`

if debug information should be printed to the console.- use_O_n_sq
`TRUE`

if the method from Poyiadjis et al. (2011) should be used.

##### Details

The score vector and negative observed information matrix are computed with the (forward) particle filter. This comes at an \(O(d^2)\) variance where \(d\) is the number of periods. Thus, the approximation may be poor for long series. The score vector can be used to perform stochastic gradient descent.

If `use_O_n_sq`

is `TRUE`

then the method in Poyiadjis et al. (2011)
is used. This may only have a variance which is linear in the number of
time periods. However, the present implementation is \(O(N^2)\) where
\(N\) is the number of particles. The method uses a particle filter as
in Section 3.1
of Lin et al. (2005). There is no need to call
`run_particle_filter`

unless one wants a new approximation of the
log-likelihood as a separate filter is run with `get_get_score_n_hess`

when `use_O_n_sq`

is `TRUE`

.

##### Value

A list with the following functions as elements

function to run particle filter as with
`PF_forward_filter`

.

function to set the parameters in the model. The first argument is a vectorized version of \(F\) matrix and \(Q\) matrix. The second argument is the fixed effect coefficients.

sets the number of particles to use in
`run_particle_filter`

and `get_get_score_n_hess`

when
`use_O_n_sq`

is `TRUE`

.

computes the approximate negative observation
matrix and score vector. The argument toggles whether the approximate
negative observation matrix should be computed. The last particle cloud
from `run_particle_filter`

is used when `use_O_n_sq`

is
`FALSE`

.

##### Warning

The function is still under development so the output and API may change.

##### References

Cappe, O. and Moulines, E. (2005) Recursive Computation of the Score and
Observed Information Matrix in Hidden Markov Models.
*IEEE/SP 13th Workshop on Statistical Signal Processing*.

Cappe, O., Moulines, E. and Ryden, T. (2005) Inference in Hidden Markov Models (Springer Series in Statistics). Springer-Verlag.

Doucet, A., and Tadi<U+0107>, V. B. (2003) Parameter Estimation in General
State-Space Models Using Particle Methods.
*Annals of the Institute of Statistical Mathematics*, **55(2)**,
409<U+2013>422.

Lin, M. T., Zhang, J. L., Cheng, Q. and Chen, R. (2005) Independent
Particle Filters. *Journal of the American Statistical Association*,
**100(472)**, 1412-1421.

Poyiadjis, G., Doucet, A. and Singh, S. S. (2011) Particle Approximations of
the Score and Observed Information Matrix in State Space Models with
Application to Parameter Estimation. *Biometrika*, **98(1)**,
65--80.

##### See Also

See the examples at https://github.com/boennecd/dynamichazard/tree/master/examples.

##### Examples

```
# NOT RUN {
library(dynamichazard)
.lung <- lung[!is.na(lung$ph.ecog), ]
# standardize
.lung$age <- scale(.lung$age)
set.seed(43588155)
pf_fit <- PF_EM(
fixed = Surv(time, status == 2) ~ ph.ecog + age,
random = ~ age, model = "exponential",
data = .lung, by = 50, id = 1:nrow(.lung),
Q_0 = diag(1, 2), Q = diag(.5^2, 2), type = "VAR",
max_T = 800,
control = PF_control(
N_fw_n_bw = 250, N_first = 2000, N_smooth = 500, covar_fac = 1.1,
nu = 6, n_max = 1000L, eps = 1e-5, est_a_0 = FALSE, averaging_start = 100L,
n_threads = max(parallel::detectCores(logical = FALSE), 1)))
comp_obj <- PF_get_score_n_hess(pf_fit)
comp_obj$set_n_particles(N_fw = 10000L, N_first = 10000L)
comp_obj$run_particle_filter()
(o1 <- comp_obj$get_get_score_n_hess())
# O(N^2) method with lower variance
comp_obj <- PF_get_score_n_hess(pf_fit, use_O_n_sq = TRUE)
comp_obj$set_n_particles(N_fw = 2500L, N_first = 2500L)
(o2 <- comp_obj$get_get_score_n_hess())
# approximations may have large variance
o3 <- replicate(10L, {
runif(1)
pf_fit$seed <- .Random.seed
comp_obj <- PF_get_score_n_hess(pf_fit)
comp_obj$set_n_particles(N_fw = 10000L, N_first = 10000L)
comp_obj$run_particle_filter()
comp_obj$get_get_score_n_hess()
}, simplify = FALSE)
sapply(o3, function(x) x$observation$score)
sapply(o3, function(x) sqrt(diag(solve(x$observation$neg_obs_info))))
# }
# NOT RUN {
# }
```

*Documentation reproduced from package dynamichazard, version 0.6.5, License: GPL-2*