Learn R Programming

⚠️There's a newer version (0.5-0) of this package.Take me there.

serrsBayes

serrsBayes provides model-based quantification of surface-enhanced resonance Raman spectroscopy (SERRS) using sequential Monte Carlo (SMC) algorithms. The details of the Bayesian model and informative priors are provided in the arXiv preprint, Moores et al. (2016; v2 2018) “Bayesian modelling and quantification of Raman spectroscopy.” Development of this software was supported by the UK Engineering & Physical Sciences Research Council (EPSRC) programme grant “In Situ Nanoparticle Assemblies for Healthcare Diagnostics and Therapy” (ref: EP/L014165/1).

Installation Instructions

Stable releases, including binary packages for Windows & Mac OS, are available from CRAN:

install.packages("serrsBayes")

The current development version can be installed from GitHub:

devtools::install_github("mooresm/serrsBayes")

Example Usage

To simulate a synthetic Raman spectrum with known parameters:

set.seed(1234)
library(serrsBayes)

wavenumbers <- seq(700,1400,by=2)
spectra <- matrix(nrow=1, ncol=length(wavenumbers))
peakLocations <- c(840,  960, 1140, 1220, 1290)
peakAmplitude <- c(11500, 2500, 4000, 3000, 2500)
peakScale <- c(10, 15, 20, 10, 12)
signature <- weightedLorentzian(peakLocations, peakScale, peakAmplitude, wavenumbers)
baseline <- 1000*cos(wavenumbers/200) + 2*wavenumbers
spectra[1,] <- signature + baseline + rnorm(length(wavenumbers),0,200)
plot(wavenumbers, spectra[1,], type='l', xlab=expression(paste("Raman shift (cm"^{-1}, ")")), ylab="Intensity (a.u.)")
lines(wavenumbers, baseline, col=2, lty=4)
lines(wavenumbers, baseline + signature, col=4, lty=2, lwd=2)

Fit the model using SMC:

lPriors <- list(scale.mu=log(11.6) - (0.4^2)/2, scale.sd=0.4, bl.smooth=10^11, bl.knots=50,
                 beta.mu=5000, beta.sd=5000, noise.sd=200, noise.nu=4)
tm <- system.time(result <- fitSpectraSMC(wavenumbers, spectra, peakLocations, lPriors))

Sample 200 particles from the posterior distribution:

print(tm)
#>    user  system elapsed 
#> 217.139   2.145 220.691
samp.idx <- sample.int(length(result$weights), 200, prob=result$weights)
plot(wavenumbers, spectra[1,], type='l', xlab=expression(paste("Raman shift (cm"^{-1}, ")")), ylab="Intensity (a.u.)")
for (pt in samp.idx) {
  bl.est <- result$basis %*% result$alpha[,1,pt]
  lines(wavenumbers, bl.est, col="#C3000009")
  lines(wavenumbers, bl.est + result$expFn[pt,], col="#0000C309")
}

Copy Link

Version

Install

install.packages('serrsBayes')

Monthly Downloads

208

Version

0.4-0

License

GPL (>= 2) | file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Matt Moores

Last Published

April 29th, 2019

Functions in serrsBayes (0.4-0)

effectiveSampleSize

Compute the effective sample size (ESS) of the particles.
mixedVoigt

Compute the spectral signature using Voigt peaks.
sumDnorm

Sum log-likelihoods of Gaussian.
weightedGaussian

Compute the spectral signature using Gaussian peaks.
mhUpdateVoigt

Update the parameters of the Voigt peaks using marginal Metropolis-Hastings.
methanol

Raman spectrum of methanol (CH3OH)
reWeightParticles

Update the importance weights of each particle.
weightedVariance

Compute the weighted variance of the particles.
residualResampling

Compute an ancestry vector for residual resampling of the SMC particles.
weightedLorentzian

Compute the spectral signature using Lorentzian peaks.
fitSpectraMCMC

Fit the model using Markov chain Monte Carlo.
sumDlogNorm

Sum log-likelihoods of i.i.d. lognormal.
weightedMean

Compute the weighted arithmetic means of the particles.
fitSpectraSMC

Fit the model using Sequential Monte Carlo (SMC).
result2

SMC particles for methanol (CH3OH)
result

SMC particles for TAMRA+DNA (T20)
getBsplineBasis

Compute cubic B-spline basis functions for the given wavenumbers.
computeLogLikelihood

Compute the log-likelihood.
fitVoigtPeaksSMC

Fit the model with Voigt peaks using Sequential Monte Carlo (SMC).
getVoigtParam

Compute the pseudo-Voigt mixing ratio for each peak.
copyLogProposals

Initialise the vector of Metropolis-Hastings proposals.
TAMRA

Surface-enhanced Raman spectram of tetramethylrhodamine+DNA (T20)
resampleParticles

Resample in place to avoid expensive copying of data structures, using a permutation of the ancestry vector.
serrsBayes

Bayesian modelling and quantification of Raman spectroscopy
marginalMetropolisUpdate

Update all of the parameters using a single Metropolis-Hastings step.