From: Emmanuel Charpentier <emm.charpentier@free.fr>
To: emacs-orgmode <emacs-orgmode@gnu.org>
Subject: Possible bug (?): :noweb doesn't respect indentations (at least i R/BUGS/JAGS).
Date: Tue, 09 Apr 2019 01:01:42 +0200 [thread overview]
Message-ID: <92dddcaf59f004e86fee9b2b56ec51f4a686c656.camel@free.fr> (raw)
Compare this org source:
===================================================================
# A small :noweb mystery: indentation
#+property: header-args:R :session
#+options: toc:nil
#+author:
#+date:
The structure of a probablity proble can be represented by a ~JAGS~
code snippet:
#+name: Struct
#+begin_src R :eval never :exports code
for (i in 1:nObs) {
for (j in 1:nZ) {
Z[i,j] ~ dbern(P[i,j])
logit(P[i,j]) <- alpha + beta[j]*X[i]
}
}
#+end_src
The same code snippet can be used for simulation:
#+begin_src R :exports code :results none :noweb yes
library(rjags)
library(coda)
## Reproducibility ?
set.seed(813)
Params <- local({
nObs <- 500
nZ <- 5
X <- rnorm(nObs)
alpha <- rnorm(1,0,3)
beta <- rnorm(nZ,-1,2)
list(
nObs=nObs,
nZ=nZ,
X=X,
alpha=alpha,
beta=beta)
})
## Wrap model code
M <-
"model {
<<Struct>>
}"
## Compilation
JM <- jags.model(textConnection(M), data=Params, n.adapt=1,
n.chains=1)
## Forward sampling
JS <- coda.samples(JM, "Z", n.iter=1)
#+end_src
and for inference, after adding priors of parameters:
#+name: Priors
#+begin_src R :eval never :exports code
## Priors
alpha ~ dt(0, 1e-2, 3)
for (j in 1:nZ) {
beta[j] ~ dt(0,1e-2, 3)
}
#+end_src
#+name: Inference
#+begin_src R :noweb yes :exports code
Data <- list(
nObs=Params$nObs,
nZ=Params$nZ,
X=Params$X,
Z=matrix(as.matrix(JS), ncol=Params$nZ, byrow=FALSE))
## Wrap inference model
MI <-
"model {
<<Struct>>
<<Priors>>
}"
## Compilation
JMI <- jags.model(textConnection(MI), Data, n.chains=4)
## Inference sampling
JMS <- coda.samples(JMI, c("alpha", "beta"), n.iter=1000)
#+end_src
#+RESULTS: Inference
===================================================================
With the result of its export to Ascii:
===================================================================
The structure of a probablity proble can be represented by a `JAGS'
code
snippet:
,----
| for (i in 1:nObs) {
| for (j in 1:nZ) {
| Z[i,j] ~ dbern(P[i,j])
| logit(P[i,j]) <- alpha + beta[j]*X[i]
| }
| }
`----
The same code snippet can be used for simulation:
,----
| library(rjags)
| library(coda)
| ## Reproducibility ?
| set.seed(813)
| Params <- local({
| nObs <- 500
| nZ <- 5
| X <- rnorm(nObs)
| alpha <- rnorm(1,0,3)
| beta <- rnorm(nZ,-1,2)
| list(
| nObs=nObs,
| nZ=nZ,
| X=X,
| alpha=alpha,
| beta=beta)
| })
| ## Wrap model code
| M <-
| "model {
| for (i in 1:nObs) {
| for (j in 1:nZ) {
| Z[i,j] ~ dbern(P[i,j])
| logit(P[i,j]) <- alpha + beta[j]*X[i]
| }
| }
| }"
| ## Compilation
| JM <- jags.model(textConnection(M), data=Params, n.adapt=1,
n.chains=1)
| ## Forward sampling
| JS <- coda.samples(JM, "Z", n.iter=1)
`----
and for inference, after adding priors of parameters:
,----
| ## Priors
| alpha ~ dt(0, 1e-2, 3)
| for (j in 1:nZ) {
| beta[j] ~ dt(0,1e-2, 3)
| }
`----
,----
| Data <- list(
| nObs=Params$nObs,
| nZ=Params$nZ,
| X=Params$X,
| Z=matrix(as.matrix(JS), ncol=Params$nZ, byrow=FALSE))
| ## Wrap inference model
| MI <-
| "model {
| for (i in 1:nObs) {
| for (j in 1:nZ) {
| Z[i,j] ~ dbern(P[i,j])
| logit(P[i,j]) <- alpha + beta[j]*X[i]
| }
| }
| ## Priors
| alpha ~ dt(0, 1e-2, 3)
| for (j in 1:nZ) {
| beta[j] ~ dt(0,1e-2, 3)
| }
| }"
| ## Compilation
| JMI <- jags.model(textConnection(MI), Data, n.chains=4)
| ## Inference sampling
| JMS <- coda.samples(JMI, c("alpha", "beta"), n.iter=1000)
`----
===================================================================
The indentation is not respected in the included JAGS snippets. Further
attempts with exporting to PDF (both the built-in exporter and ox-
pandoc) and DOCX (ox-pandoc) show that the problem remains the same,
but, IIRC, with slight variations in whitespace.
That's not serious (just ugly) for R/JAGS ; but it might be serious for
Python/Sage, where whitespace is syntaxic.
Thoughts ?
--
Emmanuel Charpentier
next reply other threads:[~2019-04-08 23:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-08 23:01 Emmanuel Charpentier [this message]
2019-04-09 16:19 ` Possible bug (?): :noweb doesn't respect indentations (at least i R/BUGS/JAGS) Berry, Charles
2019-04-09 17:42 ` Emmanuel Charpentier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.orgmode.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=92dddcaf59f004e86fee9b2b56ec51f4a686c656.camel@free.fr \
--to=emm.charpentier@free.fr \
--cc=emacs-orgmode@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).