# No correspoding probability function for bernoulli_logit_glm?

Operating System: Clear Linux (28100) and Antergos (Linux)
Interface Version: `rstan (Version 2.18.2, GitRev: 2e1f913d3ca3)`
Compiler/Toolkit: gcc 8.3.1 and gcc 8.2.1

Hi!
Here is documentation for `bernoulli_logit_glm`, yet when I try it in a simple logistic regression model:

``````data {
int<lower=0> N;
int y[N];
matrix[N,4] X;
real mu0;
real mu1;
real sigma0;
real sigma1;
}
parameters {
real beta0;
vector[4] beta1;
}
model {
beta0 ~ normal(mu0, sigma0);
beta1 ~ normal(mu1, sigma1);
y ~ bernoulli_logit_glm(X, beta0, beta1);
// y ~ bernoulli_logit(beta0 + X * beta1);
}
``````

I get the error:

Probability function must end in _lpdf or _lpmf. Found distribution family = bernoulli_logit_glm with no corresponding probability function bernoulli_logit_glm_lpdf, bernoulli_logit_glm_lpmf, or bernoulli_logit_glm_log

This comes up both in RStudio (preview) and when trying to compile the model.

I was intending to benchmark this model, and given Bob Carpenterās statements in this post from October 2017:

Matthijsās first major commit is a set of GLM functions for negative binomial with log link (2ā6 times speedup), normal linear regression with identity link (4ā5 times), Poisson with log link (factor of 7) and bernoulli with logit link (9 times). Wow! And he didnāt just implement the straight-line caseāthis is a fully vectorized implementation as a densityā¦

Iād expect a hefty speed up.

Unlikely, but does calling `rstan::stan_version()` in R return anything other than `"2.18.0"`?

It returns ā`2.18.1`ā.

More basic assumption tests: If you switch to:

``````target += bernoulli_logit_glm_lpmf(y | X, beta0, beta1);
``````

in the model block, do you still get the same error?

No matches for:

Yeah weird. There is some version mismatch somewhere. My only suspicion is that this:

is too high a compiler version and something has broken somewhere. Maybe check which versions of `StanHeaders` and `BH` you have installed?

So, can you confirm you have these functions?

I could also try clang 7.0.1.
I also have a roughly 1-week old build of gcc-trunk (ie, the development branch).

Even my Ubuntu laptop has gcc 8.2.0 as the default compiler, but Iād (not knowing the Stan code base) be surprised if itās the compilerā¦
I can try on the laptop later.

``````> packageVersion("BH")
[1] ā1.69.0.1ā
[1] ā2.18.1ā
``````

Probably should have started by checking this myself - I also get the same compilation error.

1 Like

Do you know if there is an easy way to build and install the develop branch?
If I were to install_github, with ref=ādevelopā, it would use the development branch of rstan, which still points at Stan 2.18.

You might want to check the bottom of this if you havenāt already.

``````remotes::install_github("stan-dev/rstan", ref = "develop", subdir = "rstan/rstan", build_opts = "")
``````

(I never did this. If you still have questions you might want to ping Ben Goodrich.)

The problem is that the development version of RStan (the interface) looks like it does not use the development version of Stan. FWIW, I did just run that, restarted R, and see the same behavior. `stan_version()` still returns 2.18.

@bgoodri, any suggestions, or time-frame until a release where these glm functions are supported?

It depends on when Stan 2.19 gets released.

Iād just like to pop in and mention I am also having these difficulties, or a related one at least. I was going to start a new thread but found this via the searchā¦

``````data {
int<lower=1> N;  // total number of observations
int Y[N];  // response variable
int<lower=1> K;  // number of population-level effects
matrix[N, K] X;  // population-level design matrix
}
parameters {
real Intercept;  // temporary intercept
vector[K] beta;  // population-level effects
}
model {
target += normal_lpdf(Intercept | 0, 1);
target += normal_lpdf(beta | 0, 1);
for (i in 1:N){
target += bernoulli_logit_glm_lpmf(Y[i] | X, Intercept, beta);
}
}
``````

Nor does this work

``````data {
int<lower=1> N;  // total number of observations
int Y[N];  // response variable
int<lower=1> K;  // number of population-level effects
matrix[N, K] X;  // population-level design matrix
}
parameters {
real Intercept;  // temporary intercept
vector[K] beta;  // population-level effects
}
model {
target += normal_lpdf(Intercept | 0, 1);
target += normal_lpdf(beta | 0, 1);
target += bernoulli_logit_glm_lpmf(Y | X, Intercept, beta);
}
``````

They wonāt compile since there is no function found. The latest version of rstan, etc are installed (and just reinstalled to be sure).

You need rstan 2.19, which hasnāt been released yet.

CmdStan 2.19 was released 10 days ago, so I would guess rstan 2.19 is coming soon.