<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>
<p lang="en-US"><span style="line-height:100%">Hi,</span></p>

<p lang="en-US"><span style="line-height:100%">I want to „translate“ a MCMC algorithm written in matlab to R to eventually release it in a package. In the matlab version model input, state of the chain and chain output is stored in structs. Updating different parameters of the underlying model is performed with different functions. I already have a very raw R version where these structs are implemented as S4 classes and updates are performed with generic functions taking both classes as input. I would like to increase performance with RcppArmadillo. However, I struggle to choose a good approach since I am not very experienced in any of the above subjects and have difficulties putting together the different concepts. It would be very helpful if you could give me your thoughts on what I think my main options are, tell me in case I misunderstood some concepts or po<font color="#000000">int me int</font>o a better direction.</span></p>

<p lang="en-US"> </p>

<p lang="en-US"><span style="line-height:100%">Option 1: mainly R</span></p>

<p lang="en-US"><span style="line-height:100%">Keeping R S4 classes (or rewrite them as Reference Classes since I think they would have been a better choice for defining a class storing states of a model) and the algorithm written in R and write updating functions in RcppArmadillo. These functions can be exposed to R with Rcpp modules or attributes.</span></p>

<p lang="en-US"><span style="line-height:100%">+ possibly the easiest version since I only have to rewrite the functions in Rcpp</span></p>

<p lang="en-US"><span style="line-height:100%">- Still a lot of R which could come with performance costs</span></p>

<p lang="en-US"> </p>

<p lang="en-US"><span style="line-height:100%">Option2: mainly Rcpp</span></p>

<p><span style="line-height:100%">Define one Cpp class which stores input and updated parameters as member variables and the updating functions as member functions. Then I could write the main MCMC algorithm as a separate function that create<font color="#000000">s </font><font color="#000000">an</font><font color="#000000"> i</font>nstance of this class, calls the updating functions and returns a list containing the output. I could only expose this main algorithm (with Rcpp modules or attributes) to R and avoid exposing the internal classes. (Currently I don’t think exposure<span style="font-size:12px;"> of the classes is necessary and seems more difficult than exposing functions).The part involving the class is taken from the Kalman filter example (RcppArmadillo-intro vignette) and I imagine the structure of the algorithm function and returned list</span> similar to the gallery entry on the EM Algorithm for Probit Regressions (https://gallery.rcpp.org/articles/EM-algorithm-example/#attempt-1). </span></p>

<p lang="en-US"><span style="line-height:100%">+ probably faster</span></p>

<p lang="en-US"><span style="line-height:100%">+ possibly cleaner</span></p>

<p lang="en-US"><span style="line-height:100%">- more difficult and I have very little Cpp experience (especially with classes)</span></p>

<p lang="en-US"> </p>

<p lang="en-US"><span style="line-height:100%">Personally, I aim for a compromise between performance, implementation difficulty and the best approach since this is for my master’s thesis and I also have to consider the deadline. I think this compromise would be to stay with the main R version but rewrite the S4 classes as Reference Class.</span></p>

<p lang="en-US"><span style="line-height:100%">I'm looking forward to hearing your feedback, thoughts and experiences,</span></p>

<p lang="en-US"><span style="line-height:100%">Eva</span></p>
</div></div></body></html>