# New to pyro - Looking for Poisson GLM example

Hello,

I’m finding it hard to find a tutorial on how to run a simple poisson GLM. I’m working with insurance data and do not have the time for STAN to sample at such a slow pace. I’m hoping pyro with my GPU will allow for a faster fit.

I found some videos on pyro in general but this particular problem seems to elude me. I’m not sure if it helps, but below is the stan code.

``````data {int<lower=0> N;
vector[N] EDIT_9644A;
vector[N] credit_score_2;
vector[N] gf;
vector[N] credit_spline;
int<lower=0> y1[N];
}

parameters {
real EDIT_9644A_coeff;
real credit_score_2_coeff;
real gf_coeff;
real credit_spline_coeff ;
real intercept;
}
model {
EDIT_9644A_coeff ~ normal(0, 1);
credit_score_2_coeff ~ normal(0, 1);
gf_coeff ~ normal(0, 1);
credit_spline_coeff ~ normal(0, 1);
intercept ~ normal(0,5);

y1 ~ poisson_log(EDIT_9644A_coeff*EDIT_9644A +
credit_score_2_coeff*credit_score_2 +
gf_coeff*gf +
credit_spline_coeff*credit_spline);
}
``````

Thanks for any help or site someone can point me to.

Hi @jordan.howell2, I’d recommend starting with the Bayesian regression tutorial and changing the likelihood from `Normal` to `Poission`:

``````- sigma = pyro.sample("sigma", dist.Uniform(0., 10.))
- mean = self.linear(x).squeeze(-1)
- pyro.sample("obs", dist.Normal(mean, sigma), obs=y)
+ rate = self.linear(x).squeeze(-1).exp()
+ pyro.sample("obs", dist.Poisson(rate), obs=y)
``````

If `.exp()` gives you NANs you might alternatively try `torch.nn.functional.softplus(-)` as the nonlinearity.

1 Like

Thanks. Should I change the observed value `y` to the log form since a frequentist model uses a log link for Poisson distros?

The Poisson distribution expects `obs` to be in count units, so IIUC your `y` will remain unchanged and your log link function would correspond to the `.exp()` in `rate = log_rate.exp()`.

1 Like