From 366c0870b4e51751ea22f0cecf72204b8f9b2a7b Mon Sep 17 00:00:00 2001 From: Santtu Tikka Date: Mon, 27 May 2024 17:31:16 +0300 Subject: [PATCH] remove main vignette as outdated, increment version --- DESCRIPTION | 4 +- NEWS.md | 6 +- R/dynamite-package.R | 2 +- R/dynamiteformula.R | 2 +- codemeta.json | 52 ++- dynamite.Rproj | 1 + inst/CITATION | 4 +- man/dynamite-package.Rd | 2 +- man/dynamiteformula.Rd | 2 +- vignettes/dag.png | Bin 134121 -> 0 bytes vignettes/dynamite.Rmd | 577 ----------------------------- vignettes/dynamite.bib | 582 ------------------------------ vignettes/dynamite_custom.Rmd | 1 - vignettes/dynamite_priors.Rmd | 3 +- vignettes/dynamite_simulation.Rmd | 3 +- 15 files changed, 53 insertions(+), 1188 deletions(-) delete mode 100644 vignettes/dag.png delete mode 100644 vignettes/dynamite.Rmd delete mode 100644 vignettes/dynamite.bib diff --git a/DESCRIPTION b/DESCRIPTION index b686fd52..944e1e96 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: dynamite Title: Bayesian Modeling and Causal Inference for Multivariate Longitudinal Data -Version: 1.5.1 +Version: 1.5.2 Authors@R: c( person("Santtu", "Tikka", email = "santtuth@gmail.com", role = c("aut", "cre"), comment = c(ORCID = "0000-0003-4039-4342")), @@ -18,7 +18,7 @@ Description: Easy-to-use and efficient interface for effects, and a wide range of discrete and continuous distributions. Estimation of these dynamic multivariate panel models is carried out via 'Stan'. For an in-depth tutorial of the package, see - (Tikka and Helske, 2023) . + (Tikka and Helske, 2024) . License: GPL (>= 3) URL: https://docs.ropensci.org/dynamite/, https://github.com/ropensci/dynamite/ BugReports: https://github.com/ropensci/dynamite/issues/ diff --git a/NEWS.md b/NEWS.md index 5e3450da..8967d651 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,7 @@ +# dynamite 1.5.2 + + * The main package vignette has been temporarily removed as it contained out-of-date information. Please see the arXiv preprint for up-to-date information instead: https://arxiv.org/abs/2302.01607 + # dynamite 1.5.1 * The `type` argument of `coef()` and `plot()` has been replaced by `types` accepting multiple types simultaneously, similar to `as.data.table()` and `as.data.frame()`. @@ -9,7 +13,7 @@ * Priors of the cutpoint parameters of the `cumulative` family are now customizable. * Both `factor` and `ordered factor` responses are now supported for `categorical` and `cumulative` families. In addition, `ordered factor` columns of `data` are no longer converted to `factor` columns. * Arguments that have the different names but the same functionality between `rstan` and `cmdstanr` can now be used interchangeably for either backend, such as `iter` and `iter_samples`. - * The latent factor component was reparameterized for additional robustness. User-visible changes are related to priors: Instead of prior on the standard deviations `sigma_lambda` and `tau_psi`, prior is now defined on `zeta`, the sum of these, as well as on `kappa`, which is the proportion of `zeta` attributable to `sigma_lambda`. + * The latent factor component was reparametrized for additional robustness. User-visible changes are related to priors: Instead of prior on the standard deviations `sigma_lambda` and `tau_psi`, prior is now defined on `zeta`, the sum of these, as well as on `kappa`, which is the proportion of `zeta` attributable to `sigma_lambda`. # dynamite 1.5.0 diff --git a/R/dynamite-package.R b/R/dynamite-package.R index a919512a..ac1560e1 100644 --- a/R/dynamite-package.R +++ b/R/dynamite-package.R @@ -8,7 +8,7 @@ #' #' # See Also #' -#' * The package vignette. +#' * The package vignettes #' * [dynamite::dynamiteformula()] for information on defining models. #' * [dynamite::dynamite()] for information on fitting models. #' * \url{https://github.com/ropensci/dynamite/issues/} to submit a bug report diff --git a/R/dynamiteformula.R b/R/dynamiteformula.R index 850e6871..3b099303 100644 --- a/R/dynamiteformula.R +++ b/R/dynamiteformula.R @@ -2,7 +2,7 @@ #' #' Defines a new observational or a new auxiliary channel for the model using #' standard \R formula syntax. Formulas of individual response variables can be -#' joined together via `+`. See 'Details' and the package vignette for more +#' joined together via `+`. See 'Details' and the package vignettes for more #' information. The function `obs` is a shorthand alias for `dynamiteformula`, #' and `aux` is a shorthand alias for #' `dynamiteformula(formula, family = "deterministic")`. diff --git a/codemeta.json b/codemeta.json index 3b529956..5db1dc50 100644 --- a/codemeta.json +++ b/codemeta.json @@ -2,13 +2,13 @@ "@context": "https://doi.org/10.5063/schema/codemeta-2.0", "@type": "SoftwareSourceCode", "identifier": "dynamite", - "description": "Easy-to-use and efficient interface for Bayesian inference of complex panel (time series) data using dynamic multivariate panel models by Helske and Tikka (2022) . The package supports joint modeling of multiple measurements per individual, time-varying and time-invariant effects, and a wide range of discrete and continuous distributions. Estimation of these dynamic multivariate panel models is carried out via 'Stan'. For an in-depth tutorial of the package, see (Tikka and Helske, 2023) .", + "description": "Easy-to-use and efficient interface for Bayesian inference of complex panel (time series) data using dynamic multivariate panel models by Helske and Tikka (2024) . The package supports joint modeling of multiple measurements per individual, time-varying and time-invariant effects, and a wide range of discrete and continuous distributions. Estimation of these dynamic multivariate panel models is carried out via 'Stan'. For an in-depth tutorial of the package, see (Tikka and Helske, 2024) .", "name": "dynamite: Bayesian Modeling and Causal Inference for Multivariate\n Longitudinal Data", - "relatedLink": "https://docs.ropensci.org/dynamite/", + "relatedLink": ["https://docs.ropensci.org/dynamite/", "https://CRAN.R-project.org/package=dynamite"], "codeRepository": "https://github.com/ropensci/dynamite/", "issueTracker": "https://github.com/ropensci/dynamite/issues/", "license": "https://spdx.org/licenses/GPL-3.0", - "version": "1.5.1", + "version": "1.5.2", "programmingLanguage": { "@type": "ComputerLanguage", "name": "R", @@ -332,11 +332,11 @@ }, "SystemRequirements": null }, - "fileSize": "5739.626KB", + "fileSize": "5946.449KB", "citation": [ { "@type": "CreativeWork", - "datePublished": "2023", + "datePublished": "2024", "author": [ { "@type": "Person", @@ -350,14 +350,14 @@ } ], "name": "dynamite: An R Package for Dynamic Multivariate Panel Models", - "identifier": "10.48550/ARXIV.2302.01607", + "identifier": "10.48550/arXiv.2302.01607", "url": "https://arxiv.org/abs/2302.01607", - "@id": "https://doi.org/10.48550/ARXIV.2302.01607", - "sameAs": "https://doi.org/10.48550/ARXIV.2302.01607" + "@id": "https://doi.org/10.48550/arXiv.2302.01607", + "sameAs": "https://doi.org/10.48550/arXiv.2302.01607" }, { - "@type": "CreativeWork", - "datePublished": "2022", + "@type": "ScholarlyArticle", + "datePublished": "2024", "author": [ { "@type": "Person", @@ -371,11 +371,23 @@ } ], "name": "Estimating Causal Effects from Panel Data with Dynamic\n Multivariate Panel Models", - "url": "https://osf.io/preprints/socarxiv/mdwu5/" + "identifier": "10.1016/j.alcr.2024.100617", + "pagination": "100617", + "@id": "https://doi.org/10.1016/j.alcr.2024.100617", + "sameAs": "https://doi.org/10.1016/j.alcr.2024.100617", + "isPartOf": { + "@type": "PublicationIssue", + "datePublished": "2024", + "isPartOf": { + "@type": ["PublicationVolume", "Periodical"], + "volumeNumber": "60", + "name": "Advances in Life Course Research" + } + } }, { "@type": "SoftwareSourceCode", - "datePublished": "2022", + "datePublished": "2024", "author": [ { "@type": "Person", @@ -388,9 +400,19 @@ "familyName": "Helske" } ], - "name": "Bayesian Modeling and Causal Inference for Multivariate\n Longitudinal Data", + "name": "dynamite: Bayesian Modeling and Causal Inference for Multivariate\n Longitudinal Data", "url": "https://github.com/ropensci/dynamite", - "description": "R package version 1.0.0" + "description": "R package version 1.5.2" } - ] + ], + "releaseNotes": "https://github.com/ropensci/dynamite/blob/master/NEWS.md", + "readme": "https://github.com/ropensci/dynamite/blob/main/README.md", + "contIntegration": ["https://github.com/ropensci/dynamite/actions", "https://app.codecov.io/gh/ropensci/dynamite?branch=main"], + "developmentStatus": "https://www.repostatus.org/#active", + "review": { + "@type": "Review", + "url": "https://github.com/ropensci/software-review/issues/554", + "provider": "https://ropensci.org" + }, + "keywords": ["bayesian-inference", "panel-data", "r", "r-package", "rstats", "stan", "statistical-models"] } diff --git a/dynamite.Rproj b/dynamite.Rproj index af86ad61..d4e89e23 100644 --- a/dynamite.Rproj +++ b/dynamite.Rproj @@ -19,5 +19,6 @@ LineEndingConversion: Posix BuildType: Package PackageUseDevtools: Yes PackageInstallArgs: --no-multiarch --with-keep.source +PackageBuildArgs: --compact-vignettes=both PackageCheckArgs: --run-donttest PackageRoxygenize: rd,namespace diff --git a/inst/CITATION b/inst/CITATION index 6610f788..7f8f7986 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -7,7 +7,7 @@ bibentry( url = "https://arxiv.org/abs/2302.01607", author = c(person("Santtu", "Tikka"), person("Jouni", "Helske")), title = "dynamite: An R Package for Dynamic Multivariate Panel Models", - year = "2023" + year = "2024" ) bibentry( key = "dmpmpaper", @@ -27,7 +27,7 @@ bibentry( title = "dynamite: Bayesian Modeling and Causal Inference for Multivariate Longitudinal Data", author = c(person("Santtu", "Tikka"), person("Jouni", "Helske")), - note = "R package version 1.5.1", + note = "R package version 1.5.2", year = "2024", url = "https://github.com/ropensci/dynamite" ) diff --git a/man/dynamite-package.Rd b/man/dynamite-package.Rd index 0caa7b1e..89c46ee5 100644 --- a/man/dynamite-package.Rd +++ b/man/dynamite-package.Rd @@ -13,7 +13,7 @@ account the dynamic structure of the model. } \section{See Also}{ \itemize{ -\item The package vignette. +\item The package vignettes \item \code{\link[=dynamiteformula]{dynamiteformula()}} for information on defining models. \item \code{\link[=dynamite]{dynamite()}} for information on fitting models. \item \url{https://github.com/ropensci/dynamite/issues/} to submit a bug report diff --git a/man/dynamiteformula.Rd b/man/dynamiteformula.Rd index 8984ec0a..626f5003 100644 --- a/man/dynamiteformula.Rd +++ b/man/dynamiteformula.Rd @@ -42,7 +42,7 @@ A \code{dynamiteformula} object. \description{ Defines a new observational or a new auxiliary channel for the model using standard \R formula syntax. Formulas of individual response variables can be -joined together via \code{+}. See 'Details' and the package vignette for more +joined together via \code{+}. See 'Details' and the package vignettes for more information. The function \code{obs} is a shorthand alias for \code{dynamiteformula}, and \code{aux} is a shorthand alias for \code{dynamiteformula(formula, family = "deterministic")}. diff --git a/vignettes/dag.png b/vignettes/dag.png deleted file mode 100644 index 5fb995365fa7a5bde5dfe1e136042608acc0c3b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134121 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 z 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 t*1!Mv|KIrkH|PIk<^1~n_4 - %\VignetteIndexEntry{dynamite: An R Package for Dynamic Multivariate Panel Models} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r, include = FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -```{r srr, eval = FALSE, echo = FALSE} -#' @srrstats {BS1.2b} The package contains a vignette. -``` - -```{r setup, echo = FALSE, warning=FALSE} -library("dynamite") -library("ggplot2") -suppressPackageStartupMessages(library("dplyr")) -theme_set(theme_bw()) -options(dplyr.summarise.inform = FALSE) -options(crayon.enabled = FALSE) -options(dplyr.summarise.inform = FALSE) -set.seed(0) -data.table::setDTthreads(1) # For CRAN -``` - -This vignette is a modification of [@dynamite] which contains more examples and details. - -# Introduction {#sec:intro} - -Panel data is common in various fields such as social sciences. These data consist of multiple individuals, followed over several time points, and there are often many observations per individual at each time, for example, family status and income of each individual at each time point of interest. Such data can be analyzed in various ways, depending on the research questions and the characteristics of the data such as the number of individuals and time points, and the assumed distribution of the response variables. In social sciences, popular, somewhat overlapping modeling approaches include dynamic panel models, fixed effect models, dynamic structural equation models [@Asparouhov2018], cross-lagged panel models (CLPM), and their various extensions such as CLPM with fixed or random effects [@arellano1991, @Allison2009, @Bollen2010, @Allison2017, @Hamaker2015, @Mulder2021] and general cross-lagged panel model [@Zyphur2020]. - -There are several R [@R] packages available from the Comprehensive R Archive Network (CRAN) focusing on analysis of panel data. The `plm` [@plm] package provides various estimation methods and tests for linear panel data models, while `fixest` [@fixest] supports multiple fixed effects and different distributions of response variables (based on `stats::family`. The `panelr` [@panelr] package contains tools for panel data manipulation and estimation methods for so-called "within-between" models which combine fixed effect and random effect models. This is done by using `lme4` [@lme4], `geepack` [@geepack], and `brms` [@brms] packages as a backend. The `lavaan` [@lavaan] package provides methods for general structural equation modeling and thus can be used to estimate various panel data models such as CLPMs with fixed or random intercepts. Similarly, it is also possible to use the general multilevel modeling packages `lme4` and `brms` directly for panel data modeling. Of these, only `lavaan` and `brms` support joint modeling of multiple interdependent response variables, which is typically necessary for multi-step predictions and long-term causal effect estimation [@dmpm]. - -In traditional panel data models such as the ones supported by the aforementioned packages, the number of time points considered is often assumed to be relatively small, say less than 10, while the number of individuals can be for example hundreds or thousands. This is especially true for commonly used wide-format SEM approaches which cannot handle a large number of time points [@Asparouhov2018]. Perhaps due to the small number of time points, the effects of predictors are typically assumed to be time-invariant (although some extensions to time-varying effects have emerged, e.g., [@Sun2009, @Asparouhov2018, @hayakawa2019]. On the other hand, when the number of time points is moderate or large, say hundreds or thousands (sometimes referred as intensive longitudinal data), it can be reasonable to assume that the dynamics of the system change over time, for example so that effects of predictors vary in time. - -Modeling time-varying effects in (generalized) linear models can be based on state space models (SSMs) [@harvey1982, @durbin2012, @helske2022], for which there are various R implementations such as `walker` [@helske2022], `shrinkTVP` [@knaus2021], and `CausalImpact` [@brodersen2014]. However, these implementations are restricted to a non-panel setting of single individual and single response variable. Other approaches include methods based on the varying coefficients models [@hastie1993, @eubank2004], implemented in `tvReg` [@casas2019] and `tvem` [@dziak2021] packages. While `tvem` supports multiple individuals, it does not support multiple response variables per individual. The `tvReg` supports only univariate single-individual responses. Also based on SSMs and differential equations, the `dynr` [@dynr] package provides methods for modeling multivariate dynamic regime-switching models with linear or non-linear latent dynamics and linear-Gaussian observations. Because both multilevel models and SEMs can be defined as SSMs [@Sallas1981, @KFAS, @Chow2010], other packages supporting general SSMs could be in principle suitable for panel data analysis as well (e.g., `KFAS` [@KFAS], `bssm` [@bssm], and `pomp` [@pomp]). However, SSMs are often computationally demanding especially for non-Gaussian observations where the marginal likelihood is analytically intractable, and the large number of individuals can be problematic particularly in the presence of additional group-level random effects which complicates the construction of the corresponding state space model [@KFAS]. - -The `dynamite` [@dynamitepackage] package provides an alternative approach to panel data inference which avoids some of the limitations and drawbacks of the aforementioned methods. First, the dynamic multivariate panel data models (DMPMs), introduced in [@dmpm] and implemented in the `dynamite` package support estimation of effects that vary smoothly over time according to Bayesian P-splines [@lang2004], with penalization based on random walk priors. This allows modeling for example effects of interventions which increase or decrease over time. Second, `dynamite` supports a wide variety of distributions for the response variables such as Gaussian, Poisson, binomial, and categorical distributions. Third, with `dynamite` we can model an arbitrary number of simultaneous measurements per individual. Finally, the estimation is fully Bayesian using Stan [@Stan, rstan], which leads to transparent and interpretable quantification of parameter and predictive uncertainty. - -One of the most defining features of `dynamite` is its high-performance prediction function, which is fully automated, supports multi-step predictions over the entire observed time-interval, and can operate at the individual-level or group-level. This is in stark contrast to packages such as `brms` where, in presence of lagged response variables as covariates, obtaining such predictions necessitates the computation of manual stepwise predictions and can pose a challenge even for an experienced user. Furthermore, by jointly modeling all endogenous variables simultaneously, `dynamite` allows us to consider the long-term effects of interventions which take into account the interdependence of several variables of the model. - -The vignette is organized as follows. In Section \@ref(sec:model) we introduce the dynamic multivariate panel model which is the class of models considered in the `dynamite` package and describe the assumptions made in the package with respect to these models. Section \@ref(sec:dynamitepackage) introduces the software package and its core features along with two illustrative examples using a real dataset and a synthetic dataset. Sections \@ref(sec:construction) and \@ref(sec:fitting) provide a more comprehensive and technical overview on how to define and estimate models using the package, respectively. The use of the model fit objects for prediction is discussed in Section \@ref(sec:prediction). Finally, Section \@ref(sec:summary) provides some concluding remarks. - -# The dynamic multivariate panel model {#sec:model} - -Consider an individual \(i\) with observations \(y_{i,t} = (y^1_{i,t}, \ldots, y^c_{i,t},\ldots, y^C_{i,t})\), \(t=1,\ldots,T\), \(i = 1,\ldots,N\) i.e., at each time point \(t\) we have \(C\) observations from \(N\) individuals, where \(C\) is the number of channels, i.e., different response variables that have been measured. Assume that each element of \(y_{i,t}\) can depend on the past observations \(y_{i,t-\ell}\), \(\ell=1,\ldots\) (where the set of past values can be different for each channel) and also on additional exogenous covariates \(x_{i,t}\). In addition, \(y^c_{i,t}\) can depend on the elements of current \(y_{i,t}\), assuming that this does not lead to cyclic dependencies; this translates to a condition that the channels can be ordered so that \(y^c_{i,t}\) depends only on \(y^1_{i,t}, \ldots, y^{c-1}_{i,t}\), exogenous covariates, and past observations. For simplicity of the presentation, we now assume that the observations of each channel only depend on the previous time points, i.e., \(\ell = 1\) for all channels. We denote the set of all model parameters by \(\theta\). Now, assuming that the elements of \(y_{i,t}\) are independent given \(y_{i, t-1}\), \(x_{i,t}\), and \(\theta\) we have -\[ -\begin{aligned} - y_{i,t} &\sim p_t(y_{i,t} | y_{i,t-1},x_{i,t},\theta) = - \prod_{c=1}^C p^c_t(y^c_{i,t} | y^1_{i,t-1}, \ldots, y^C_{i,t-1}, x_{i,t}, \theta). -\end{aligned} -\] -Importantly, the parameters of the conditional distributions \(p^c\) are time-dependent, enabling us to consider the evolution of the dynamics of our system over time. - -Given a suitable link function depending on our distributional assumptions, we define a linear predictor \(\eta^c_{i,t}\) for the conditional distribution \(p^c_t\) of each channel \(c\) with the following general form: -\[ -\begin{aligned} - \eta^c_{i,t} &= - \alpha^c_{t} + X^{\beta, c}_{i,t} \beta^c + X^{\delta, c}_{i,t} \delta^c_{t} + X^{\nu, c}_{i,t} \nu_i^c + \lambda^c_i \psi^c_t, -\end{aligned} -\] -where \(\alpha_t\) is the (possibly time-varying) common intercept term, \(X^{\beta, c}_{i,t}\) defines the predictors corresponding to the vector of time-invariant coefficients \(\beta^c\), and similarly for the time-varying term \(X^{\delta, c}_{i,t} \delta^c_{t}\). The term \(X^{\nu, c}_{i,t} \nu^c_{t}\) corresponds to individual-level random effects, where \(\nu^1_{i},\ldots, \nu^C_{i}\) are assumed to follow zero-mean Gaussian distribution, either with a diagonal or a full covariance matrix. Note that the predictors in \(X^{\beta, c}_{i,t}\), \(X^{\delta, c}_{i,t}\), and \(X^{\nu, c}_{i,t}\) may contain exogenous covariates or past observations of the response channels (or transformations of either).The final term \(\lambda^c_i \psi^c_t\) is a product of latent individual loadings \(\lambda^c_i\) and a univariate latent dynamic factor \(\psi^c_t\). - -For time-varying coefficients \(\delta\) (and similarly for time-varying \(\alpha\) and latent factor \(\psi\)), we use Bayesian P-splines (penalized B-splines) [@lang2004] where -\[ - \delta^c_{k,t} = B_t \omega_k^c, \quad k=1,\ldots,K, -\] -where \(K\) is the number of covariates, \(B_t\) is a vector of B-spline basis function values at time \(t\) and \(\omega_k^c\) is a vector of corresponding spline coefficients. In general, the number of B-splines \(D\) used for constructing the splines for the study period \(1,\ldots,T\) can be chosen freely, but the actual value is not too important (as long as \(D \leq T\) and larger than the degree of the spline, e.g., three in case of cubic splines) [@Wood2020]. Therefore, we use the same \(D\) basis functions for all time-varying effects. To mitigate overfitting due to too large a value of \(D\), we define a random walk prior for \(\omega^c_k\) as -\[ - \omega^c_{k,1} \sim p(\omega^c_{k,1}), \quad - \omega^c_{k,d} \sim N(\omega^c_{k,d-1}, (\tau^c_k)^2), \quad d=2, \ldots, D. -\] -with a user defined prior \(p(\omega^c_{k,1})\) on the first coefficient, which due to the structure of \(B_1\) corresponds to the prior on the \(\delta^c_{k,1}\). Here, the parameter \(\tau^c_k\) controls the smoothness of the spline curves. While the different time-varying coefficients are modeled as independent a priori, the latent factors \(\psi\) can be modeled as correlated via correlated spline coefficients \(\omega\). - -# The dynamite package {#sec:dynamitepackage} - -The `dynamite` package provides an easy-to-use interface for fitting DMPMs in R. As the package is part of rOpenSci (https://ropensci.org), it complies with its rigorous software standards and the development version of `dynamite` can be installed from the R-universe system (https://ropensci.org/r-universe/). The stable version of the package is available from CRAN at (https://cran.r-project.org/package=dynamite). The software is published under the GNU general public license (GPL \(\geq\) 3) and can be obtained in R by running the following commands: - -```{r dynamiteinstall, echo=TRUE, eval=FALSE} -install.packages("dynamite") -library("dynamite") -``` - -The package takes advantage of several other well established R packages. Estimation of the models is carried out by Stan for which both `rstan` and `cmdstanr` [@cmdstanr] interfaces are available. The `data.table` [@datatable] package is used for efficient computation and memory management of predictions and internal data manipulations. For posterior inference and visualization, `ggplot2` [@ggplot2], and `posterior` [@posterior] packages are leveraged. Leave-one-out (LOO) and leave-future-out (LFO) cross-validation methods are implemented with the help of the `loo` [@loo] package. All of the aforementioned dependencies are available on CRAN with the exception of `cmdstanr` whose installation is optional and needed only if the user wishes to use the `CmdStan` backend for Stan. - -Several example datasets and corresponding model fit objects are included in `dynamite` which are also used throughout this paper for illustrative purposes. The script files to generate these datasets and the model fit objects can be found in the package GitHub repository (https://github.com/ropensci/dynamite/) under the `data-raw` directory. Before presenting the more technical details, we demonstrate the key features of the package and the general workflow by performing an illustrative analysis on a synthetic dataset. - -## Causal effects in a multichannel model {#sec:multichannel} - -We now consider the following simulated multichannel data available in the `dynamite` package: - -```{r multichannelhead, echo=TRUE, eval=TRUE} -head(multichannel_example) -``` - -The data contains 50 unique groups (variable `id`), over 20 time points (`time`), a continuous variable \(g_t\) (`g`), a variable with non-negative integer -values \(p_t\) (`p`), and a binary variable \(b_t\) (`b`). We define the following model (which actually matches the data generating process used in generating the data): - -```{r multichannelformula, echo=TRUE, eval=TRUE} -multi_formula <- obs(g ~ lag(g) + lag(logp), family = "gaussian") + - obs(p ~ lag(g) + lag(logp) + lag(b), family = "poisson") + - obs(b ~ lag(b) * lag(logp) + lag(b) * lag(g), family = "bernoulli") + - aux(numeric(logp) ~ log(p + 1)) -``` - -Here, the `aux()` creates a deterministic transformation of \(p_t\) as \(\log(p_t + 1)\) which can subsequently be used in other channels as a predictor and correctly computes the transformation for predictions. A directed acyclic graph (DAG) that depicts the model is shown in Figure \@ref(fig:dag). - -![(#fig:dag) A directed acyclic graph for the multichannel model with arrows corresponding to the assumed direct causal effects. A cross-section at times \(t\), \(t+1\), and \(t+2\) is shown. The nodes corresponding to the deterministic tranformation \(\log(p_t)\) are omitted for clarity.](dag.png){width=90%} - -We fit the model using the `dynamite()` function. In order to satisfy the package size requirements of CRAN, we have to use small number of iterations and additional thinning: - -```{r multichannelfit, echo=TRUE, eval=FALSE} -multichannel_example_fit <- dynamite( - multi_formula, data = multichannel_example, - time = "time", group = "id", - chains = 1, cores = 1, iter = 2000, warmup = 1000, init = 0, refresh = 0, - thin = 5, save_warmup = FALSE) -``` - -You can update the estimated model which is included in the package as - -```{r, eval = FALSE} -multichannel_example_fit <- update(multichannel_example_fit, - iter = 2000, - warmup = 1000, - chains = 4, - cores = 4, - refresh = 0, - save_warmup = FALSE -) -``` - -Note that the `dynamite` call above produces a warning message related to the deterministic channel `logp`: - -```{r, eval = TRUE, echo = FALSE} -fit <- dynamite( - multi_formula, data = multichannel_example, - time = "time", group = "id", debug = list(no_compile = TRUE)) -``` - -This happens because the formulas of the other channels have `lag(logp)` as a predictor, whose value is undefined at the first time point without the initial value. However, in this case we can safely ignore the warning because the model contains lags of `b` and `g` as well meaning that the first time point in the model is treated as fixed and does not enter the model fitting process. - -We can obtain posterior samples or summary statistics of the model using the `as.data.frame()`, `coef()`, and `summary()` methods, but here we opt for visualizing the results as depicted in Figure \@ref(fig:multichannelbetas) by using the `plot_betas` function: - -```{r multichannelbetas, echo=TRUE, eval=TRUE, fig.width=7, fig.height=4, fig.cap="Posterior means and 90% intervals of the time-invariant coefficients for the multichannel model."} -library("ggplot2") -theme_set(theme_bw()) -plot_betas(multichannel_example_fit) + labs(title = "") -``` - -Note the naming of the model parameters; for example, `beta_b_g_lag1` corresponds to a time-invariant coefficient `beta` of the lagged predictor `g` of the channel `b`. - -Assume now that we are interested in the causal effect of \(b_5\) on \(g_t\) at times \(t = 6, \ldots, 20\). There is no direct effect from \(b_5\) to \(g_6\), but because \(g_t\) affects \(b_{t+1}\) (and \(p_{t+1}\)), which in turn has an effect on all the variables at \(t+2\), we should see an indirect effect of \(b_5\) to \(g_t\) from time \(t = 7\) onward. For this task, we first create a new dataset where the values of our response variables after time \(t = 5\) are assigned to be missing: - -```{r multichannelnewdata, echo=TRUE, eval=TRUE} -multichannel_newdata <- multichannel_example |> - mutate(across(g:b, ~ ifelse(time > 5, NA, .x))) -``` - -We then obtain predictions for time points \(t = 6,\ldots,20\) when \(b_t\) is assigned to be 0 or 1 for every individual at time \(t = 5\): - -```{r multichannelnewdata_causal, echo=TRUE, eval=TRUE} -new0 <- multichannel_newdata |> mutate(b = ifelse(time == 5, 0, b)) -pred0 <- predict(multichannel_example_fit, newdata = new0, type = "mean") -new1 <- multichannel_newdata |> mutate(b = ifelse(time == 5, 1, b)) -pred1 <- predict(multichannel_example_fit, newdata = new1, type = "mean") -``` - -By default, the output from `predict()` is a single data frame containing the original new data and the samples from the posterior predictive distribution of new observations. By defining `type = "mean"` we specify that we are interested in the posterior distribution of the expected values instead. In this case the the predicted values in a data frame are in the columns `g_mean`, `p_mean`, and `b_mean` where the `NA` values of the `newdata` argument are replaced with the posterior samples from the model (the output also contains an additional column corresponding to the auxiliary channel `logp` and posterior draw index variable `.draw`). - -```{r multichannelpredictions, echo=TRUE, eval=TRUE} -head(pred0, n = 10) |> round(3) -``` - -We can now compute summary statistics over the individuals and then over the posterior samples to obtain posterior distribution of the causal effects \(E(g_t | do(b_5))\) as - -```{r multichannelcausalposterior, echo=TRUE, eval=TRUE} -sumr <- bind_rows(list(b0 = pred0, b1 = pred1), .id = "case") |> - group_by(case, .draw, time) |> - summarise(mean_t = mean(g_mean)) |> - group_by(case, time) |> - summarise( - mean = mean(mean_t), - q5 = quantile(mean_t, 0.05, na.rm = TRUE), - q95 = quantile(mean_t, 0.95, na.rm = TRUE) - ) -``` - -It is also possible to perform the marginalization over groups within `predict()` by using the argument `funs`, which can be used to provide a named list of lists which contains functions to be applied for the corresponding channel. This approach can save considerably amount of memory in case of large number of groups. The names of the outermost list should be channel names. The output is now returned as a `"list"` with two components, `simulated` and `observed`, with the new samples and the original `newdata` respectively. In our case we can write - -```{r multichannelpredictfuns, echo=TRUE, eval=TRUE} -pred0b <- predict( - multichannel_example_fit, newdata = new0, type = "mean", - funs = list(g = list(mean_t = mean)) -)$simulated -pred1b <- predict( - multichannel_example_fit, newdata = new1, type = "mean", - funs = list(g = list(mean_t = mean)) -)$simulated -sumrb <- bind_rows( - list(b0 = pred0b, b1 = pred1b), .id = "case") |> - group_by(case, time) |> - summarise( - mean = mean(mean_t_g), - q5 = quantile(mean_t_g, 0.05, na.rm = TRUE), - q95 = quantile(mean_t_g, 0.95, na.rm = TRUE) - ) -``` - -The resulting data frame `sumrb` is equal to the previous `sumr` (apart from stochasticity due to simulation of new trajectories). We can then visualize our predictions as shown in Figure \@ref(fig:multichannelvisual) by writing: - -```{r multichannelvisual, echo=TRUE, eval=TRUE, warning=FALSE, fig.width=7, fig.height=3.5, fig.cap="Expected causal effects of interventions \\(do(b_5 = 0)\\) and \\(do(b_5 = 1)\\) on \\(g_t\\)."} -ggplot(sumr, aes(time, mean)) + - geom_ribbon(aes(ymin = q5, ymax = q95), alpha = 0.5) + - geom_line() + - scale_x_continuous(n.breaks = 10) + - facet_wrap(~ case) -``` - -Note that these estimates do indeed coincide with the causal effects (assuming of course that our model is correct), as we can find the backdoor adjustment formula [@Pearl1995] -\[ - E(g_t | do(b_5 = x)) = \sum_{g_5, p_5}E(g_t | b_5 = x, g_5, p_5)P(g_5, p_5), -\] -which is equal to `mean_t` in above codes. We can also compute the difference \(E(g_t | do(b_5 = 1)) - E(g_t | do(b_5 = 0))\) to directly compare the effects of the interventions by writing: - -```{r multichannelcausaldiff, echo=TRUE, eval=TRUE} -sumr_diff <- bind_rows(list(b0 = pred0, b1 = pred1), .id = "case") |> - group_by(.draw, time) |> - summarise( - mean_t = mean(g_mean[case == "b1"] - g_mean[case == "b0"]) - ) |> - group_by(time) |> - summarise( - mean = mean(mean_t), - q5 = quantile(mean_t, 0.05, na.rm = TRUE), - q95 = quantile(mean_t, 0.95, na.rm = TRUE) - ) -``` - -We can also plot the difference in the expected causal effects as shown in Figure \@ref(fig:multichannelcausaldiffplot) by running: - -```{r multichannelcausaldiffplot, echo=TRUE, eval=TRUE, warning=FALSE, fig.width=7, fig.height=3.5, fig.cap="Difference of the expected causal effects \\(E(g_t | do(b_5 = 1)) - E(g_t | do(b_5 = 0)) \\)."} -ggplot(sumr_diff, aes(time, mean)) + - geom_ribbon(aes(ymin = q5, ymax = q95), alpha = 0.5) + - geom_line() + - scale_x_continuous(n.breaks = 10) -``` - -Which shows that there is a short term effect of \(b\) on \(g\), although the posterior uncertainty is quite large. - -# Model construction {#sec:construction} - -Here we describe the various model components that be included in the model formulas of the package. These components are modular and easily combined in any order via a specialized `+` operator, which also ensures that the model formula is well-defined and syntactically valid before estimating the model. The model formula components define the response channels, auxiliary channels, the splines used for time-varying coefficients, correlated random effects, and latent factors. - -## Defining response channels {#sec:defining} - -The response channels are defined by combining the channel-specific formulas defined via the function `dynamiteformula()` for which a shorthand alias `obs()` is also provided. The function `obs()` takes two arguments: `formula` and `family`, which define how the response variable of the channel depends on the predictor variables in the standard R formula syntax and the family of the response variable as a ``character'` string, respectively. These channel-specific definitions are then combined into a single model with the `+` operator. For example, the following formula - -```{r modeldef, echo=TRUE, eval=TRUE} -dform <- obs(y ~ lag(x), family = "gaussian") + - obs(x ~ z, family = "poisson") -``` - -defines a model with two channels. First, we declare that `y` is a gaussian variable depending on the previous value of `x` (`lag(x)`) and then we add a second channel declaring `x` as Poisson distributed depending on some exogenous variable `z` (for which we do not define any distribution). Note that the model formula can be defined without any reference to some external data, just as an R formula can. The model formula is an object of class `"dynamiteformula"` for which the `print()` method is available which provides a summary of the defined channels and other model components: - -```{r modeldefprint, echo=TRUE, eval=TRUE} -print(dform) -``` - -Currently, the package supports the following distributions for the observations: - -- *Categorical* (`"categorical"`) with a softmax link using the first category as the reference. It is recommended to use Stan version 2.23 or higher which enables the use of the `categorical_logit_glm` function in the generated Stan code for improved computational performance. See the documentation of `categorical_logit_glm` in the Stan function reference manual (https://mc-stan.org/users/documentation/) for further information. -- *Gaussian* (`"gaussian"`) identity link, parameterized using mean and standard deviation. -- *Poisson* (`"poisson"`) log-link, with an optional known offset variable. -- *Negative-binomial* (`"negbin"`) log-link, using mean and dispersion parameterization, with an optional known offset variable. See the documentation on the `NegBinomial2` function in the Stan function reference manual. -- *Bernoulli* (`"bernoulli"`) logit-link. -- *Binomial* (`"binomial"`) logit-link. -- *Exponential* (`"exponential"`) log-link. -- *Gamma* (`"gamma"`) log-link, using mean and shape parameterization. -- *Beta* (`"beta"`) logit-link, using mean and precision parameterization. -- *Multivariate Gaussian* (`"mvgaussian"`) identity link, parameterized using means, standard deviations and cholesky factor of the correlation matrix. -- *Multinomial* (`"multinomial"`) with a softmax link. - -There is also a special response variable type `"deterministic"` which can be used to define deterministic transformations of other variables in the model. This special type is explained in greater detail in Section \@ref(sec:auxiliary). - -## Lagged responses and predictors {#sec:lags} - -Models in the `dynamite` package have limited support for contemporaneous dependencies in order to avoid complex cyclic dependencies which would make handling missing data, subsequent predictions, and causal inference challenging or impossible. In other words, the model structure must be acyclic, meaning that there is an order of the response variables such that each response at time \(t\) can be unambiguously defined in this order in terms of responses that have already been defined at time \(t\) or in terms of other variables in the model at time \(t-1\). The acyclicity of model formulas defined by the user is checked automatically upon construction. To demonstrate, the following formula is valid: - -```{r validformula, echo=TRUE, eval=FALSE} -obs(y ~ x, family = "gaussian") + - obs(x ~ z, family = "poisson") -``` - -but the following is not and produces an error due to a cyclic dependency between the responses: - -```{r cyclic_form, echo=TRUE, eval=TRUE, error=TRUE} -obs(y ~ x, family = "gaussian") + - obs(x ~ z, family = "poisson") + - obs(z ~ y, family = "categorical") -``` - -On the other hand, there are no limitations concerning dependence of response variables and their previous values or previous values of exogenous predictors, i.e., lags. In the first example of Section \@ref(sec:defining) we used the syntax `lag(x)`, a shorthand for `lag(x, k = 1)`, which defines a one-step lag of the variable `x`. Higher order lags can also be defined by adjusting the argument `k`. The argument `x` of `lag()` can either be a response variable or an exogenous predictor. - -The model component `lags()` can also be used to quickly add lagged responses as predictors across multiple channels. This component adds a lagged value of each response in the model as a predictor to every channel. For example, calling - -```{r globallags, echo=TRUE, eval=FALSE} -obs(y ~ z, family = "gaussian") + - obs(x ~ z, family = "poisson") + - lags(k = 1) -``` - -would add `lag(y, k = 1)` and `lag(x, k = 1)` as predictors of `x` and `y`. Therefore, the previous code would produce the same model as writing - -```{r equivalentlags, echo=TRUE, eval=FALSE} -obs(y ~ z + lag(y, k = 1) + lag(x, k = 1), family = "gaussian") + - obs(x ~ z + lag(y, k = 1) + lag(x, k = 1), family = "poisson") -``` - -The function `lags()` can help to simplify the individual model formulas, especially in the case where the model consists of many channels each containing a large number of lags. Just as with the function `lag()`, the argument `k` in `lags()` can be adjusted to add higher order lags of each response to each channel, but for `lags()` it can also be a vector so that multiple lags can be added at once. The inclusion of lagged response variables in the model implies that some time points have to be considered fixed in the estimation. The number of fixed time points in the model is equal to the largest shift value \(k\) of any observed response variable in the model (defined either via `lag()` terms or the model component `lags()`). - -## Time-varying and time-invariant predictors - -The `formula` argument of `obs()` can also contain an additional special term `varying()`, which defines the time-varying part of the model equation. For example, we could write - -```{r varyingcomponent, echo=TRUE, eval=FALSE} -obs(x ~ z + varying(~ -1 + w), family = "poisson") -``` - -to define a model equation with a constant intercept, a time-invariant effect of `z`, and a time-varying effect of `w`. We also remove the duplicate intercept with `-1` within `varying()` in order to avoid identifiability issues in the model estimation. We could also define a time-varying intercept, in which case we would write: - -```{r varyingintercept, echo=TRUE, eval=FALSE} -obs(x ~ -1 + z + varying(~ w), family = "poisson") -``` - -The part of the formula not wrapped with `varying()` is assumed to correspond to the time-invariant part of the model, which can alternatively be defined with the special syntax `fixed()`. This means that the following lines would all produce the same model: - -```{r fixedcomponent, echo=TRUE, eval=FALSE} -obs(x ~ z + varying(~ -1 + w), family = "poisson") -obs(x ~ -1 + fixed(~ z) + varying(~ -1 + w), family = "poisson") -obs(x ~ fixed(~ z) + varying(~ -1 + w), family = "poisson") -``` - -The use of `fixed()` is therefore optional in the formula. If both time-varying and time-invariant intercepts are defined, the model will default to using a time-varying intercept and provides an appropriate warning for the user: - -```{r modeldefinterceptwarning, echo=TRUE, eval=TRUE} -dform_warn <- obs(y ~ 1 + varying(~1), family = "gaussian") -``` - -When defining time-varying effects, we also need to define how their respective regression coefficient behave. For this purpose, a `splines()` component should be added to the model formula, e.g., - -```{r splinescomponent, echo=TRUE, eval=FALSE} -obs(x ~ varying(~ -1 + w), family = "poisson") + - splines(df = 10) -``` - -defines a cubic B-spline with 10 degrees of freedom for the time-varying coefficients, which corresponds to the variable `w` in this instance. If the model contains multiple time-varying coefficients, the same spline basis is used for all coefficients, with unique spline coefficients and their corresponding random-walk standard deviations. The `splines()` component constructs the matrix of cardinal B-splines \(B_t\) using the `bs()` function of the `splines` package based on the degrees of freedom `df` and spline degree `degree` (default being 3 corresponding to cubic B-splines). It is also possible to switch between centered (the default) and non-centered parameterization [@Papaspiliopoulos2007] for the spline coefficients using the `noncentered` argument of the `splines()` component. This can affect the sampling efficiency of Stan, depending on the model and the informativeness of data [@Betancourt2013]. - -## Group-level random effects - -Random effect terms for each group can be defined using the special term `random()` within the `formula` argument of `obs()`, analogously to `varying()`. By default, all random effects within a group and across all channels are modeled as zero-mean multivariate normal. The optional model component `random_spec()` can be used to define non-correlated random effects as `random_spec(correlated = FALSE)`. In addition, as with the spline coefficients, it is possible to switch between centered and non-centered (the default) parameterization of the random effects using the `noncentered` argument of `random_spec()`. - -For example, the following code defines a Gaussian response variable `x` with a time-invariant common effect of `z` as well as a group-specific intercept and group-specific effect of `z`. - -```{r randomcomponent, echo=TRUE, eval=FALSE} -obs(x ~ z + random(~1 + z), family = "gaussian") -``` - -The variable that defines the groups in the data is provided in the call to the model fitting function `dynamite()` as shown in Section \@ref(sec:fitting). - -## Latent factors - -Instead of common time-varying intercept terms, it is possible to define channel-specific univariate latent factors using the `lfactor()` model component. Each latent factor is modeled as a spline, with degrees of freedom and spline degree defined via the `splines()` component (in the case that the model also contains time-varying effects, the same spline basis definition is currently used for both latent factors and time-varying effects). The argument `responses` of `lfactor()` defines which channels should contain a latent factor, while argument `correlated` determines whether the latent factors should modeled as correlated. Again, users can switch between centered and non-centered parameterizations using the argument `noncentered_psi`. - -In general, dynamic latent factors are not identifiable without imposing some constraints on the factor loadings \(\lambda\) or the latent factor \(\psi\) [@Bai2015], especially in the context of DMPMs and `dynamite`. In `dynamite` these identifiability problems are addressed via internal reparameterization and an additional argument `nonzero_lambda` which determines whether we assume that the expected value of the factor loadings is zero or not. The theory and thorough experiments regarding the robustness of these identifiability constraints is a work in progress, so some caution should be used regarding the use of the `lfactor()` component. - -## Auxiliary channels {#sec:auxiliary} - -In addition to declaring response variables via `obs()`, we can also use the function `aux()` to define auxiliary channels which are deterministic functions of other variables in the model. Defining these auxiliary variables explicitly instead of defining them implicitly on the right-hand side of the formulas (i.e., by using the "as is" function `I()`) makes the subsequent prediction steps more clear and allows easier checks on the model validity. In fact, we do not allow the use of `I()` in the `formula` argument of `dynamiteformula()`. The values of auxiliary variables are computed automatically when fitting the model, and dynamically during prediction, making the use of lagged values and other transformations possible in prediction as well. An example of a model formula using an auxiliary channel could be - -```{r formulawithaux, echo=TRUE, eval=FALSE} -obs(y ~ lag(log1x), family = "gaussian") + - obs(x ~ z, family = "poisson") + - aux(numeric(log1x) ~ log(1 + x) | init(0)) -``` - -For auxiliary channels, the formula declaration via `~` should be understood as a mathematical equality, where the right-hand side provides the defining expression of the variable on the left-hand side. Thus, the example above defines a new auxiliary channel whose response is `log1x` defined as the logarithm of `1 + x` and assigns it to be of type `"numeric"`. The type declaration is required, because it might not be possible to unambiguously determine the type of the response variable based on its expression alone from the data, especially if the expression contains `"factor"` type variables. - -Auxiliary variables can be used directly in the formulas of other channels, just like any other variable. The function `aux()` does not use the `family` argument, which is automatically set to `"deterministic"` and is a special channel type of the `obs()` function. Note that lagged values of deterministic auxiliary channels do not imply fixed time points. Instead, they must be given starting values using one of the two special syntax variants, `init()` or `past()` after the main formula separated by the `|` symbol. - -In the example above, because the channel for `y` contains a lagged value of `log1x` as a predictor, we also need to supply `log1x` with a single initial value that determines the value of the lag at the first time point. Here, `init(0)` defines the initial value of `lag(log1x)` to be zero for all individuals. In general, if the model contains higher order lags of an auxiliary channel, then `init()` can be supplied with a vector initializing each lag. - -While `init()` defines the same starting value to be used for all individuals, an alternative, special syntax `past()` can be used, which takes an R expression as its argument, and computes the starting value for each individual based on that expression. The expression is evaluated in the context of the `data` supplied to the model fitting function `dynamite()`. For example, instead of `init(0)` in the example above, we could write: - -```{r pastvalues, echo=TRUE, eval=FALSE} -obs(y ~ lag(log1x), family = "gaussian") + - obs(x ~ z, family = "poisson") + - aux(numeric(log1x) ~ log(1 + x) | past(log(z))) -``` - -which defines that the value of `lag(log1x)` at the first time point is `log(z)` for each individual, using the value of `z` in the data to be supplied to compute the actual value of the expression. The special syntax `past()` can also be used if the model contains higher order lags of auxiliary responses. In this case, more observations from the variables bound by the expression given as the argument will simply be used. - -# Model fitting and posterior inference {#sec:fitting} - -To estimate the model, the declared model formula is supplied to the `dynamite()` function, which has the following arguments: - -```{r dynamitefunction, echo=TRUE, eval=FALSE} -dynamite( - dformula, data, time, group = NULL, - priors = NULL, backend = "rstan", - verbose = TRUE, verbose_stan = FALSE, debug = NULL, ... -) -``` - -This function parses the model formula and the data to generate a custom Stan model code, which is then compiled and used to simulate the posterior distribution of the model parameters. The first three arguments of the function are mandatory. The first argument `dformula` is a `"dynamiteformula"` object that defines the model using the model components described in Section \@ref(sec:construction). The second argument `data` is a `"data.frame"` or a `"data.table"` object that contains the variables used in the model formula. The third argument `time` is a column name of `data` that specifies the unique time points. - -The remaining arguments of the function are optional. The `group` argument is a column name of `data` that specifies the unique groups (individuals), and when `group = NULL` we assume that there is only a single group (or individual). The argument `priors` supplies user-defined priors for the model parameters. The Stan backend can be selected using the `backend` argument, which accepts either `"rstan"` (the default) or `"cmdstanr"`. These options correspond to using the `rstan` and `cmdstanr` packages for the estimation, respectively. The `verbose` and `verbose_stan` arguments control the verbosity of the output from `dynamite()` and Stan, respectively. The `debug` argument can be used for various debugging options (see `?dynamite` for further information on these parameters). Finally, `...` supplies additional arguments to the backend sampling function (either `rstan::sampling()` or the `sample()` method of the `CmdStanModel` model object). - -The `data` argument should be supplied in long format, i.e., with \(N \times T\) rows in case of balanced panel data. Acceptable column types of `data` are `"integer"`, `"logical"`, `"double"`, `"character"`, and objects of class `"factor"`. Columns of the `"character"` type will be converted to `"factor"` columns. Beyond these standard types, any special classes such as `"Date"` whose internal storage type is one of aforementioned types can be used, but these classes will be dropped, and the columns will be converted to their respective storage types. List columns are not supported. The `time` argument should be a `"numeric"` or a `"factor"` column of `data`. If `time` is a `"factor"` column, it will be converted to an `"integer"` column. For categorical response channels, `"ordered factor"` columns are also accepted, and they will be converted to unordered `"factor"` columns. Missing values in both response and predictor columns are supported but non-finite values are not. Observations with missing predictor or response values are omitted from the data when the model is fitted. - -As an example, the following function call would estimate the model using data in the data frame `d`, which contains the variables `year` and `id` (defining the time-index and group-index variables of the data, respectively). Arguments `chains` and `cores` are passed to `rstan::sampling()` which then uses two parallel Markov chains in the Markov chain Monte Carlo (MCMC) sampling of the model parameters. - -```{r dynamitecall, echo=TRUE, eval=FALSE} -dynamite( - dformula = obs(x ~ varying(~ -1 + w), family = "poisson") + - splines(df = 10), - data = d, time = "year", group = "id", - chains = 2, cores = 2 -) -``` - -The output of `dynamite` is a `"dynamitefit"` object for which the standard S3 methods such as `summary()`, `plot()`, `print()`, `fitted()`, and `predict()` are provided along with various other methods and utility functions which we will describe in the following sections in more detail. - -### User-defined priors - -The function `get_priors()` can be used to determine the parameters of the model whose prior distribution can be customized. The function can be applied to an existing model fit object (`"dynamitefit"`) or a model formula object (`"dynamiteformula"`). The function returns a `"data.frame"` object, which the user can then manipulate to include their desired priors and consequently supply to the model fitting function `dynamite()`. - -For instance, using the model fit object `gaussian_example_fit` available in the `dynamite` package, we have the following priors: - -```{r priordefs, echo=TRUE, eval=TRUE} -get_priors(gaussian_example_fit) -``` - -To change a prior distribution, the user only needs to manipulate the `prior` column of the desired parameters using the appropriate Stan syntax and parameterization. For a categorical response variable, the column `category` describes which category the parameter is related to. For model parameters of the same type and response, a vectorized form the corresponding distribution is automatically used in the generated Stan code if applicable. - -## Methods for `"dynamitefit"` objects - -We can obtain a simple model summary with the `print()` method of objects of class `"dynamitefit"`. For instance, the model fit object `gaussian_example_fit` gives the following summary: - -```{r gaussian_example_print, echo=TRUE, eval=TRUE} -print(gaussian_example_fit) -``` - -Convergence of the MCMC chains and the smallest effective sample sizes of the model parameters can be assessed using the `mcmc_diagnostics()` method of `"dynamitefit"` object whose arguments are the model fit object and `n`, the number of potentially problematic variables report (default is 3). We refer the reader to the documentation of the `rstan::check_hmc_diagnostics()` and `posterior::default_convergence_measures()` for detailed information on the diagnostics reported by function. - -```{r mcmcdiag, echo=TRUE, eval=TRUE} -mcmc_diagnostics(gaussian_example_fit) -``` - -Note that due to CRAN restrictions the number of stored posterior samples in this example `dynamitefit` object is very small, leading to the small effective sample sizes. - -A table of posteriors draws or summaries of each parameter of the model can be obtained with the method `as.data.frame()` and `as.data.table()` which differ only in their output type which are `"data.frame"` and `"data.table"`, respectively. More specifically, the output of `as.data.frame()` is a tibble; a tidyverse variant of data frames (of class `"tbl_df"` as defined in the `tibble` [@tibble] package). These functions have the following arguments: - -```{r asdatatablemethod, echo=TRUE, eval=FALSE} -as.data.frame.dynamitefit( - x, row.names = NULL, optional = FALSE, parameters = NULL, responses = NULL, - types = NULL, summary = FALSE, probs = c(0.05, 0.95), include_fixed = TRUE, ... -) -``` - -Here, `x` is the `"dynamitefit"` object and `parameters` is a `"character"` vector that determines which parameters should be included in the output. If `parameters` is not used, a `"character"` vector argument `responses` can be used to determine the channels whose parameters should be included, whereas `types` is a `"character"` vector that selects a subset of parameters to extract. For determining suitable options for arguments `parameters` and `types`, methods `get_parameter_names()` and `get_parameter_types()` can be used. The argument `summary` determines whether to provide summary statistics (mean, standard deviation and quantiles selected by argument `probs`) of each parameter, or the full posterior draws. The argument `include_fixed` determines whether to include parameters related to fixed time points in the output (see Section \@ref(sec:lags) for details on fixed time points). The arguments `row.names`, `optional` and `...` are ignored for `"dynamitefit"` objects. - -For instance, we can extract the posterior summary of the time-invariant regression coefficients (`type = "beta"`) for the response variable `y` in the `gaussian_example_fit` object by writing: - -```{r parameter_posteriors, echo=TRUE, eval=TRUE} -as.data.frame( - gaussian_example_fit, - responses = "y", types = "beta", summary = TRUE -) -``` - -For `"dynamitefit"` objects, the `summary()` method is a shortcut for `as.data.frame(summary = TRUE)`. - -The default `plot()` method for `"dynamitefit"` objects produces the marginal posterior densities and traceplots of the MCMC chains for the desired parameters by using the `ggplot2` package to produce the plot. This method has the same `parameters` and `responses` arguments as the `as.data.frame()` method, and the argument `type`, which is analogous to the `types` argument of `as.data.frame()`, but accepts only a single character string for plotting parameters of a specific type. Figure \@ref(fig:parameterposteriorplot) shows the posterior density and traceplot of the `beta_y_z` parameter, which is the time-invariant regression coefficient of `y` in the `gaussian_example_fit` model. - -```{r parameterposteriorplot, echo=TRUE, eval=TRUE, warning=FALSE, fig.width=7, fig.height=3.5, fig.cap="Posterior density and traceplots for the time-invariant regression coefficient of `z` in the model for the response variable `y` (parameter `beta_y_z`) in the `gaussian_example_fit` model."} -plot(gaussian_example_fit, responses = "y", types = "beta") -``` - -There are also customized plotting functions available for specific parameters types such as time-invariant regression coefficients, time-varying regression coefficients, group-specific random effects, latent factor loadings, and latent factors. For instance, we can obtain the posteriors of the time-varying coefficients for the `gaussian_example_fit` object to see how the parameter values change over time, as shown in Figure \@ref(fig:gaussiandeltas). - -```{r gaussiandeltas, echo=TRUE, eval=TRUE, warning=FALSE, fig.width=7, fig.height=3.5, fig.cap="Posterior mean and 90\\% intervals of the time-varying coefficients for the `gaussian_example_fit` model. The panels from left to right show the time-varying intercept for `y`, the time-varying effect of `x` on `y`, and the time-varying effect of `lag(y)` (the previous time-point) on `y`."} -plot(gaussian_example_fit, types = "delta") + labs(title = "") -``` - -The generated Stan code of the model can be extracted with the method `get_code()` as a `"character"` string. This feature of geared towards advanced users who may for example need to make slight modifications to the generated code in order to adapt the model to a specific scenario that cannot be accomplished with the `dynamite` model syntax. The generated code also contains helpful annotations describing the model blocks, parameters, and complicated code sections. Using the argument `blocks`, we can extract only specific blocks of the full model code. To illustrate, we extract the parameters block of the `gaussian_example_fit` model code as the full model code is too large to display. - -```{r gaussian_model_code, echo=TRUE, eval=TRUE} -cat(get_code(gaussian_example_fit, blocks = "parameters")) -``` - -# Prediction {#sec:prediction} - -The `dynamite` package provides a comprehensive set of features for obtaining predictions based on the posterior distribution of the model parameters. The package supports imputation of missing exogenous predictor values (last observation carried forward), summarized and individual-level predictions, and various methods to account for new levels of the `group` variable for random effects. Counterfactual predictions can also be obtained which enables the study of causal effects and other intricate causal quantities. It should be noted that the predictions do not directly support forecasting as there is no unambiguous way to define how the splines for the time-varying regression coefficients should behave outside of the observed time points. However, such predictions can be obtained by augmenting the original data with missing values for future time points. - -The `predict()` method for `"dynamitefit"` objects can be used to obtain predictions from the posterior predictive distribution. This function has the following arguments: - -```{r predictmethod, echo=TRUE, eval=FALSE} -predict.dynamitefit( - object, newdata = NULL, type = c("response", "mean", "link"), - funs = list(), impute = c("none", "locf"), - new_levels = c("none", "bootstrap", "gaussian", "original"), - global_fixed = FALSE, n_draws = NULL, expand = TRUE, - df = TRUE, ... -) -``` - -We will only explain the most important arguments of this method and refer the reader to the package documentation for more information. The first argument `object` is the `"dynamitefit"` object. The argument `newdata` can be used to define the groups, time points and predictor values that the predictions should be computed for. If `newdata` is `NULL`, predictions will be computed for the original `data` supplied to the `dynamite()` function when the model was fitted from the first non-fixed time point onward. The `type` argument selects the type of the computed predictions. By default, `type = "response"` returns the individual-level simulated predictions for the response variables of the model. Options `"link"` and `"mean"` return the linear predictor values and the expected values of the posterior predictive distribution, respectively. The argument `n_draws` control the number of posterior draws to be used for prediction. By default, all draws are used. - -For example, we can obtain posterior predictive samples for the first 4 groups in the `gaussian_example` dataset using the corresponding example model fit `gaussian_example_fit`. The predictions are shown in Figure \@ref(fig:gaussianpred) and can be obtained as follows: - -```{r gaussianpred, echo=TRUE, eval=TRUE, fig.width=7, fig.height=4, fig.cap="Posterior predictive samples for the first 4 groups of the `gaussian_example` data. Lines in red represent the observed values."} -pred <- predict(gaussian_example_fit, n_draws = 50) -pred |> - dplyr::filter(id < 5) |> - ggplot(aes(time, y_new, group = .draw)) + - geom_line(alpha = 0.5) + - geom_line(aes(y = y), colour = "tomato") + - facet_wrap(~ id) -``` - -The `fitted()` method is also provided for `"dynamitefit"` objects. In contrast to multi-step predictions of `predict()`, this function computes expected values of the posterior predictive distributions at each time point conditional on the original observations. - -We note that the multi-step predictions contain not only the parameter uncertainty but also the inherent aleatoric (stochastic) uncertainty of the trajectories. The Monte Carlo variation due to finite number of posterior samples can be reduced by increasing the number of iterations or chains of the MCMC run (as with any posterior summaries) or by combining samples from multiple `predict()` calls in case the Monte Carlo error is mostly due to trajectory simulation. - -## Summarized predictions and memory conservation {#sec:summary_prediction} - -For large data sets and complicated models, obtaining individual-level predictions can be memory intensive. For example, data with 100 groups, 100 time points, a categorical response with 4 categories, and 1000 posterior draws would result in 40 million elements. A simple way to reduce memory usage is to set the argument `expand` of `predict()` to `FALSE` (the default is `TRUE`). Disabling this argument separates the simulated values from the fixed predictors in the model into two `"data.table"` objects in the output, called `simulated` and `observed`, which are then returned as a `"list"` object. This optimization is always carried out internally, meaning that the value of the `expand` argument only affects the returned output. - -To further reduce memory usage, the argument `funs` can be used to obtain summarized predictions instead of individual-level predictions for each time point. This argument accepts a named list of lists of named functions for each response channel of the model, where the supplied functions are then applied over the individuals. The resulting columns in the output are named based on the function names and the response variables. The `expand` argument is automatically set to `FALSE` when using the `funs` argument. For example, we could compute the mean and standard deviation of the predictions for the response variable `y` in the `gaussian_example` dataset at each time point as follows: - -```{r gaussianpredfuns, echo=TRUE, eval=TRUE} -pred_funs <- predict( - gaussian_example_fit, - funs = list(y = list(mean = mean, sd = sd)) -) -head(pred_funs$simulated) -``` - -The reduction in memory usage compared to the full individual-level predictions is rather substantial even in this simple scenario: - -```{r gaussianpredmem, echo=TRUE, eval=TRUE} -pred_full <- predict(gaussian_example_fit) -format(object.size(pred_full), "Mb") -format(object.size(pred_funs), "Mb") -``` - -# Summary {#sec:summary} - -In this vignette, we presented the `dynamite` package for Bayesian inference of DMPMs. The package provides a user-friendly interface for model construction, estimation, prediction, posterior inference, and visualization with an extensive and detailed documentation of its features. The package has been designed with the aim of being as general as possible by supporting multivariate models, many response variable distributions, custom prior distributions, and common model features such as time-varying and random effects. The package design also aims for high performance in model estimation by employing Stan and in general-purpose data manipulation by using `data.table` which is especially reflected in prediction. For advanced users, the Stan code generated by `dynamite` can be extracted and adapted to user-specific scenarios. - -In the future, we plan to extend the capabilities of `dynamite` by adding support for more distributions. Some distributions in Stan also lack efficient likelihood function variants, such as the Bernoulli distribution, which will likely become available in the future, and will be subsequently implemented in `dynamite` as well. - -# References diff --git a/vignettes/dynamite.bib b/vignettes/dynamite.bib deleted file mode 100644 index 3a61e51c..00000000 --- a/vignettes/dynamite.bib +++ /dev/null @@ -1,582 +0,0 @@ -@Manual{pder, - title = {{pder}: Panel Data Econometrics with {R}}, - author = {Yves Croissant and Giovanni Millo}, - year = {2022}, - note = {R package version 1.0-2}, - url = {https://CRAN.R-project.org/package=pder}, -} - -@article{Cohen2003, - title={The effects of mandatory seat belt laws on driving behavior and traffic fatalities}, - author={Cohen, Alma and Einav, Liran}, - journal={Review of Economics and Statistics}, - volume={85}, - number={4}, - pages={828--843}, - year={2003} -} -@article{Wood2020, - title = {Inference and Computation With Generalized Additive Models and Their Extensions}, - author = {Wood, Simon N}, - journal = {TEST}, - volume = {29}, - number = {2}, - pages = {307--339}, - year = {2020}, - publisher = {Springer-Verlag}, - doi = {10.1007/s11749-020-00711-5} -} - -@article{Sallas1981, - author = {William M. Sallas and David A. Harville}, - journal = {Journal of the American Statistical Association}, - number = {376}, - pages = {860--869}, - publisher = {Taylor \& Francis}, - title = {Best Linear Recursive Estimation for Mixed Linear Models}, - volume = {76}, - year = {1981} -} - -@Article{KFAS, - title = {{KFAS}: Exponential Family State Space Models in {R}}, - author = {Jouni Helske}, - journal = {Journal of Statistical Software}, - year = {2017}, - volume = {78}, - number = {10}, - pages = {1--39}, - doi = {10.18637/jss.v078.i10} -} - -@article{Chow2010, - title = {Equivalence and Differences Between Structural Equation Modeling and State-Space Modeling Techniques}, - author = {Sy-Miin Chow and Moon-ho Ringo Ho and Ellen L. Hamaker and Conor V. Dolan}, - journal = {Structural Equation Modeling: A Multidisciplinary Journal}, - year = {2010}, - volume = {17}, - pages = {303--332} -} - -@Article{bssm, - title = {{bssm}: Bayesian Inference of Non-linear and Non-Gaussian State Space Models in {R}}, - author = {Jouni Helske and Matti Vihola}, - year = {2021}, - doi = {10.32614/RJ-2021-103}, - journal = {The R Journal}, - pages = {578--589}, - volume = {13}, - number = {2} -} - -@Article{pomp, - title = {Statistical Inference for Partially Observed {Markov} Processes via the R Package {pomp}}, - author = {Aaron A. King and Dao Nguyen and Edward L. Ionides}, - journal = {Journal of Statistical Software}, - year = {2016}, - volume = {69}, - number = {12}, - pages = {1--43}, - doi = {10.18637/jss.v069.i12} - } - -@Article{depmixS4, - title = {{depmixS4}: An {R} Package for Hidden {M}arkov Models}, - author = {Ingmar Visser and Maarten Speekenbrink}, - journal = {Journal of Statistical Software}, - year = {2010}, - volume = {36}, - number = {7}, - pages = {1--21}, - doi = {10.18637/jss.v036.i07} -} - -@Article{dynr, - title = {What's for {dynr}: A Package for Linear and Nonlinear Dynamic Modeling in {R}}, - author = {Lu Ou and Michael D. Hunter and Sy-Miin Chow}, - journal = {The R Journal}, - year = {2019}, - volume = {11}, - pages = {1--20}, -} - -@article{Harvey1978, - author = {Andrew C. Harvey}, - journal = {Annales de l'ins\'{e}\'{e}}, - number = {30/31}, - pages = {203--226}, - title = {The Estimation of Time-Varying Parameters from Panel Data}, - year = {1978} -} - -@article{Papaspiliopoulos2007, - author = {Omiros Papaspiliopoulos and Gareth O. Roberts and Martin Sk{\"o}ld}, - title = {A General Framework for the Parametrization of Hierarchical Models}, - volume = {22}, - journal = {Statistical Science}, - number = {1}, - publisher = {Institute of Mathematical Statistics}, - pages = {59--73}, - year = {2007}, - doi = {10.1214/088342307000000014} -} - -@misc{Betancourt2013, - doi = {10.48550/ARXIV.1312.0906}, - url = {https://arxiv.org/abs/1312.0906}, - author = {Betancourt, M. J. and Girolami, Mark}, - title = {Hamiltonian Monte Carlo for Hierarchical Models}, - publisher = {arXiv}, - year = {2013} -} - -@article{Bai2015, - title = {Identification and {B}ayesian Estimation of Dynamic Factor Models}, - author = {Bai, Jushan and Wang, Peng}, - journal = {Journal of Business \& Economic Statistics}, - volume = {33}, - number = {2}, - pages = {221--240}, - year = {2015}, - publisher = {Taylor \& Francis} -} - -@incollection{Sun2009, - title = {Semiparametric Estimation of Fixed-Effects Panel Data Varying Coefficient Models}, - author = {Sun, Yiguo and Carroll, Raymond J and Li, Dingding}, - booktitle = {Nonparametric econometric methods}, - year = {2009}, - publisher = {Emerald Group Publishing Limited} -} - -@article{Asparouhov2018, - author = {Tihomir Asparouhov and Ellen L. Hamaker and Bengt Muth\'{e}n}, - title = {Dynamic Structural Equation Models}, - journal = {Structural Equation Modeling: A Multidisciplinary Journal}, - volume = {25}, - number = {3}, - pages = {359-388}, - year = {2018}, - publisher = {Routledge}, - doi = {10.1080/10705511.2017.1406803} -} - -@article{Zyphur2020, - title = {From Data to Causes {I}: Building A General Cross-Lagged Panel Model ({GCLM})}, - volume = {23}, - shorttitle = {From {Data} to {Causes} {I}}, - doi = {10.1177/1094428119847278}, - number = {4}, - journal = {Organizational Research Methods}, - author = {Zyphur, Michael J. and Allison, Paul D. and Tay, Louis and Voelkle, Manuel C. and Preacher, Kristopher J. and Zhang, Zhen and Hamaker, Ellen L. and Shamsollahi, Ali and Pierides, Dean C. and Koval, Peter and Diener, Ed}, - year = {2020}, - pages = {651--687}, -} - - -@article{Bollen2010, - author = {Kenneth A. Bollen and Jennie E. Brand}, - journal = {Social Forces}, - number = {1}, - pages = {1--34}, - publisher = {Oxford University Press}, - title = {A General Panel Model with Random and Fixed Effects: A Structural Equations Approach}, - volume = {89}, - year = {2010} -} - -@book{Kline2011, - author = {Rex B. Kline}, - title = {Principles And Practice of Structural Equation Modeling}, - year = {2011}, - publisher = {Guilford Press}, - address = {New York} -} - -@Book{Allison2009, - author = {Paul D. Allison}, - title = {Fixed Effects Regression Models}, - publisher = {SAGE Publications}, - year = {2009}, - doi = {10.4135/9781412993869} -} - -@article{Holtz-Eakin1988, - author = {Douglas Holtz-Eakin and Whitney Newey and Harvey S. Rosen}, - journal = {Econometrica}, - number = {6}, - pages = {1371--1395}, - publisher = {John Wiley \& Sons}, - title = {Estimating Vector Autoregressions with Panel Data}, - doi = {10.2307/1913103}, - volume = {56}, - year = {1988} -} - -@Article{plm, - title = {Panel Data Econometrics in {R}: The {plm} Package}, - author = {Yves Croissant and Giovanni Millo}, - journal = {Journal of Statistical Software}, - year = {2008}, - volume = {27}, - number = {2}, - pages = {1--43}, - doi = {10.18637/jss.v027.i02} - } - -@Manual{rstan, - title = {{RStan}: the {R} interface to {Stan}}, - author = {{Stan Development Team}}, - note = {R package version 2.26.11}, - url = {https://mc-stan.org/}, - year = {2022} -} - -@Manual{cmdstanr, - title = {{cmdstanr}: {R} Interface to '{CmdStan}'}, - author = {Jonah Gabry and Rok \v{C}e\v{s}novar}, - year = {2022}, - note = {https://mc-stan.org/cmdstanr/, https://discourse.mc-stan.org}, -} - -@article{lang2004, - title = {{B}ayesian {P}-Splines}, - volume = {13}, - doi = {10.1198/1061860043010}, - number = {1}, - journal = {Journal of Computational and Graphical Statistics}, - author = {Lang, Stefan and Brezger, Andreas}, - year = {2004}, - pages = {183--212} -} - -@Article{seqHMM, - title = {Mixture Hidden {M}arkov Models for Sequence Data: The {seqHMM} Package in {R}}, - author = {Satu Helske and Jouni Helske}, - journal = {Journal of Statistical Software}, - year = {2019}, - volume = {88}, - number = {3}, - pages = {1--32}, - doi = {10.18637/jss.v088.i03}, -} - -@Book{ggplot2, - author = {Hadley Wickham}, - title = {{ggplot2}: Elegant Graphics for Data Analysis}, - publisher = {Springer-Verlag}, - year = {2016}, - isbn = {978-3-319-24277-4}, - url = {https://ggplot2.tidyverse.org}, -} - -@Manual{datatable, - title = {{data.table}: Extension of `{data.frame}`}, - author = {Matt Dowle and Arun Srinivasan}, - year = {2022}, - url = {https://r-datatable.com}, -} - -@Manual{posterior, - title = {{posterior}: Tools for Working with Posterior Distributions}, - author = {Paul-Christian B\"{u}rkner and Jonah Gabry and Matthew Kay and Aki Vehtari}, - year = {2022}, - note = {R package version 1.3.1}, - url = {https://mc-stan.org/posterior/}, -} - -@Manual{loo, - title = {{loo}: Efficient Leave-One-Out Cross-Validation and {WAIC} for {B}ayesian Models}, - author = {Aki Vehtari and Jonah Gabry and Mans Magnusson and Yuling Yao and Paul-Christian B\"{u}rkner and Topi Paananen and Andrew Gelman}, - year = {2022}, - note = {R package version 2.5.1}, - url = {https://mc-stan.org/loo/}, -} - -@Article{Pearl1995, - author = {Judea Pearl}, - title = {Causal Diagrams for Empirical Research}, - journal = {Biometrika}, - volume = {82}, - number = {4}, - pages = {669--688}, - year = {1995}, - doi = {10.1093/biomet/82.4.669} -} - -@Article{brodersen2014, - title = {Inferring Causal Impact Using {B}ayesian Structural Time-series Models}, - author = {Kay H. Brodersen and Fabian Gallusser and Jim Koehler and Nicolas Remy and Steven L. Scott}, - journal = {The Annals of Applied Statistics}, - year = {2014}, - volume = {9}, - number = {1}, - pages = {247--274}, - doi = {10.1214/14-AOAS788} -} - -@article{arellano1991, - title = {Some Tests of Specification for Panel Data: Monte Carlo Evidence and an Application to Employment Equations}, - volume = {58}, - doi = {10.2307/2297968}, - number = {2}, - journal = {The Review of Economic Studies}, - author = {Arellano, Manuel and Bond, Stephen}, - year = {1991}, - pages = {277--297} -} - -@article{Allison2017, - title = {Maximum Likelihood for Cross-Lagged Panel Models with Fixed Effects}, - volume = {3}, - doi = {10.1177/2378023117710578}, - journal = {Socius}, - author = {Allison, Paul D. and Williams, Richard and Moral-Benito, Enrique}, - year = {2017} -} - -@article{croissant2008, - title = {Panel Data Econometrics in {R}: The {plm} Package}, - volume = {27}, - doi = {10.18637/jss.v027.i02}, - journal = {Journal of Statistical Software}, - author = {Croissant, Yves and Millo, Giovanni}, - year = {2008}, - pages = {1--43} -} - -@article{hayakawa2019, - title = {Estimation of Time-varying Coefficient Dynamic Panel Data Models}, - volume = {48}, - doi = {10.1080/03610926.2018.1476704}, - number = {13}, - urldate = {2022-05-30}, - journal = {Communications in Statistics - Theory and Methods}, - author = {Hayakawa, Kazuhiko and Hou, Jie}, - year = {2019}, - pages = {3311--3324}, -} - -@inproceedings{harvey1982, - title = {The Estimation of Regression Models with Time-Varying Parameters}, - booktitle = {Games, Economic Dynamics, and Time Series Analysis}, - publisher = {Physica-Verlag HD}, - author = {Harvey, A. C. and Phillips, G. D. A.}, - editor = {Deistler, M. and Fürst, E. and Schwödiauer, G.}, - year = {1982}, - pages = {306--321}, -} - -@book{durbin2012, - author = {Durbin, James and Koopman, Siem Jan}, - title = {Time Series Analysis by State Space Methods}, - edition = {2nd}, - year = {2012}, - address = {New York}, - publisher = {Oxford University Press} -} - -@article{hastie1993, - title = {Varying-Coefficient Models}, - volume = {55}, - number = {4}, - journal = {Journal of the Royal Statistical Society B}, - author = {Hastie, Trevor and Tibshirani, Robert}, - year = {1993}, - pages = {757--796} -} - -@techreport{casas2019, - type = {{SSRN} {Scholarly} {Paper}}, - title = {{tvReg}: Time-Varying Coefficient Linear Regression for Single and Multi-Equations in {R}}, - institution = {Social Science Research Network}, - author = {Casas, Isabel and Fernandez-Casal, Ruben}, - year = {2019}, - doi = {10.2139/ssrn.3363526} -} - -@article{knaus2021, - title = {Shrinkage in the Time-Varying Parameter Model Framework Using the R Package {shrinkTVP}}, - volume = {100}, - doi = {10.18637/jss.v100.i13}, - journal = {Journal of Statistical Software}, - author = {Knaus, Peter and Bitto-Nemling, Angela and Cadonna, Annalisa and Fr\"{u}hwirth-Schnatter, Sylvia}, - year = {2021}, - pages = {1--32} -} - -@article{eubank2004, - title = {Smoothing Spline Estimation in Varying-Coefficient Models}, - volume = {66}, - number = {3}, - journal = {Journal of the Royal Statistical Society B}, - author = {Eubank, R. L. and Huang, Chunfeng and Maldonado, Y. Mu\ {n}oz and Wang, Naisyin and Wang, Suojin and Buchanan, R. J.}, - year = {2004}, - pages = {653--667} -} - -@Article{helske2022, - author = {Jouni Helske}, - title = {Efficient {B}ayesian Generalized Linear Models with Time-Varying Coefficients: The {walker} package in {R}}, - journal = {SoftwareX}, - volume = {18}, - pages = {101016}, - year = {2022}, - doi = {10.1016/j.softx.2022.101016} -} - -@Manual{R, - title = {{R}: A Language and Environment for Statistical Computing}, - author = {{R Core Team}}, - organization = {R Foundation for Statistical Computing}, - address = {Vienna, Austria}, - year = {2021}, - url = {https://www.R-project.org/}, -} - -@Manual{dziak2021, - title = {{tvem}: Time-Varying Effect Models}, - author = {John J. Dziak and Donna L. Coffman and Runze Li and Kaylee Litson and Yajnaseni Chakraborti}, - year = {2021}, - note = {R package version 1.3.1}, - url = {https://CRAN.R-project.org/package=tvem}, -} - -@Article{lavaan, - title = {{lavaan}: An {R} Package for Structural Equation Modeling}, - author = {Yves Rosseel}, - journal = {Journal of Statistical Software}, - year = {2012}, - volume = {48}, - number = {2}, - pages = {1--36}, - doi = {10.18637/jss.v048.i02}, -} - -@Manual{panelr, - title = {{panelr}: Regression Models and Utilities for Repeated Measures and Panel Data}, - author = {Jacob A. Long}, - year = {2020}, - note = {R package version 0.7.3}, - url = {https://cran.r-project.org/package=panelr}, -} - -@Article{fixest, - title = {Efficient Estimation of Maximum Likelihood Models with Multiple Fixed-Effects: the {R} package {FENmlm}}, - author = {Laurent Berg\'{e}}, - year = {2018}, - journal = {CREA Discussion Papers}, - number = {13}, -} - -@Article{lme4, - title = {Fitting Linear Mixed-Effects Models Using {lme4}}, - author = {Douglas Bates and Martin M{\"a}chler and Ben Bolker and Steve Walker}, - journal = {Journal of Statistical Software}, - year = {2015}, - volume = {67}, - number = {1}, - pages = {1--48}, - doi = {10.18637/jss.v067.i01}, -} - -@Article{geepack, - title = {The {R} Package {geepack} for Generalized Estimating Equations}, - author = {Ulrich Halekoh and S\o{}ren H\o{}jsgaard and Jun Yan}, - year = {2006}, - journal = {Journal of Statistical Software}, - volume = {15/2}, - pages = {1--11}, -} - -@Article{brms, - title = {Advanced {B}ayesian Multilevel Modeling with the {R} Package {brms}}, - author = {Paul-Christian B\"{u}rkner}, - journal = {The R Journal}, - year = {2018}, - volume = {10}, - number = {1}, - pages = {395--411}, - doi = {10.32614/RJ-2018-017} -} - -@incollection{Helske2018, - title = {Combining Sequence Analysis and Hidden Markov Models in the Analysis of Complex Life Sequence Data}, - booktitle = {Sequence Analysis and Related Approaches: Innovative Methods and Applications}, - publisher = {Springer-Verlag}, - author = {Helske, Satu and Helske, Jouni and Eerola, Mervi}, - editor = {Ritschard, Gilbert and Studer, Matthias}, - year = {2018}, - doi = {10.1007/978-3-319-95420-2_11}, - pages = {185--200} -} - -@Manual{Stan, - title = {The {Stan} {C++} Library}, - author = {{Stan Development Team}}, - note = {Version 2.30}, - year = {2022}, - url = {https://mc-stan.org/} -} - -@article{Hamaker2015, - title = {A Critique of the Cross-Lagged Panel Model}, - author = {Hamaker, Ellen L and Kuiper, Rebecca M and Grasman, Raoul PPP}, - journal = {Psychological methods}, - volume = {20}, - number = {1}, - pages = {102}, - year = {2015}, - publisher = {American Psychological Association} -} - -@article{Mulder2021, - title = {Three Extensions of the Random Intercept Cross-Lagged Panel Model}, - volume = {28}, - doi = {10.1080/10705511.2020.1784738}, - number = {4}, - journal = {Structural Equation Modeling: A Multidisciplinary Journal}, - author = {Mulder, Jeroen D. and Hamaker, Ellen L.}, - year = {2021}, - pages = {638--648}, -} - -@Manual{dynamitepackage, - title = {{B}ayesian Modeling and Causal Inference for Multivariate Longitudinal Data}, - author = {Santtu Tikka and Jouni Helske}, - note = {R package version 1.0.3}, - year = {2022}, - url = {https://github.com/ropensci/dynamite}, -} - -@Misc{dmpm, - title = {Estimating Causal Effects from Panel Data with Dynamic Multivariate Panel Models}, - author = {Jouni Helske and Santtu Tikka}, - publisher = {SocArxiv}, - year = {2022}, - url = {https://osf.io/preprints/socarxiv/mdwu5/}, -} - -@Manual{tibble, - title = {{tibble}: Simple Data Frames}, - author = {Kirill M\"{u}ller and Hadley Wickham}, - year = {2022}, - note = {R package version 3.1.8}, - url = {https://CRAN.R-project.org/package=tibble}, -} - -@book{Pearl2009, - author={Pearl, Judea}, - year = {2009}, - title = {Causality: Models, Reasoning, and Inference}, - edition = {2nd}, - publisher = {Cambridge University Press} -} - -@Misc{dynamite, - title = {{dynamite}: An {R} Package for Dynamic Multivariate Panel Models}, - author = {Santtu Tikka and Jouni Helske}, - publisher = {arXiv}, - year = {2023}, - url = {https://arxiv.org/abs/2302.01607}, -} diff --git a/vignettes/dynamite_custom.Rmd b/vignettes/dynamite_custom.Rmd index f0194ea1..67a31c60 100644 --- a/vignettes/dynamite_custom.Rmd +++ b/vignettes/dynamite_custom.Rmd @@ -6,7 +6,6 @@ output: base_format: rmarkdown::html_vignette pkgdown: as_is: true -bibliography: dynamite.bib vignette: > %\VignetteIndexEntry{Model customization and non-MCMC estimation with dynamite} %\VignetteEngine{knitr::rmarkdown} diff --git a/vignettes/dynamite_priors.Rmd b/vignettes/dynamite_priors.Rmd index 3530c188..b4c2b862 100644 --- a/vignettes/dynamite_priors.Rmd +++ b/vignettes/dynamite_priors.Rmd @@ -6,7 +6,6 @@ output: base_format: rmarkdown::html_vignette pkgdown: as_is: true -bibliography: dynamite.bib vignette: > %\VignetteIndexEntry{Priors for dynamic multivariate panel models} %\VignetteEngine{knitr::rmarkdown} @@ -99,7 +98,7 @@ p ``` ```{r} p$prior[p$type == "sigma_nu"] <- "normal(0, 1)" # change prior for sigma_nu -p$prior[p$parameter == "sigma_y"] <- "student_t(3, 0, 2)" #prior for sigma_y +p$prior[p$parameter == "sigma_y"] <- "student_t(3, 0, 2)" # prior for sigma_y p ``` ```{r, eval = FALSE} diff --git a/vignettes/dynamite_simulation.Rmd b/vignettes/dynamite_simulation.Rmd index 5dcf2d6a..8d7ca77c 100644 --- a/vignettes/dynamite_simulation.Rmd +++ b/vignettes/dynamite_simulation.Rmd @@ -6,7 +6,6 @@ output: base_format: rmarkdown::html_vignette pkgdown: as_is: true -bibliography: dynamite.bib vignette: > %\VignetteIndexEntry{Simulating data from a dynamic multivariate panel model} %\VignetteEngine{knitr::rmarkdown} @@ -35,7 +34,7 @@ After the user has specified the parameter values, they should be supplied to `d As an illustration, the approach described in this vignette was used to generate the package data `categorical_example` as follows. First, we define the data for the first time index: ```{r categinit, eval=FALSE, echo=TRUE} -library(dynamite) +library("dynamite") set.seed(1) n_id <- 100L n_time <- 20L