Learn R Programming

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 
#> 257.355   3.859 286.824
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.5-0

License

GPL (>= 2) | file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Matt Moores

Last Published

June 28th, 2021

Functions in serrsBayes (0.5-0)

lsTamra

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

Fit the model using Markov chain Monte Carlo.
effectiveSampleSize

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

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

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

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

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

Fit the model with Voigt peaks using iterated batch importance sampling (IBIS).
residualResampling

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

SMC particles for methanol (CH3OH)
reWeightParticles

Update the importance weights of each particle.
resampleParticles

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

Compute the log-likelihood.
copyLogProposals

Initialise the vector of Metropolis-Hastings proposals.
result

SMC particles for TAMRA+DNA (T20)
marginalMetropolisUpdate

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

Compute the spectral signature using Gaussian peaks.
sumDnorm

Sum log-likelihoods of Gaussian.
methanol

Raman spectrum of methanol (CH3OH)
sumDexp

Sum log-likelihoods of i.i.d. exponential.
mhUpdateVoigt

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

Compute the spectral signature using Lorentzian peaks.
mixedVoigt

Compute the spectral signature using Voigt peaks.
serrsBayes

Bayesian modelling and quantification of Raman spectroscopy
sumDlogNorm

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

Compute the weighted arithmetic means of the particles.
weightedVariance

Compute the weighted variance of the particles.