Learn R Programming

registr

Registration for incomplete exponential family functional data.

What it does


Functional data analysis is a set of tools for understanding patterns and variability in data where the basic unit of observation is a curve measured over some domain such as time or space. An example is an accelerometer study where intensity of physical activity was measured at each minute over 24 hours for 50 subjects. The data will contain 50 curves, where each curve is the 24-hour activity profile for a particular subject.

Classic functional data analysis assumes that each curve is continuous or comes from a Gaussian distribution. However, applications with exponential family functional data – curves that arise from any exponential family distribution, and have a smooth latent mean – are increasingly common. For example, take the accelerometer data just mentioned, but assume researchers are interested in sedentary behavior instead of activity intensity. At each minute over 24 hours they collect a binary measurement that indicates whether a subject was active or inactive (sedentary). Now we have a binary curve for each subject – a trajectory where each time point can take on a value of 0 or 1. We assume the binary curve has a smooth latent mean, which in this case is interpreted as the probability of being active at each minute over 24 hours. This is a example of exponential family functional data.

Often in a functional dataset curves have similar underlying patterns but the main features of each curve, such as the minimum and maximum, have shifts such that the data appear misaligned. This misalignment can obscure patterns shared across curves and produce messy summary statistics. Registration methods reduce variability in functional data and clarify underlying patterns by aligning curves.

This package implements statistical methods for registering exponential family functional data. The basic methods are described in more detail in our paper and were further adapted to (potentially) incomplete curve settings where (some) curves are not observed from the very beginning and/or until the very end of the common domain. For details on the incomplete curve methodology and how to use it see the corresponding package vignette. Instructions for installing the software and using it to register simulated binary data are provided below.

Installation


To install from CRAN, please use:

install.packages("registr")

To install the latest version directly from Github, please use:

install.packages("devtools")
devtools::install_github("julia-wrobel/registr")

The registr package includes vignettes with more details on package use and functionality. To install the latest version and pull up the vignettes please use:

devtools::install_github("julia-wrobel/registr", build_vignettes = TRUE)
vignette(package = "registr")

How to use it


This example registers simulated binary data. More details on the use of the package can be found in the vignettes mentioned above.

The code below uses registr::simulate_unregistered_curves() to simulate curves for 100 subjects with 200 timepoints each, observed over domain . All curves have similar structure but the location of the peak is shifted. On the observed domain the curves are unregistered (misaligned). On the domain the curves are registered (aligned).

library(registr)

registration_data = simulate_unregistered_curves(I = 100, D = 200, seed = 2018)

The plot below shows the unregistered curves and registered curves.

Continuously observed curves are shown above in order to illustrate the misalignment problem and our simulated data; the simulated dataset also includes binary values which have been generated by using these continuous curves as probabilities. The unregistered and registered binary curves for two subjects are shown below.

Our software registers curves by estimating . For this we use the function registration_fpca().

binary_registration = register_fpca(Y = registration_data, family = "binomial", 
                                    Kt = 6, Kh = 4, npc  = 1)
## Running initial registration step
## current iteration: 1
## Running final FPCA step

The plot below shows unregistered, true registered, and estimated registered binary curves for two subjects after fitting our method.

Citation

If you like our software, please cite it in your work! To cite the latest CRAN version of the package with BibTeX, use

@Manual{,
    title = {registr: Registration for Exponential Family Functional Data},
    author = {Julia Wrobel and Alexander Bauer and Erin McDonnell and Jeff Goldsmith},
    year = {2022},
    note = {R package version 2.1.0},
    url = {https://CRAN.R-project.org/package=registr},
  }

To cite the 2021 Journal of Open Source Software paper, use

@article{wrobel2021registr,
  title={registr 2.0: Incomplete Curve Registration for Exponential Family Functional Data},
  author={Wrobel, Julia and Bauer, Alexander},
  journal={Journal of Open Source Software},
  volume={6},
  number={61},
  pages={2964},
  year={2021}
}

To cite the 2018 Journal of Open Source Software paper, use

@article{wrobel2018regis,
  title={registr: Registration for Exponential Family Functional Data},
  author={Wrobel, Julia},
  journal={The Journal of Open Source Software},
  volume={3},
  year={2018}
}

Contributions


If you find small bugs, larger issues, or have suggestions, please file them using the issue tracker or email the maintainer at julia.wrobel@cuanschutz.edu. Contributions (via pull requests or otherwise) are welcome.

Copy Link

Version

Install

install.packages('registr')

Monthly Downloads

173

Version

2.1.0

License

MIT + file LICENSE

Maintainer

Julia Wrobel

Last Published

October 2nd, 2022

Functions in registr (2.1.0)

determine_npc

Determine the number of FPCs based on the share of explained variance
gfpca_twoStep

Generalized functional principal component analysis
ensure_proper_beta

Correct slightly improper parameter vectors
deriv.inv.logit

Estimate the derivative of the logit function
fpca_gauss_argPreparation

Internal main preparation function for fpca_gauss
fpca_gauss

Functional principal components analysis via variational EM
data_clean

Convert data to a refund object
fpca_gauss_optimization

Internal main optimization for fpca_gauss
expectedScores

Calculate expected score and score variance for the current subject.
expectedXi

Estimate variational parameter for the current subject.
nhanes

NHANES activity data
initial_params

Create initial parameters for (inverse) warping functions
mean_curve

Simulate mean curve
loss_h

Loss function for registration step optimization
piecewise_linear2_hinv

Create two-parameter piecewise linear (inverse) warping functions
lambdaF

Apply lambda transformation of variational parameter.
mean_sim

Simulate mean
loss_h_gradient

Gradient of loss function for registration step
grid_subj_create

Generate subject-specific grid (t_star)
growth_incomplete

Berkeley Growth Study data with simulated incompleteness
simulate_functional_data

Simulate functional data
simulate_unregistered_curves

Simulate unregistered curves
registr

Register Exponential Family Functional Data
register_fpca

Register curves using constrained optimization and GFPCA
registr_oneCurve

Internal function to register one curve
squareTheta

Calculate quadratic form of spline basis functions for the current subject.
plot.fpca

Plot the results of a functional PCA
psi1_sim

Simulate PC1
psi2_sim

Simulate PC2
coarsen_index

Coarsen an index vector to a given resolution
crossprods_irregular

Crossproduct computation for highly irregular grids
bfpca_argPreparation

Internal main preparation function for bfpca
bs_deriv

Nth derivative of spline basis
bfpca_optimization

Internal main optimization for bfpca
crossprods_regular

Crossproduct computation for mostly regular grids
constraints

Define constraints for optimization of warping functions
cov_hall

Covariance estimation after Hall et al. (2008)
bfpca

Binary functional principal components analysis
amp_curve

Simulate amplitude variance