I am running a Mac, 2020 to be exact.
Does your Mac have x86
hardware? I canāt produce a binary package for that.
It does not. I do also have access to a Windows computer as well.
Now the Mac builder at https://mac.r-project.org/macbuilder/submit.html is no longer found and I canāt find a new address for it. I do have the new binary version for Windows. Go to howto and note the new argument that allows you to pass MCMC sampler options for both rstan
and cmdstanr
.
Thanks Frank, this is much appreciated. I can see that sampling.args
has been added to blrm. Stupid question, but hypothetically if I wanted to change the target acceptance probability rate (adapt_delta
), what code would I specify when using sampling.args
? Iāve tried the following but Iām sure itās wrong:
blrm(y~x, backend = "rstan",
sampling.args = c(control=list(adapt_delta = 0.9)))
sampling.args=list(adapt_delta=0.9)
New binary versions for Linux, Mac, Windows were uploaded to the web site 2023-07-28 around 4pm CDT.
Thanks so much Frank! Everything seems to work now.
Just a note to those who do want to change adapt_delta
, the code sampling.args=list(control=list(adapt_delta = 0.9))
seems to do the trick.
One more query - the model no longer runs if I specify the argument keepsep = 'x'
(regardless if sampling.args
is specified). The following warning message is received:
Error in dimnames(x)$parameters :
$ operator is invalid for atomic vectors
If the keepsep
argument is removed, everything works as normal. Not sure if this is a bug or something else?
Youāre using the default of rstan
, right? Can you provide a simple reproducible example using simulated data with a minimum number of variables?
Thatās right, yes. The code does work when I use a smaller number of categories. For part of our research we plan to use a 13 category outcome. A (very) simple example is shown below:
## Very simple simulation with one binary variable (eg two-arm trial) and an
# ordinal outcome with 13 categories
set.seed(02082023)
# Treatment probs
p0 <- c(rep(1,13)) ## ie uniform when normalised
p1 <- c(rep(1,7),rep(2,6))
states <- c("A", "B", "C","D","E","F","G","H","I","J", "K","L","M")
# Simulate two arm trial data.
dMulti0 <- rmultinom(1, size = 500, prob = p0)
dMulti1 <- rmultinom(1, size = 500, prob = p1)
sample0 <- rep(states, dMulti0)
sample1 <- rep(states, dMulti1)
sample0 <- factor(sample0, levels = states, ordered = T)
sample1 <- factor(sample1, levels = states, ordered = T)
# Munge simulated data.
data <- rbind(data.frame("x" = 0, "y" = sample0),
data.frame("x" = 1, "y" = sample1))
data
## Run an unconstrained PO model
mod <- blrm(y~x,ppo=~x, data=data, backend = "rstan",keepsep='x', conc = 1,
priorsd = 1, priorsdppo = 1, seed = 1234, iter = 2000,
chains = 4,sampling.args = list(control=list(adapt_delta=0.99,max_treedepth=12)))```
This returns the following warning message:
[[1]]
Stan model 'lrmcppo' does not contain samples.
[[2]]
Stan model 'lrmcppo' does not contain samples.
[[3]]
Stan model 'lrmcppo' does not contain samples.
[[4]]
Stan model 'lrmcppo' does not contain samples.
Error in dimnames(x)$parameters :
$ operator is invalid for atomic vectors
In addition: Warning message:
In .local(object, ...) :
some chains had errors; consider specifying chains = 1 to debug
When running with just one chain, the warning message is:
[1] "Error : Initialization failed."
[1] "error occurred during calling the sampler; sampling not done"
Error in dimnames(x)$parameters :
$ operator is invalid for atomic vectors
Thanks in advance for your help!
This is very helpful but will take me some time to get to it. I did not explicitly think of the keepsep
implementation when ppo
contains the keepsep
variable. Does it run without ppo
?
Before the latest package update, keepsep
worked fine when ppo
contained the keepsep
variable with any number of categories (i.e. 13). I can also confirm that the model runs without ppo
(i.e. running the usual proportional odds model).
Interestingly, the model runs with a 5-category ordinal outcome (keeping everything else the same as before) when using both ppo
and keepsep
(code below). Could it have to do with the number of categories in the outcome?
## Very simple simulation with one binary variable (eg two-arm trial) and an
# ordinal outcome with 5 categories
set.seed(02082023)
# Treatment probs
p0 <- c(rep(1,5))
p1 <- c(rep(1,2),rep(2,3))
states <- c("A", "B", "C","D","E")
# Simulate two arm trial data.
dMulti0 <- rmultinom(1, size = 500, prob = p0)
dMulti1 <- rmultinom(1, size = 500, prob = p1)
sample0 <- rep(states, dMulti0)
sample1 <- rep(states, dMulti1)
sample0 <- factor(sample0, levels = states, ordered = T)
sample1 <- factor(sample1, levels = states, ordered = T)
# Munge simulated data.
data <- rbind(data.frame("x" = 0, "y" = sample0),
data.frame("x" = 1, "y" = sample1))
data
## Run an unconstrained PO model
mod <- blrm(y~x, ppo=~x,data=data, backend = "rstan",keepsep='x', conc = 1,
priorsd = 1, priorsdppo = 1, seed = 1234, iter = 2000,
chains = 4,sampling.args = list(control=list(adapt_delta=0.99,max_treedepth=12)))
Hi Frank, hope youāre going well. Just wanted to follow up on the above issue - totally understand if you have not had time to get around to this yet.
I ran your test script on the latest binary version (Linux in my case) at Directory Tree and it worked fine.
Note: Iāll be updating rmsb
on CRAN soon.
Hi Frank, I installed the latest version of rmsb and am still receiving the same error (using Windows). Did you run the test script using the 13 category outcome?
The problem is caused by keepsep
when using rstan
. Attributes of data matrices are a bit different then but canāt figure our how to make rstan not care, so far. I may need to drop support for rstan
if this keeps up. If you want to help debug I can send you the R object that offends rstan::sampling()
.
I think I found the problem. I need to change attributes of matrices handed to rstan
and had to change max_treedepth
to 30 and seed
to 209. Results may not be meaningful. Working on an update to the package now. Looks like keepsep
is dangerous for this model/data.
I just realized something I wish I had realized a year ago. I can transform the priors on the original parameters to priors on linear combinations of them that come from the QR orthonormalization. Se we should be able to get rid of keepsep
. Another project this week ā¦ See this.
By 2023-09-20 I plan to have rmsb
1.0-0 on RMSb which does not require keepsep
for the main part of the. Iām still trying to determine when I can use the new pcontrast
approach for the non-PO terms. The new approach allows priors to be specified in a more general way, and the QR decomposition is automatically handled. But in running the new version with your test data Iām still getting a sampling error. There may be a particular challenge with the simulated data.
Thanks so much Frank for trying to troubleshoot this anyway. Looking forward to the new package update!