turn on suggestions

Auto-suggest helps you quickly narrow down your search results by suggesting possible matches as you type.

Showing results for

Find a Community

- Home
- /
- Analytics
- /
- Stat Procs
- /
- Proc Genmod ZINB distribution, error in estimation...

Topic Options

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page

- Mark as New
- Bookmark
- Subscribe
- Subscribe to RSS Feed
- Permalink
- Email to a Friend
- Report Inappropriate Content

05-23-2017 11:07 AM - edited 05-24-2017 08:25 AM

I'm looking to run a series of zero-inflated negative binomial models for the purpose of creating region-specific adjusted rates for hospital service in newborns. However I'm getting "model did not converge warnings" as well as "Error in estimation routine." I'm using SAS 9.4.

```
proc genmod data = indata;
class servicearea;
model SCD = servicearea d_BW|d_BW|d_BW|d_BW d_GA0-d_GA11
```

d_mult_birth d_outborn d_fetal_distress

d_breech d_congenital d_cord_prolapse

d_hypertension d_oligohydramnios d_polyhydramnios

d_steroid d_maternal_link d_sex

/dist=zinb link=log noint;
zeromodel d_BW|d_BW|d_BW;
ods output parameterestimates=param;
run;

Where the dataset "indata" has 1,133,429 observations with no missing values and SCD is a count of the number of special care days (SCDs) that each newborn has during their birth hospitalization, with 89% having zero days. Each of the "d_:" terms is a predictor of infant mortality and is coded as the difference from the mean value of that parameter. The 4th order d_BW is birth weight, d_GA0-11 are 12 different gestational age categories, all others are presence/absense of various comorbidities.

The goal is to be able to exponentiate the estimates on the servicearea parameters then feed them as the dependent variable into a linear model to produce the final adjustment.

```
data param;
merge param (in=A rename=(estimate=beta))
raw_rates (in=B keep = servicearea rawrate);
by servicearea;
if A and B and index(parameter,'servicearea') ge 1;
rate_mod=exp(beta);
run;
proc genmod data=param;
model beta = rawrate /noint;
ods output parameterestimates=param_b;
run;
data param;
merge param (in=A)
param_b (in=B rename=(estimate=beta_b));
by servicearea;
if A and B;
adjusted_rate = rate_mod * (1/beta_b);
run;
```